Проблема с запросами wpdb, wp_insert_post, wp_insert_user и т.д. Запрос выполняется дважды.

Вопрос или проблема

Кто-нибудь сталкивался с этой проблемой?

Я создал пользовательский PHP-скрипт, который добавляет новый пост с помощью wp_insert_post(), но каждый раз, когда я запускаю код, он создает 2 новых поста, хотя должно быть только один. Это похоже на то, что он выполняется дважды, поэтому я протестировал другую функцию с использованием wpdb->query, и результат тоже такой же. Это действительно странно. Пожалуйста, помогите, я не знаю, в чем причина и как исправить эту проблему.

Большое спасибо.

Вот пример кода, который я сделал только для тестирования проблемы, и он все еще создает 2 идентичных поста.

   function testtest(){
      $ads_data = array(
            'post_title'    => "тест",
            'post_content'  => "тест",
            'post_status'   => 'опубликовано',
            'post_type' => 'рекламы',
            //'post_author' => $user_id
        );

        // Вставить пост в базу данных
        $ads_id = wp_insert_post( $ads_data );
}add_shortcode('testtest','testtest');

РЕШЕНО

Я разобрался с этой проблемой, причина в следующей строке кода в файле header.php:

<link rel="icon" type="image/png" href="https://wordpress.stackexchange.com/questions/174636/<?php echo esc_url( get_theme_mod("favicon' ) ); ?>" />

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

Я решил свою аналогичную проблему (см. блок кода ниже), изменив путь к wp-load.php. На самом деле я использовал скрипт парсинга URI от Frankie Jaret, который работает только на стандартной установке, но, тем не менее, это то, что я использую. Уверен, вы можете найти функцию, которая распарсит его, где бы он ни находился. Код ниже:

$parse_uri = explode( 'wp-content', $_SERVER['SCRIPT_FILENAME'] );
require_once( $parse_uri[0] . 'wp-load.php' );

Не знаю, поможет ли это вам, но это решило проблему для меня.

Аналогичная проблема: Я понимаю, что это не ответ, но я не могу оставить комментарий, так как это мой первый пост и у меня 0 репутации. Но у меня есть эта точно такая же проблема, я только начал замечать ее недавно и не имею проблем с фавиконом, так как запускаю вставку из cronjob. Я смог воспроизвести это, по крайней мере, 30 раз подряд сегодня. Я опубликую ответ, как только разберусь. Но я точно знаю, что только определенное количество массивов постов передается, и тем не менее он все равно создает два поста, или пользовательских в моем случае.

Ответ или решение

Проблема с дублированием записей при использовании функций wpdb и wp_insert_post в WordPress

Вам, возможно, уже знакома проблема, связанная с дублированием записей, когда выполняются функции wp_insert_post(), wpdb->query() и другие аналогичные. Это может вызвать недоумение, особенно если вы уверены, что код запускается всего один раз. В этом материале мы рассмотрим основные причины, которые могут привести к подобной ошибке, а также способы их устранения.

Причины дублирования записей

  1. Множественные вызовы функции: Убедитесь, что ваша функция, отвечающая за вставку данных, не вызывается несколько раз. Это может происходить в результате ошибки в логике управления, например, в случае автоматических вызовов через хуки или шорткоды.

  2. Проблемы с фильтрами и экшенами: Если вы используете хуки WordPress, такие как init или wp_footer, ваша функция может быть вызвана несколько раз в процессе выполнения скрипта. Проверьте ваш код на наличие таких вызовов.

  3. Кэширование: Если вы используете какие-либо механизмы кэширования (плагин кэширования или CDN), это также может вызвать дублирование, так как система может пытаться снова выполнить код, который уже был выполнен. Пробуйте очищать кэш после внесения изменений.

  4. Ошибки в HTML-коде: Обратите внимание на неожиданные ошибки в вашем HTML, которые могут привести к проблемному рендерингу страницы, как в случае из вашего примера с неправильным вставлением PHP кода в атрибут. Запись может создаваться дважды в результате некорректного выполнения кода. Убедитесь, что PHP внутри HTML правильно обрабатывается.

Как устранить проблему

  1. Логирование: Включение логирования очень поможет. Вы можете использовать функции вроде error_log() для отслеживания того, сколько раз выполняется ваша функция.

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

    function testtest() {
       $title = "test";
       if (!get_page_by_title($title, OBJECT, 'ads')) {
           $ads_data = array(
               'post_title'    => $title,
               'post_content'  => "test",
               'post_status'   => 'publish',
               'post_type'     => 'ads',
           );
           wp_insert_post($ads_data);
       }
    }
    add_shortcode('testtest', 'testtest');
  3. Оптимизация PHP-кода:
    Важно следить за тем, как вставляется PHP-код в HTML. Здесь существует риск возникновения таких проблем, как в приведенном вами примере с вложением в <link>.

  4. Корректный путь к wp-load.php: Как показано в вашем примере, убедитесь, что путь к wp-load.php прописан корректно. Неправильный путь может вызвать повторный запуск скрипта, если он не загружает необходимые компоненты WordPress корректно.

Заключение

Если вы сталкиваетесь с дублированием записей при использовании функций WordPress, важно провести всесторонний анализ вашего кода. Внесите изменения и учитывайте все аспекты, такие как кэширование, структуру HTML и логику вызовов функций. Правильный подход к отладке и внимательность к деталям помогут вам устранить эту проблему.

В случае возникновения дополнительных вопросов вы всегда можете обратиться к сообществу разработчиков WordPress или к специализированным форумам.

Оцените материал
Добавить комментарий

Капча загружается...