SAVE_POST()内的WP_INSERT_POST():是否强制WP不更新全局POST对象?

时间:2014-04-28 作者:Florian Ubr

我编写了一个自定义插件,可以在编辑帖子屏幕上插入另一个元框。一旦用户保存或发布了一篇文章,我想创建另一篇具有自定义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 );
                }
            }
}

1 个回复
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);

结束

相关推荐

为什么不调用/触发“Plugins_Load”?

我正在打电话load_plugin_textdomain 然而,一旦加载了插件,就不会发生这种情况。我确实激活了一个插件,所以这不应该触发吗?add_action(\"plugins_loaded\", \"test_override\"); function init_localization() { echo \"init_localization<br>\"; load_plugin_textdomain (&#x