
本文接《wordpress后台发布文章,自定义栏目支持HTML,可插入图片》。
在《wordpress后台发布文章,自定义栏目支持HTML,可插入图片》这个文章中我们实现的在wordpress后台实现真正意义上的自定义文章模型的问题。但经本人测试还是有些小问题的,先上下本人的代码:
add_action('admin_menu', 'create_meta_box');
//在加载管理员界面界面的时候调用create_meta_box函数
add_action('save_post', 'save_postdata');
function create_meta_box(){
if(function_exists('add_meta_box')){
//add_meta_box函数在文章编辑页面内添加版块,具体用法放在文章后
add_meta_box('new-meta-box','自定义模块','new_meta_box','post','normal','high');
//此函数调用new_meta_box函数
}
}
function new_meta_box(){
global $post;
$meta_box_value = get_post_meta($post->ID, 'pro_pic', true);
echo '<h4>产品图片</h4>';
wp_editor(str_replace('"','"',$meta_box_value), 'pro_pic', $settings = array(quicktags=>1,
tinymce=>1,
media_buttons=>0,
textarea_rows=>4,
editor_class=>"textareastyle") );
$meta_box_value_chisan = get_post_meta($post->ID, 'chisan', true);
echo '<h4>尺寸与散热</h4>';
wp_editor(str_replace('"','"',$meta_box_value_chisan), 'chisan', $settings = array(quicktags=>1,
tinymce=>1,
media_buttons=>0,
textarea_rows=>4,
editor_class=>"textareastyle") );
$meta_box_value_guangcanshu = get_post_meta($post->ID, 'guangcanshu', true);
echo '<h4>光参数</h4>';
wp_editor(str_replace('"','"',$meta_box_value_guangcanshu), 'guangcanshu', $settings = array(quicktags=>1,
tinymce=>1,
media_buttons=>0,
textarea_rows=>4,
editor_class=>"textareastyle") );
}
function save_postdata($post_id){
global $post;
$data_pic = wpautop($_POST['pro_pic']);
$data_chisan=wpautop($_POST['chisan']);
$data_guangcanshu=wpautop($_POST['guangcanshu']);
if(get_post_meta($post_id,'pro_pic') == "")
add_post_meta($post_id,'pro_pic', $data_pic, true);
elseif($data_pic != get_post_meta($post_id,'pro_pic', true))
update_post_meta($post_id,'pro_pic', $data_pic);
elseif($data_pic == "")
delete_post_meta($post_id,'pro_pic', get_post_meta($post_id,'pro_pic', true));
if(get_post_meta($post_id,'chisan') == "")
add_post_meta($post_id,'chisan', $data_chisan, true);
elseif($data_chisan != get_post_meta($post_id,'chisan', true))
update_post_meta($post_id,'chisan', $data_chisan);
elseif($data_chisan == "")
delete_post_meta($post_id,'chisan', get_post_meta($post_id,'chisan', true));
if(get_post_meta($post_id,'guangcanshu') == "")
add_post_meta($post_id,'guangcanshu', $data_guangcanshu, true);
elseif($data_guangcanshu != get_post_meta($post_id,'guangcanshu', true))
update_post_meta($post_id,'guangcanshu', $data_guangcanshu);
elseif($data_guangcanshu == "")
delete_post_meta($post_id,'guangcanshu', get_post_meta($post_id,'guangcanshu', true));
}
以上代码实现在添加文章中的自定义栏目功能,在编辑文章(也就是修改某个文章的时候)这个功能也正常,但是,当我们在文章列表页面,点击快速编辑的时候,自定义的这几个字段总是被清空。
关于这个问题,我查了好多资料,也看了一天这个WP的代码,我想唯一正确的方法还是从我们的FUNCTION文件着手,而不是去修改WP本身的核心代码。
这里给大家推荐一个网站:http://wordpress.stackexchange.com
基本都是关于WP的问题,不过是英文的。
本文所讲的问题,这里也有涉及到,这里摘录出来:
I have two custom meta fields that I’ve enabled for each post, scottb_customHeader and scottb_customTitle
These work fine as long as I’m using the full edit feature to edit posts. However, when I click “Quick Edit”, then click “Update”, my custom meta values for the post are cleared out. What do I need to do to resolve?
Code is below…
我们来看下正确答案:
I had the same issue. Just add the following code at the beginning of the save_post action hook callback function (the function used to save the custom data).
// handle the case when the custom post is quick edited
// otherwise all custom meta fields are cleared out
if (wp_verify_nonce($_POST['_inline_edit'], 'inlineeditnonce'))
return;
What it actually does: it checks if the quick saving wp_nonce_field exists and returns if that’s the case. No need to create an additional hidden field in the form.
是的,就是这么简单,看来WP在国内的资料还是比较少,大家都在不停的汉化老外的东西,却少了些原创。
正确的函数是:
function save_postdata($post_id){
global $post;
if (wp_verify_nonce($_POST['_inline_edit'], 'inlineeditnonce'))
return;//我想这个就是判断是不是快速编辑的条件,假如是快速编辑就跳出函数,这样以来我们的metabox也就不会被操作了!
$data_pic = wpautop($_POST['pro_pic']);
$data_chisan=wpautop($_POST['chisan']);
$data_guangcanshu=wpautop($_POST['guangcanshu']);
if(get_post_meta($post_id,'pro_pic') == "")
add_post_meta($post_id,'pro_pic', $data_pic, true);
elseif($data_pic != get_post_meta($post_id,'pro_pic', true))
update_post_meta($post_id,'pro_pic', $data_pic);
elseif($data_pic == "")
delete_post_meta($post_id,'pro_pic', get_post_meta($post_id,'pro_pic', true));
if(get_post_meta($post_id,'chisan') == "")
add_post_meta($post_id,'chisan', $data_chisan, true);
elseif($data_chisan != get_post_meta($post_id,'chisan', true))
update_post_meta($post_id,'chisan', $data_chisan);
elseif($data_chisan == "")
delete_post_meta($post_id,'chisan', get_post_meta($post_id,'chisan', true));
if(get_post_meta($post_id,'guangcanshu') == "")
add_post_meta($post_id,'guangcanshu', $data_guangcanshu, true);
elseif($data_guangcanshu != get_post_meta($post_id,'guangcanshu', true))
update_post_meta($post_id,'guangcanshu', $data_guangcanshu);
elseif($data_guangcanshu == "")
delete_post_meta($post_id,'guangcanshu', get_post_meta($post_id,'guangcanshu', true));
}
下一篇: wordpress文章摘要的实现方法
游客回答:(0)