Почему не обновляется содержание базы данных?

Ссылка скопирована
1 ответ

Я создаю страницу тип ( тип page) на моем сайте https://t****n.ru/ с помощью post-запроса на мой сайт и соответствующего кода который указан у меня в файле functions.php моей темы.

Но запись в базе данных сайта не появляется (не вижу новую запись в phpmyadmin) до тех пор пока я не загружу юрл с созданной страницей в моем браузере или же когда я загружу в браузере в админке список страниц сайта, тоесть этот url:

https://t*****n.ru/wp-admin/edit.php?post_type=page&orderby=date&order=desc

https://t*****n.ru/wp-admin/edit.php?post_type=page&orderby=date&order=desc

....и только тогда запись в БД сайта появляется!

Подскажите почему так? И где можно посмотреть логи происходящих процессов приводящих к отображению в phpmyadmin новой записи?

вот код в functions.php :

global $newly_created_post_id; $newly_created_post_id = "";  // Инициализируем пустой строкой  // Функция для создания файла лога function log_to_file($message) {     $log_file_path = '/home/e/el~~~~скрыл~~~~84/t~~скрыл~~~n.ru/public_html/BAS.txt';     file_put_contents($log_file_path, $message . PHP_EOL, FILE_APPEND); }  // Определение пароля для проверки запросов $my_special_password = "F~~~~скрыл~~~~s";  // Ассоциативный массив с ID родительских страниц $parent_page_ids = array(   'en' => 42926,   'zh' => 42906,   'es' => 42910,   'pt' => 42912,   'id' => 42914,   'fr' => 42916,   'ja' => 42918,   'de' => 42920,   'tr' => 42922,   'it' => 42924, );  // Функция для проверки пароля function check_request_password() {     global $my_special_password;     if (isset($_REQUEST['password']) && $_REQUEST['password'] === $my_special_password) {         return true;     }     return false; }  // Функция для создания страницы function create_page() {     global $parent_page_ids;     global $wpdb;      // Step 1: Receive data from BAS     $title = isset($_REQUEST['A_TITLE']) ? $_REQUEST['A_TITLE'] : 'No Title';          // Step 2: Process the data     $processed_title = strtoupper($title);      // Step 3: Save the processed result     $title = $processed_title;      $content = "<br><br><br><img rel='preload' as='image' title='{$_REQUEST['PODPIS_TITILE_DLA_KARTINKI_DLA_INDEX_YANDEX_GOOGLE']}' src='https://t~~скрыл~~~n.ru/all_webp_images/{$_REQUEST['G_PRISTAVKA_DLA_WEBP_KARTINKI']}' alt='{$_REQUEST['PODPIS_TITILE_DLA_KARTINKI_DLA_INDEX_YANDEX_GOOGLE']}' rel='nofollow' width='675' height='{$_REQUEST['IMAGE_HEIGHT']}' class='alignnone size-medium' /> <br><br> {$_REQUEST['TEXT_BOLSHOY_STATIY']}";      $language = isset($_REQUEST['VZIALI_ODIN_JAZIK']) ? strtolower(trim(strval($_REQUEST['VZIALI_ODIN_JAZIK']))) : '';     $url_end = isset($_REQUEST['E_PRISTAVKA_K_URL_NEWS_ZIFRA']) ? $_REQUEST['E_PRISTAVKA_K_URL_NEWS_ZIFRA'] : '';      $full_page_slug = $url_end;      $page = array(         'post_title'    => $title,         'post_content'  => $content,         'post_status'   => 'publish',         'post_type'     => 'page',         'post_name'     => $full_page_slug,     );      if ($language !== 'ru' && isset($parent_page_ids[$language])) {         $page['post_parent'] = $parent_page_ids[$language];     }      return wp_insert_post($page, true); }    function update_meta_tags($post_id) {     global $wpdb;      // Вывод $_REQUEST['SEO_TITLE'] и $_REQUEST['META_DESC'] перед обновлением     log_to_file("SEO_TITLE: " . $_REQUEST['SEO_TITLE']);     log_to_file("META_DESC: " . $_REQUEST['META_DESC']);      $seo_title = isset($_REQUEST['SEO_TITLE']) ? $_REQUEST['SEO_TITLE'] : '';     $meta_description = isset($_REQUEST['META_DESC']) ? $_REQUEST['META_DESC'] : '';      $update_result = $wpdb->update(         'oocnb_aioseo_posts',         array(             'title' => $seo_title,             'description' => $meta_description         ),         array('post_id' => $post_id)     );      if (false === $update_result) {         log_to_file('Failed to update SEO title and description for post_id: ' . $post_id . ". SQL error: " . $wpdb->last_error);     } else {         log_to_file('Successfully updated SEO title and description for post_id: ' . $post_id);          // Initialize retry count         $retries = 0;                  while ($retries < 10) {             // Очистка кэша             wp_cache_flush();             if (function_exists('w3tc_flush_all')) {                 w3tc_flush_all();             }              // Чтение из БД после обновления             $row = $wpdb->get_row("SELECT title, description FROM oocnb_aioseo_posts WHERE post_id = $post_id", ARRAY_A);             if ($row) {                 log_to_file("Read from DB: SEO_TITLE: " . $row['title'] . ", META_DESC: " . $row['description']);                 return; // Выходим из функции если удалось прочитать данные             } else {                 log_to_file('Failed to read updated values from the database for post_id: ' . $post_id);                 $retries++;  // Увеличиваем счетчик попыток                 sleep(5);  // Ждем 5 секунды перед следующей попыткой             }         }                  // Если мы вышли из цикла, значит попытки исчерпаны         log_to_file('Tried 10 times to read the database but still can't read for post_id: ' . $post_id);     } }      // Функция для создания страницы и обновления метатегов function create_and_update_page() {     global $wpdb;     global $parent_page_ids;     global $newly_created_post_id;      if (!check_request_password()) {         return;     }      if ($_REQUEST['action_type'] !== 'create_page') {         log_to_file('action_type is not create_page.');         return;     }      // Создание новой страницы и временный вывод результата wp_insert_post     $newly_created_post_id = create_page();     log_to_file("Result of wp_insert_post: " . var_export($newly_created_post_id, true));      // Проверка на ошибки при создании страницы     if (is_wp_error($newly_created_post_id)) {         log_to_file('Error creating new post: ' . $newly_created_post_id->get_error_message());         return;     }      // Шаг 1: Ожидание, пока $newly_created_post_id станет длиннее 2 символов     $tries = 0;     while (strlen($newly_created_post_id) <= 2) {         sleep(1);         $tries++;         if ($tries >= 30) {             log_to_file("Waited too long for newly_created_post_id to be longer than 2 characters.");             return;         }     }      // Шаг 2: Проверка наличия такой страницы в базе данных     $post_exists = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->prefix}posts WHERE ID = $newly_created_post_id");     if (!$post_exists) {     log_to_file("The post with id $newly_created_post_id does not exist in the database.");     return;     } else {     log_to_file("The post with id $newly_created_post_id successfully found in the database.");     }          // Шаг 3: Обновление метатегов     update_meta_tags($newly_created_post_id); }

