Cant't delete my custom posts

时间:2015-05-04 作者:pipoulito

我在函数中添加了此代码。php,以便在每次更新mu custom post时用ACF字段替换post\\U日期。它工作得很好!

但是

现在在WP admin中,我无法删除(垃圾)列表中的任何自定义帖子

谁能帮帮我吗?谢谢

add_action(\'save_post\', \'change_content\');

global $post;
global $wpdb;
function change_content($post_id) 
{
    if(get_post_type($post_type) == \'mycustompost\' &&  get_field (\'dates_0_date_spectacle\')     != \'\' )
    {   
        $datefield = get_post_meta($post_id,\'dates_0_date_spectacle\',true);
        $post_date = date("Y-m-d H:i:s", strtotime($datefield));
        $my_post = array();
        $my_post[\'ID\'] = $post_id;
        $my_post[\'post_date\'] = $post_date;
        $my_post[\'post_status\'] = \'publish\';
        remove_action(\'save_post\', \'change_content\');
        wp_update_post( $my_post );
        add_action(\'save_post\', \'change_content\');
    }
}

1 个回复
SO网友:David

当然,你的自定义帖子不能被丢弃。他们甚至无法设置为私人或草稿或其他任何内容publish 因为你的回拨change_content() 始终将post状态设置为publish 每次(自定义帖子类型的)帖子保存时。然而,贬损帖子只意味着将其状态设置为trash.

我不确定您想用这行代码实现什么:

$my_post[\'post_status\'] = \'publish\';
但是,如果您想跟踪状态更改,则必须连接到transition_post_status 钩下面是一个快速但未经测试的示例,介绍如何做到这一点:

namespace WPSE186226;

class TrackPostStatus {

    private $tashedPostsIds = [];

    /**
     * @wp-hook transition_post_status
     * @param string $newStatus
     * @param string $oldStatus
     * @param \\WP_Post $post
     */
    public function post_status_transition( $newStatus, $oldStatus, \\WP_Post $post ) {

        //e.g. register when a post gets trashed:
        if ( \'trash\' !== $old_status && \'trash\' === $new_status )
            $this->trashedPostsIds[] = $post->ID;
    }

    /**
     * @wp-hook save_post
     * @param int $postId
     */
    public function handle_post( $postId ) {

        if ( ! in_array( $postId, $this->trashedPostIds ) )
             return;

        // call your logic here. 
    }

}

$postStatusTracker = new TrackPostStatus;
add_action( \'transition_post_status\', [ $postStatusTracker, \'post_status_transition\' ], 10, 3);
add_action( \'save_post\', [ $postStatusTracker, \'handle_post\' ] );
注意:此示例使用PHP 5.4语法,与PHP 5.3或更低版本不兼容

这种方式为您提供了更灵活的后期状态转换处理。但是,当您只想跟踪新状态时,有一个更简单的挂钩:{$new_status}_{$post_type}

结束

相关推荐