Почему не обновляется содержание базы данных?
Я создаю страницу тип ( тип 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); }
Дополнительно:
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
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;
Если запись создаётся через
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);
Логи WordPress включаются так:
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. Тогда будет видно, когда реально происходит запись в базу.