WP_UPDATE_POST将帖子ID设置为不工作的草稿

时间:2017-11-29 作者:Brian Bruman

特别是WooCommerce产品页面。

我正在使用WP_Query 生成数组。

$params = array(
    \'posts_per_page\' => -1,
    \'post_type\' => \'product\',
    \'orderby\' => \'menu-order\',
    \'order\' => \'asc\',
    \'fields\' => \'ids\',
    \'tax_query\' =>
    array(
        array(
            \'taxonomy\' => \'product_visibility\',
            \'field\' => \'term_id\',
            \'terms\' => 7,
            \'operator\' => \'IN\'
            )
        ));
$wc_query = new WP_Query($params);
$ids = $wc_query->posts;
中的数组$ids 看起来像

Array
(
    [0] => 8700
    [1] => 2558
    [2] => 2579
    [3] => 2582
    [4] => 2588
    . . . . . .
我都试过了for loop

for ($i = 0; $i < $postcount; $i++) {
    wp_update_post(array(\'ID\' => $ids[$i], \'post_status\'   =>  \'draft\'));
}
和aforeach loop

foreach($post_ids as $post_id) {
     $post = array( \'ID\' => $ids, \'post_status\' => \'draft\' );
     wp_update_post($post);
}
两者都不起作用。页面仍设置为Published.

有人知道为什么这样不行吗?

1 个回复
最合适的回答,由SO网友:Daniel Fonda 整理而成

在for循环中,我认为您缺少$postcount变量。。。还有$idss[$i]的拼写错误。。。。根据您所显示的内容,应该是$id[i]。

for ($i = 0; $i < $postcount; $i++) {
    wp_update_post(array(\'ID\' => $ids[$i], \'post_status\'   =>  \'draft\'));
}
尽管如此,我还是会选择foreach循环。

你犯的错误是第二行。

<?php 
  $post_ids = $wc_query->posts;

  foreach($post_ids as $post => $post_id) {
    echo $post_id;
  }
?>
假设这会产生一个很好的ID列表,那么我将执行以下操作:

 <?php 
  $post_ids = $wc_query->posts;

  foreach($post_ids as $post => $post_id) {
    echo $post_id;
    $arrPost = array( \'ID\' => $post_id, \'post_status\' => \'draft\' );
    wp_update_post($arrPost);
  }
?>
恐怕这是我在无法访问这些文件的情况下所能做的最好的了。

回想起var_dump() 是你的朋友!

结束

相关推荐

使用do_action_ref_array帮助回调

通过修改一些插件代码,我成功地获得了我想要的行为。然而,我想使用提供的钩子将我的修改移到插件代码之外,但我似乎无法使其工作。挂钩使用do\\u action\\u ref\\u数组。我能找到的访问php变量的唯一方法是向调试程序发送错误消息,这一事实无助于这种情况。日志文件。(像这样):function ra_func1($args) { $str = print_r($args, true); error_log($str); } add_action (