更改wordpress中的post_status

时间:2014-08-14 12:22:48

标签: php wordpress

我试图以编程方式更改从网站前端创建的帖子的帖子状态。

用户填写表单并预览他们的帖子,如果他们对此感到满意,他们会点击提交按钮获取ID,并将post_status更改为publishpending,取决于他们是否是预先批准的用户。

我的代码是:

if( isset($_POST['publish-event']) ) :

    // check if they have an approved event
    global $current_user;
    get_currentuserinfo();

    $user_id = $current_user->ID;

    if( get_field('approved_organiser', 'user_'.$user_id.'') == true ) :
        $approved = true;
    endif;  


    if( $approved == true ) :
        $status = 'publish';
    else :
        $status = 'pending';
    endif;


    // update event based on status
    $update_post = array(
        'post_type' => 'event',
        'ID' => $_POST['id'],
        'post_status' => $status,
        'edit_date' => true,
        'post_date' => $_POST['post_date']
    );

    var_dump($update_post);
    wp_update_post($update_post);


    $eventCreated = true;

endif; // end if publish

但是,尽管在这种情况下draft变量var_dumping为$update_post,但该事件仍然是WordPress中的pending

为什么它没有改变帖子状态的任何想法?

-------------------------------------------- -----------------------------------------
[编辑]

从update_post中删除日期信息,使其保存为pending。我刚刚尝试将其拆分,因此我首先执行状态,然后单独执行日期,但这会将状态设置为pending,并且不会将发布日期更改为所选的计划时间。< / p>

代码:

$update_status = array(
    'post_type' => 'event',
    'ID' => $_POST['id'],
    'post_status' => $status
);
$statusTest = wp_update_post($update_status);
var_dump($statusTest);


$update_date = array(
    'post_type' => 'event',
    'ID' => $_POST['id'],
    'post_date' => $_POST['post_date']
);
$dateTest = wp_update_post($update_date);
var_dump($dateTest);

在这两种情况下,var_dump都会吐出事件的ID,而不是1。我不确定为什么。

-------------------------------------------- -----------------------------------------
[编辑2]

我一直在谷歌上搜索,显然有人成功地将'post_date_gmt' => $your_post_date添加到阵列中,但这对我来说仍然无效。

1 个答案:

答案 0 :(得分:2)

使用post_date_gmt进行管理以解决此问题,但是我必须将更新分成两部分才能真正实现。我现在有以下代码:

$update_post = array(
    'post_type' => 'event',
    'ID' => $_POST['id'],
    'post_status' => $status
);

$statusTest = wp_update_post($update_post);


if( $_POST['post_date'] > date('Y-m-d H:i:s') ) :

    $gmtdate = gmdate( 'Y-m-d H:i:s', $_POST['post_date'] );

    $update_post = array(
        'post_type' => 'event',
        'ID' => $_POST['id'],
        'edit_date' => true,
        'post_date' => $_POST['post_date'],
        'post_date_gmt' => $gmtdate
    );

    $dateTest = wp_update_post($update_post);

endif;

我不确定为什么会这样,如果我将代码从第二个wp_update_post移到第一个{0},它就会失败。像这样格式化,它的工作原理。希望这可以帮助一些人,因为这似乎是一个不断出现的问题。