WP-检查帖子是否在wp_insert_post之前存在

时间:2018-09-22 06:52:05

标签: php wordpress

如何检查帖子是否存在于wp_insert_post之前以避免重复?

如果我删除'if'语句(post_exists())并继续插入会产生多个重复的帖子,则下面的代码将起作用。我用post_exists()编写了if语句只是为了开始执行检查的逻辑,但是当我添加if语句时,出现了问题,下面的列表甚至都没有打印出来。

 $body = wp_remote_retrieve_body( $request ); 
  $data = json_decode(utf8ize($body), true); 
  $data_events = $data['events'];

  if( ! empty( $data_events ) ) {
    echo '<ul>';
        foreach( $data_events as $event ) {
        // the if statement below seems to break things ie. no li below printed.
        if ( post_exists( $event['name'] ) == 0 ) {
          echo 'exists';
        } else {
          echo 'doesnt exist';
        }

        echo '<li>';
        echo $event['id'];
                echo '<a href="' . esc_url( $event['uri'] ) . '">' . $event['name'] . '</a>';
        echo '</li>';

        $new_post = array(
          'post_title' => $event['name'],
          'post_content' => 'description',
          'post_status' => 'publish',
          'post_author' => '2',
          'post_type' => 'post',
          'post_category' => array(1),
          'meta_input' => array(
            'hq_id' => $event['id'],
          )
      );
      //wp_insert_post($new_post); // commented out while testing the if statement.



        }
      echo '</ul>';
  }

?>

编辑:请参见$ data_events数组: https://pastebin.com/rC60iNyJ

2 个答案:

答案 0 :(得分:1)

尝试此代码。您需要包含此文件。

因为post_exists功能将在前端的管理页面中起作用。

if ( ! is_admin() ) {
    require_once( ABSPATH . 'wp-admin/includes/post.php' );
}

$body = wp_remote_retrieve_body( $request ); 
$data = json_decode(utf8ize($body), true); 
$data_events = $data['events'];

if( ! empty( $data_events ) ) {
echo '<ul>';
    foreach( $data_events as $event ) {
    // the if statement below seems to break things ie. no li below printed.
    if ( post_exists( $event['name'] ) == 0 ) {
      echo 'exists';
    } else {
      echo 'doesnt exist';
    }

    echo '<li>';
    echo $event['id'];
            echo '<a href="' . esc_url( $event['uri'] ) . '">' . $event['name'] . '</a>';
    echo '</li>';

    $new_post = array(
      'post_title' => $event['name'],
      'post_content' => 'description',
      'post_status' => 'publish',
      'post_author' => '2',
      'post_type' => 'post',
      'post_category' => array(1),
      'meta_input' => array(
        'hq_id' => $event['id'],
      )
  );
  //wp_insert_post($new_post); // commented out while testing the if statement.



    }
  echo '</ul>';
}

答案 1 :(得分:1)

post_exists()功能通常在前端不可用。您可以使用get_page_by_title通过标题查找帖子,而不用包含其他文件。只需测试一个null值以检查它是否不存在。

替换

if ( post_exists( $event['name'] ) == 0 ) {

if ( get_page_by_title( $event['name'] ) == null ) {