我想根据自定义元框中的复选框向当前帖子添加一个元数据字段,以便能够逐个帖子切换我的自定义插件。
为此,我编写了以下代码
在新帖子和新页面上生成元框处理元框中复选框的值,并相应地设置帖子或页面的元数据。但我对2号有问题。我有以下代码来处理元数据的设置:
根据元框中复选框的值更新元数据
// register action
add_action( \'save_post\', \'cl_save_postdata\');
/* When the post is saved, saves our custom data */
function cl_save_postdata( $post_id ) {
// check if $post_id is just a revision id and if so get the parent id
if($parent_id = wp_is_post_revision($post_id)){
$post_id = $parent_id;
}
// verify this came from the our screen and with proper authorization,
// because save_post can be triggered at other times
if ( !wp_verify_nonce( EMU2_I18N_DOMAIN, plugin_basename(__FILE__) ) )
return $post_id;
// verify if this is an auto save routine.
// If it is our form has not been submitted, so we dont want to do anything
if ( defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE )
return $post_id;
// Check permissions
if ( \'page\' == $_POST[\'post_type\'] ) {
if ( !current_user_can( \'edit_page\', $post_id ) )
return $post_id;
} else {
if ( !current_user_can( \'edit_post\', $post_id ) )
return $post_id;
}
// OK, we\'re authenticated: we need to find and save the data
if ($_POST[\'cl-activated\']) {
add_post_meta( $post_id, \'cl-activated\', true, true) or update_post_meta( $post_id, \'cl-activated\', true);
} elseif (get_post_meta ($post_id, \'cl-activated\', true)) {
delete_post_meta( $post_id, \'cl-activated\');
}
return $cl_is_activated;
}
此代码的思想是根据复选框值设置或取消设置“cl激活”元数据。元框的形式如下:
生成内部元框HTML
function cl_generate_inner_box($post, $metabox) {
// Use nonce for verification
wp_nonce_field( plugin_basename(__FILE__), EMU2_I18N_DOMAIN );
// The actual fields for data entry
echo \'<label for="cl-activated">\';
_e("Activate collect links", EMU2_I18N_DOMAIN );
echo \'</label> \';
echo \'<input type="checkbox" id="cl-activated" name="cl-activated" value=\'.$metabox[\'args\'][\'cl-parameter-name\'];
if (get_post_meta($post_id, \'cl-activated\', true)==true) {
echo \' checked="checked"\';
}
echo \' />\';
}
我的问题未设置帖子的元数据。我尝试在数据库中的wp POSTETA表中查找元数据,但无论我做什么,元数据都不存在即使帖子或页面仍然是草稿并且用户只点击保存草稿,是否有办法保存元数据?如果我使用动作
save_post
就像我现在所做的那样,我的印象是,只有当帖子已经发布时才会调用它
编辑
The first problem is solved. 我仔细检查了Wordpress提供的过渡挂钩。在我看来
save_post
当我编辑帖子时,钩子应该被激活。但是,当我单击new post(新建帖子)按钮时会调用它,而当我将帖子另存为草稿时不会调用它。
为了清除,我需要一个钩子,允许我在用户更改帖子上的任何内容时执行一个函数,以查看我的自定义复选框是否已更改,以便我可以相应地更新帖子的元数据。