Wordpress 如何将 post 状态从待定更改为已批准

Wordpress how to change post status from pending to approved

我需要在创建新 post 时将 post 状态从 pending 更改为 approved,并且如果作者之前已获得批准 post。

我有这样的功能,但代码根本不起作用。

请帮忙:

add_filter('wp_insert_post', 'change_post_status_when_insert_post_data',10,2);

function change_post_status_when_insert_post_data($data) {
    if($data['post_type'] == "post") {
      $posts_args = array(
        'author__in' => $id,
        'post_type' => 'post',
        'post_status' => 'approved',
        'posts_per_page'  => -1,
      );
      $user_posts = get_posts($posts_args);
      $count = count($user_posts);
      if($count > 0) {
        $data['post_status'] = 'approved';
      } else {
        $data['post_status'] = 'pending';
      }
    }
  return $data;
}

the code doesn't work at all

因为

  • wp_insert_post 是动作挂钩而不是过滤器挂钩。因此,使用 add_filter 是不正确的。
  • 您要求 wp_insert_post 给您两个参数,但您在回调函数中使用了一个。
  • $data 是 post object,不是 array。你不能像 $data['post_type'].
  • 那样使用它
  • 'post_status' => 'approved' 不存在。 See the list of valid post statusesDocs
  • 您要找的是 post 状态 publish 不是 approved.

以下代码进入主题的 functions.php 文件。

add_action('wp_insert_post', 'change_post_status_when_insert_post_data', 999, 2);

function change_post_status_when_insert_post_data($post_id, $post)
{

  $posts_args = array(
    'posts_per_page'  => -1,
    'author'          => $post->post_author,
    'post_status'     => 'publish',
  );

  $user_posts = new WP_Query($posts_args);

  $post_status = (('post' == $post->post_type) && ($user_posts->found_posts) && ('publish' != $post->post_status) && ('trash' != $post->post_status)) ? 'publish' : 'pending';

  if ('publish' == $post_status) {
    wp_update_post(array(
      'ID'            =>  $post_id,
      'post_status'   =>  $post_status
    ));
  }
}

我为 post 自动发布所使用的条件:

  • post_type应该是'post'
  • 作者必须至少已经发表了一篇文章post。
  • post_status 不应 publish
  • post_status 也不应该是 trash

还值得一提的是,我使用 WP_Query 及其 属性 found_posts 而不是使用 get_postscount 来判断作者是否有已经发表了post or not.


此答案已在 wordpress 5.8.1 上进行了全面测试并且有效。