相关文章推荐
旅途中的茄子  ·  更新SQL子查询 - ·  2 月前    · 
健壮的野马  ·  MultipartFile.transfer ...·  11 月前    · 
时尚的砖头  ·  深入浅出字符串 - 知乎·  1 年前    · 
慷慨的键盘  ·  version control - ...·  1 年前    · 
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

How to check if the post exists before wp_insert_post to avoid duplication?

The code below works if I remove the 'if' statement (post_exists()) and just keep reinserting posts producing multiple duplications. I wrote the if-statement with post_exists() just to start implementing the logic of checking but the moment I add the if statement, something breaks and the list below doesn't even get printed.

 $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>';

Edit: please see the $data_events array: https://pastebin.com/rC60iNyJ

post_exists required argument 1 to be post title, so check whether you are getting it correctly.? – Parth Goswami Sep 22, 2018 at 6:57

The post_exists() function is not normally available on the front end. Instead of including another file you can use get_page_by_title to find a post by it's title. Just test for a null value to check if it doesn't exist.

Replace

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

Try this code. you need to include this file.

because post_exists function will work on admin page not in frontend.

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 'doesnt exist';
    } else {
      echo 'exists';
    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>';
        

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.