我试图以编程方式更改从网站前端创建的帖子的帖子状态。
用户填写表单并预览他们的帖子,如果他们对此感到满意,他们会点击提交按钮获取ID,并将post_status更改为publish
或pending
,取决于他们是否是预先批准的用户。
我的代码是:
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
添加到阵列中,但这对我来说仍然无效。
答案 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},它就会失败。像这样格式化,它的工作原理。希望这可以帮助一些人,因为这似乎是一个不断出现的问题。