我编写了一个自定义插件,可以在编辑帖子屏幕上插入另一个元框。一旦用户保存或发布了一篇文章,我想创建另一篇具有自定义post\\u类型的文章,这非常有用。但是,其他元数据库中的数据是用我新创建的自定义类型帖子的post\\u id保存的,而不是原始帖子。我怀疑这是由于wp\\u insert\\u post()使用函数刚刚生成的post\\u id更新了全局$post对象。
但我如何才能确保这不会发生?如何确保,例如,所有其他也使用save\\u post挂钩的插件将其数据正确保存到正确的帖子,而不是由wp\\u insert\\u post()创建的自定义类型帖子?
add_action(\'save_post\', array(&$this, \'save_post\'), 1, 1);
public function save_post($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;
}
if($_POST[\'post_type\'] == self::POST_TYPE && current_user_can(\'edit_post\', $post_id))
{
$newContestAdded = false;
$_STBKT_assignedContestHopper = get_post_meta($post_id, \'_STBKT_assignedContestHopper\', true);
if (($_STBKT_assignedContestHopper==\'\' || $_POST[\'STBKT_quickcontest_contestID\']==\'\')
&& get_post_type($post_id) == \'post\') {
// Create contesthopper post object
$CH_post = array(
\'post_title\' => \'\',
\'post_content\' => \'\',
\'post_status\' => \'publish\',
\'post_author\' => 1,
\'post_type\' => \'contesthopper\'
);
$_STBKT_assignedContestHopper = wp_insert_post( $CH_post, $wp_error );
}
}
}
SO网友:s_ha_dum
我没有时间彻底测试这一点(而且你的代码也不是完整的类),所以要知道这个答案有很多猜测,但是save_post
将在您呼叫时再次运行wp_insert_post
. 我认为可能是第二次跑步造成了问题。如果是这样,您应该能够通过让回调从save _post
钩
add_action(\'save_post\', array($this, \'save_post\'), 1, 1);
public function save_post($post_id) {
remove_action(\'save_post\', array($this, \'save_post\'), 1, 1);