Intereting Posts
Отобразить имя второй категории пользовательского типа сообщений без ошибки, если его значение равно null? Идентичные пользовательские таксономические пули для одинаковых иерархических детей Создание уведомления об обновлении темы api Получить URL категории для текущей публикации URL-адреса WordPress без сообщений Следует ли избегать значения основных функций перед выводом? Почему WP_Query не работает с category_name? Проблема с wp_query с post_type = page Мета-значение не сохраняется для запланированных сообщений Загрузка изображений на удаленный сервер Количество сообщений, опубликованных за один конкретный день: более легкий способ Ужас двадцать одиннадцать боковых панелей на страницах Как добавить фильтр для вывода всех виджета Есть ли способ сделать этот вид цикла короче и приятнее? Отключить автоматическое сохранение и публикацию изменений внутри темы или плагина

Плагин WordPress, дважды исполняющий код

Я создаю плагин WordPress и застрял в неожиданной проблеме, когда мой код плагина работает дважды.

Посмотрите мой код плагина:

/* Plugin Name: plugin name Plugin URI: Description: Descript Version: 1.0 Author: Author Author URI: License: GPLv2 or later */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly } require_once(dirname(__FILE__) . '/lib/visit_stats.php'); 

Вот мой код visit_stats.php:

 // Current wordpress user id $userid = 3; // Getting visit value from user meta $oldvisitdata = get_user_meta($userid, "visits", true); // For example if it's returning 3 // Now increasing the old visits value by 1 $newvisit = $oldvisitdata + 1; // Now update the meta update_user_meta($userid, 'visits', $newvisit); 

Когда мы получаем значение, оно должно быть 4, но вместо этого оно равно 5, что означает, что когда я +1, он добавляет 2 к старому значению. Я думаю, это происходит только потому, что сценарий работает дважды.

Я сделал тест, чтобы подтвердить его, так что вот вывод времени: <date=12:36:34 am> <date=12:36:41am> . Когда я открываю свой сайт, мой плагин должен выполнять код только один раз, но он делает это дважды, так как разница составляет 7 секунд. Мой код работает дважды в интервале 7 секунд.

Я не понимаю, почему это происходит.

Solutions Collecting From Web of "Плагин WordPress, дважды исполняющий код"

Совсем просто, он загружается несколько раз, потому что вы, вероятно, фактически делаете более одного HTTP-запроса на «WordPress».

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

Например, процесс wp-cron может работать в фоновом режиме по другому запросу, чтобы обрабатывать такие вещи, как запланированные сообщения, проверки обновлений, очистка мусора и другие подобные мирские задачи. Эти HTTP-запросы действительно загружают плагины, поэтому плагины могут делать что-то, когда вызывается процесс wp-cron.

Элементы главной панели мониторинга, такие как «Новости WordPress», отображаются с использованием Javascript. Это отдельные запросы в бэкэнд для подпрограмм admin-ajax, которые загружают WordPress для доступа к функциям HTTP, а затем для извлечения данных из RSS-каналов WordPress.org. Они загружают большую часть WordPress, включая плагины.

То, что вы считаете, – это не столько счетчик «посещения», сколько счетчик «хит», и один визит может быть более чем одним ударом. Если вы действительно хотите посчитать посещения, вы должны рассчитывать гораздо более избирательно, игнорируя такие вещи, как фоновые запросы.

  • Когда выполняется процесс cron, будет определен DOING_CRON.
  • Когда выполняется запрос AJAX, DOING_AJAX будет определен, если он проходит через систему admin-ajax. Однако обратите внимание, что многие плагины и темы используют свою собственную систему обратных вызовов для WordPress и, возможно, ее легко распознать.

Таким образом, вы можете игнорировать эти удары в своем прилавке. Но в реальности вы по-прежнему будете получать «ложные» подсчеты из других плагинов и тем. Поэтому вместо этого вы должны изменить свой метод подсчета, чтобы не рассчитывать на загрузку плагинов, а вместо этого рассчитывать на определенные манипуляции с действием WordPress, которые вы хотите контролировать.