Программно добавленные записи WordPress не отображаются в профиле автора

18 июн. 2022 г., 14:17:53
Просмотры: 74
Голосов: 1

Я программно добавил запись в WordPress. При просмотре страницы автора записи, добавленные программно, не отображаются, но после ручного обновления записи всё работает корректно. В чём может быть причина и как это исправить?

Код в моём плагине:

add_action('wp_ajax_insert_data_to_post_type_func', 'insert_data_to_post_type_func');

function insert_data_to_post_type_func(){
    global $wpdb;
    $table_name = $wpdb->prefix . 'ebay_listings';
    $select_query =  $wpdb->get_results("SELECT * FROM $table_name LIMIT 1");
    $user_id_get = $_POST['userID'];
    foreach ($select_query as $sq) {
        
        $heading = $sq->title;
        $x = json_decode($heading);

        $des = $sq->long_desctiption;
        $y = json_decode($des);
        $z = json_decode($sq->add_id);
        $imgs = json_decode($sq->image_URL);
        $date = json_decode($sq->date);
        $location = json_decode($sq->location);
        $list_items = json_decode($sq->list_items);
        $price = json_decode($sq->price);

        foreach ($x as $tx) {
            $title[] = $tx;
        }
        foreach ($y as $lng_des) {
            $description[] = $lng_des;
        }

        foreach ($z as $add) {
            $add_id[] = $add;
        }
        foreach ($date as $dt) {
            $eb_date[] = $dt;
        }
        foreach ($location as $loc) {
            $locality[] = $loc;
        }
        foreach ($list_items as $lit) {
            $listings[] = $lit;
        }
        foreach ($price as $p) {
            $pricing[] = $p;
        }
        $i = -1;
      
        foreach ($imgs as $sd) {
          
            $i++;
            $image_name = basename($sd);
           
            $advert_posts = array(
                'post_author' => $user_id_get,
                'post_type' => 'advert',
                'post_title' => $title[$i],
                'post_content' => $description[$i] . $listings[$i],
                'post_status' => 'publish',
            );
            $post_id = wp_insert_post($advert_posts);
            $category_id = 877;
            $taxonomy = 'advert-category';
            wp_set_object_terms( $post_id, array( $category_id ), $taxonomy , true );
            add_post_meta( $post_id , 'advert_sale_price' , $pricing[$i]);
            add_post_meta( $post_id , 'advert_type' , 1);
            add_post_meta( $post_id , 'advert_negotiable' , 1);
            add_post_meta( $post_id , 'advert_location' , $locality[$i]);
            
            var_dump( get_post_field( 'post_author', $post_id ), $user_id_get);
            
            $upload = wp_upload_bits($image_name, null, file_get_contents($sd, FILE_USE_INCLUDE_PATH));
            $imageFile = $upload['file'];
            $wpFileType = wp_check_filetype($imageFile, null);
          
            // Установка метаданных для галереи
            $attachment = array(
                'post_mime_type' => $wpFileType['type'],  // тип файла
                'post_title' => sanitize_file_name($imageFile),  // очищаем и используем имя изображения как имя файла
                'post_content' => '',  // можно использовать описание изображения как содержимое
                'post_status' => 'inherit'
            );
            $attachmentId = wp_insert_attachment($attachment, $imageFile, $post_id);

            // Генерация и возврат метаданных вложения
            $attachmentData = wp_generate_attachment_metadata($attachmentId, $imageFile);

            // Обновление и возврат метаданных вложения
            wp_update_attachment_metadata($attachmentId, $attachmentData);
            // Связывание ID вложения с ID записи
            $success = set_post_thumbnail($post_id, $attachmentId);
            add_post_meta( $post_id , 'advert_gallery' , set_post_thumbnail($post_id, $attachmentId));
            
            if ($success) {
                echo 'Данные и изображения были успешно добавлены';
            } else {
                echo 'Произошла ошибка';
            }
        }
        wp_die();
    }
}
ubaid ismail
ubaid ismail
11
Комментарии

Как вы определяете $user_id_get - где код для этого? И где работает код вашего плагина - на какой странице (админ-страница?) и находится ли код в функции, привязанной к какому-либо хуку - если да, то к какому хуку?

Sally CJ Sally CJ
18 июн. 2022 г. 15:19:53

На самом деле, это отправка формы, которая получает ID пользователя отмеченного пользователя. Я не использую никакие хуки. Код выполняется при AJAX-отправке формы. @SallyCJ

ubaid ismail ubaid ismail
18 июн. 2022 г. 16:06:00

Как работает отправка - отправляет ли форма через AJAX на ту же страницу, в пользовательский PHP-файл, например example.com/process.php, или в файл admin-ajax.php? И я подозреваю, что автор записи не устанавливается, поэтому попробуйте var_dump( get_post_field( 'post_author', $post_id ), $user_id_get ); сразу после вызова wp_insert_post(). Каков результат дампа?

Sally CJ Sally CJ
18 июн. 2022 г. 16:49:11

Форма отправляется через wp-ajax.php, и пост правильно назначен автору, потому что я отслеживал посты каждого пользователя через get_userdata(user_id). И там есть тот же пост, который я назначил этому пользователю.

ubaid ismail ubaid ismail
18 июн. 2022 г. 18:50:31

"пост правильно назначен автору" — вы уверены, что он назначен именно $user_id_get? Может, просто сделать var_dump() и посмотреть, что он выводит? И если значения корректны, то, возможно, стоит попробовать отключить плагины и/или переключиться на стандартную тему (например, 2021) и посмотреть, поможет ли это.

Sally CJ Sally CJ
19 июн. 2022 г. 08:02:56

Я выполнил var_dump(), и он корректно отображает ID пользователя, но я попробовал отключить плагины и сменить тему и всё равно ничего не нашёл.

ubaid ismail ubaid ismail
19 июн. 2022 г. 11:16:12

Когда ты сказал "страница авторов", ты имел в виду стандартные страницы авторов, такие как example.com/author/admin, верно? Также, ты не рассматривал использование REST API вместо этого? (Для создания поста CPT) И ты сказал "Форма отправляется через wp-ajax.php", но что такое wp-ajax.php? Ты имел в виду хук wp_ajax_? Если да, можешь показать полный код callback-функции?

Sally CJ Sally CJ
19 июн. 2022 г. 14:05:10

Да, я отредактировал код выше, пожалуйста, проверь.

ubaid ismail ubaid ismail
19 июн. 2022 г. 15:38:14

Собственно, проблема в том, что пост не добавляется в базу данных, пока я вручную не нажму кнопку обновления на экране редактирования поста.

ubaid ismail ubaid ismail
20 июн. 2022 г. 00:20:57

Что ж, я сейчас немного запутался.. но что я могу предложить, это включить WP_Error, т.е. установить второй параметр для wp_insert_post() в true - $post_id = wp_insert_post($advert_posts, true); - и затем сразу после этого сделать что-то вроде if ( is_wp_error( $post_id ) ) { echo 'пост не создан: ' . $post_id->get_error_message(); continue; }. Это поможет вам подтвердить, успешно ли пост вставляется в базу данных или нет. Также обратите внимание, что CPT по умолчанию не включаются в основной запрос на страницах "автора", но я полагаю, вы уже это учли?

Sally CJ Sally CJ
20 июн. 2022 г. 16:22:39

И где находится рассматриваемая форма - на экране редактирования поста или на пользовательской странице админки? Как вы добавляете форму (какие хуки использованы, если есть), или вы на самом деле имели в виду форму редактирования поста - и если да, то это классический редактор или блоковый/Gutenberg редактор? И как срабатывает AJAX - автоматически (в фоне) или по клику на кнопку, или?

Sally CJ Sally CJ
20 июн. 2022 г. 16:25:37

Проблема решена: было обязательное поле метабокса, которое нужно было заполнить, чтобы добавить пост в базу данных.

ubaid ismail ubaid ismail
21 июн. 2022 г. 15:09:37
Показать остальные 7 комментариев