global $newly_created_post_id; $newly_created_post_id = ""; // Инициализируем пустой строкой // Функция для создания файла лога function log_to_file($message) { $log_file_path = '/home/e/el~~~~скрыл~~~~84/t~~скрыл~~~n.ru/public_html/BAS.txt'; file_put_contents($log_file_path, $message . PHP_EOL, FILE_APPEND); } // Определение пароля для проверки запросов $my_special_password = "F~~~~скрыл~~~~s"; // Ассоциативный массив с ID родительских страниц $parent_page_ids = array( 'en' => 42926, 'zh' => 42906, 'es' => 42910, 'pt' => 42912, 'id' => 42914, 'fr' => 42916, 'ja' => 42918, 'de' => 42920, 'tr' => 42922, 'it' => 42924, ); // Функция для проверки пароля function check_request_password() { global $my_special_password; if (isset($_REQUEST['password']) && $_REQUEST['password'] === $my_special_password) { return true; } return false; } // Функция для создания страницы function create_page() { global $parent_page_ids; global $wpdb; // Step 1: Receive data from BAS $title = isset($_REQUEST['A_TITLE']) ? $_REQUEST['A_TITLE'] : 'No Title'; // Step 2: Process the data $processed_title = strtoupper($title); // Step 3: Save the processed result $title = $processed_title; $content = "<br><br><br><img rel='preload' as='image' title='{$_REQUEST['PODPIS_TITILE_DLA_KARTINKI_DLA_INDEX_YANDEX_GOOGLE']}' src='https://t~~скрыл~~~n.ru/all_webp_images/{$_REQUEST['G_PRISTAVKA_DLA_WEBP_KARTINKI']}' alt='{$_REQUEST['PODPIS_TITILE_DLA_KARTINKI_DLA_INDEX_YANDEX_GOOGLE']}' rel='nofollow' width='675' height='{$_REQUEST['IMAGE_HEIGHT']}' class='alignnone size-medium' /> <br><br> {$_REQUEST['TEXT_BOLSHOY_STATIY']}"; $language = isset($_REQUEST['VZIALI_ODIN_JAZIK']) ? strtolower(trim(strval($_REQUEST['VZIALI_ODIN_JAZIK']))) : ''; $url_end = isset($_REQUEST['E_PRISTAVKA_K_URL_NEWS_ZIFRA']) ? $_REQUEST['E_PRISTAVKA_K_URL_NEWS_ZIFRA'] : ''; $full_page_slug = $url_end; $page = array( 'post_title' => $title, 'post_content' => $content, 'post_status' => 'publish', 'post_type' => 'page', 'post_name' => $full_page_slug, ); if ($language !== 'ru' && isset($parent_page_ids[$language])) { $page['post_parent'] = $parent_page_ids[$language]; } return wp_insert_post($page, true); } function update_meta_tags($post_id) { global $wpdb; // Вывод $_REQUEST['SEO_TITLE'] и $_REQUEST['META_DESC'] перед обновлением log_to_file("SEO_TITLE: " . $_REQUEST['SEO_TITLE']); log_to_file("META_DESC: " . $_REQUEST['META_DESC']); $seo_title = isset($_REQUEST['SEO_TITLE']) ? $_REQUEST['SEO_TITLE'] : ''; $meta_description = isset($_REQUEST['META_DESC']) ? $_REQUEST['META_DESC'] : ''; $update_result = $wpdb->update( 'oocnb_aioseo_posts', array( 'title' => $seo_title, 'description' => $meta_description ), array('post_id' => $post_id) ); if (false === $update_result) { log_to_file('Failed to update SEO title and description for post_id: ' . $post_id . ". SQL error: " . $wpdb->last_error); } else { log_to_file('Successfully updated SEO title and description for post_id: ' . $post_id); // Initialize retry count $retries = 0; while ($retries < 10) { // Очистка кэша wp_cache_flush(); if (function_exists('w3tc_flush_all')) { w3tc_flush_all(); } // Чтение из БД после обновления $row = $wpdb->get_row("SELECT title, description FROM oocnb_aioseo_posts WHERE post_id = $post_id", ARRAY_A); if ($row) { log_to_file("Read from DB: SEO_TITLE: " . $row['title'] . ", META_DESC: " . $row['description']); return; // Выходим из функции если удалось прочитать данные } else { log_to_file('Failed to read updated values from the database for post_id: ' . $post_id); $retries++; // Увеличиваем счетчик попыток sleep(5); // Ждем 5 секунды перед следующей попыткой } } // Если мы вышли из цикла, значит попытки исчерпаны log_to_file('Tried 10 times to read the database but still can't read for post_id: ' . $post_id); } } // Функция для создания страницы и обновления метатегов function create_and_update_page() { global $wpdb; global $parent_page_ids; global $newly_created_post_id; if (!check_request_password()) { return; } if ($_REQUEST['action_type'] !== 'create_page') { log_to_file('action_type is not create_page.'); return; } // Создание новой страницы и временный вывод результата wp_insert_post $newly_created_post_id = create_page(); log_to_file("Result of wp_insert_post: " . var_export($newly_created_post_id, true)); // Проверка на ошибки при создании страницы if (is_wp_error($newly_created_post_id)) { log_to_file('Error creating new post: ' . $newly_created_post_id->get_error_message()); return; } // Шаг 1: Ожидание, пока $newly_created_post_id станет длиннее 2 символов $tries = 0; while (strlen($newly_created_post_id) <= 2) { sleep(1); $tries++; if ($tries >= 30) { log_to_file("Waited too long for newly_created_post_id to be longer than 2 characters."); return; } } // Шаг 2: Проверка наличия такой страницы в базе данных $post_exists = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->prefix}posts WHERE ID = $newly_created_post_id"); if (!$post_exists) { log_to_file("The post with id $newly_created_post_id does not exist in the database."); return; } else { log_to_file("The post with id $newly_created_post_id successfully found in the database."); } // Шаг 3: Обновление метатегов update_meta_tags($newly_created_post_id); }

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Мария Код Ответ

