Проверить, существует ли заголовок сообщения

#php #wordpress

#php #wordpress

Вопрос:

Я создал плагин для получения заголовка сообщения через API при отправке. Я использовал простой запрос API для получения данных после использования wp_insert_post() функции добавления в БД. Но я хочу проверять каждый раз при отправке в существующий заголовок. Если есть новый заголовок сообщения, добавьте его в базу данных, если нет, то он сообщит, что «Новых сообщений нет»

plugin.php

         if(isset($_POST['enable'])) {

        $url='api/url';
        $result = file_get_contents($url);
        $resultData = json_decode($result);

            foreach ($resultData as  $job) {

                $post_exists = get_page_by_title( $job->JobTitle, OBJECT, 'post');

                if ( post_exists) {
                    
                    $data  = array (
                        'post_type' => 'post',
                        'post_title' => $job->JobTitle,
                        'post_status'   => 'publish',
                        'post_author'   => $user_ID
                    );

                    $post_id = wp_insert_post( $data );
                } 

            }

                echo "Done!";
        }
  

Комментарии:

1. вы можете использовать функцию post_exists() WordPress, пожалуйста, обратитесь к этому URL developer.wordpress.org/reference/functions/post_exists

2. @Bhautik спасибо за отзыв, я пробую эту функцию, все та же проблема (вы можете написать код?

3. проверьте мой ответ.

4. @Bhautik я уже проверил как истинный ответ. Большое спасибо.

5. Вы можете проголосовать, если мой ответ вам поможет.

Ответ №1:

Попробуйте этот код.

 if( isset( $_POST['enable'] ) ) {

    $url        = 'api/url';
    $result     = file_get_contents( $url );
    $resultData = json_decode( $result );

    foreach ($resultData as  $job) {

        $post_title = sanitize_title( $job->JobTitle );
        $post_id    = post_exists( $post_title );

        if( !$post_id ){
            $data = array(
               'post_type'   => 'post',
               'post_title'  => $post_title,
               'post_status' => 'publish',
               'post_author' => $user_ID,
            );
            $post_id = wp_insert_post( $data );
        }else{
            //post title exist
        }

    }

}
  

Ответ №2:

Вы должны попробовать это, этот код вернет массив всех сообщений, которые соответствуют названию.

 global $wpdb;
$query = $wpdb->prepare('SELECT ID FROM ' . $wpdb->posts . ' WHERE post_title = "'.$post_title.'" AND post_status="publish"');
$post_exists = $wpdb->get_results( $query );