WordPress не может показать созданную страницу до того, как запись реально появилась в базе. Если вы видите страницу по URL, а в phpMyAdmin запись появляется только после открытия списка страниц, чаще всего есть путаница с кэшем phpMyAdmin, транзакциями, другой базой данных или кодом, который создаёт страницу не там, где вы думаете.

Первое, что нужно проверить: WordPress и phpMyAdmin смотрят в одну и ту же базу. Откройте wp-config.php и проверьте DB_NAME, DB_HOST, префикс таблиц. Затем выполните запрос:

SELECT ID, post_title, post_type, post_status, post_date
FROM wp_posts
ORDER BY ID DESC
LIMIT 10;

SELECT ID, post_title, post_type, post_status, post_date FROM wp_posts ORDER BY ID DESC LIMIT 10;

Если запись создаётся через wp_insert_post(), она появляется в базе сразу. Пример правильной проверки:

$post_id = wp_insert_post($data, true);
 
if (is_wp_error($post_id)) {
    error_log('Create page error: ' . $post_id->get_error_message());
    return;
}
 
error_log('Created page ID: ' . $post_id);

$post_id = wp_insert_post($data, true); if (is_wp_error($post_id)) { error_log('Create page error: ' . $post_id->get_error_message()); return; } error_log('Created page ID: ' . $post_id);

Логи WordPress включаются так:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

define('WP_DEBUG', true); define('WP_DEBUG_LOG', true); define('WP_DEBUG_DISPLAY', false);

И смотреть файл wp-content/debug.log. Также смотрите error log сервера.

Если код висит в functions.php и реагирует на каждый запрос, возможно, страница создаётся именно тогда, когда вы открываете URL или админку. То есть POST-запрос не создаёт страницу, а последующий GET-запрос триггерит ваш код. Проверьте условия запуска обработчика: он должен выполняться только при нужном endpoint/POST/action и не зависеть от обычной загрузки сайта.

Для такой логики лучше сделать REST endpoint или admin_post, логировать входящий запрос и сразу возвращать созданный ID. Тогда будет видно, когда реально происходит запись в базу.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно