Intereting Posts
Объединение нескольких объектов wp_query Ограничение поисковых запросов на каждый IP-адрес в день сокращенный синтаксис для настраиваемых полей Текст подкатегории в URL-адрес сайта wordpress сохранить данные, введенные в Metabox в массив? для использования с / для каждого выхода. Как я могу создать новый элемент меню, который ссылается на архив пользовательского типа сообщения? найти короткий код внутри содержимого сообщения Ошибка при установлении соединения с базой данных – только при нескольких обновлениях Уведомление администратора не отображается Субдомены на страницы Настройка многоязычного сайта wordpress Buddy Press очищает уведомление о активности на перезагрузке страницы html-почта, отправленная с помощью wp_mail, показывает простой Как отображать изображение в заголовке почты с помощью wp_mail () Добавить пользовательское поле в форме комментариев

Попытка избежать включения wp-load.php

Я работаю с плагином, где я пытаюсь подключить систему HR с помощью WordPress. В системе HR есть API XML, поэтому я написал плагин для переноса данных и поместил их в таблицу базы данных WordPress, специфичную для моего плагина. Все это делается с помощью встроенного AJAX и т. Д., Но был запрошен, чтобы человек мог планировать задачу, чтобы он не запрашивал систему HR на каждом посещении сайта (список позиций должен отображаться на сайт на первой странице). Тогда проблема становится синхронизацией. Это среда IIS, поэтому они хотят использовать запланированные задачи для синхронизации сайта. Я объяснил API запланированных задач WordPress, но они предпочитают синхронизировать его вручную через свою собственную инфраструктуру.

Как создать код (по существу, файл php), который может запускаться планировщиком без имени пользователя / пароля без вызова wp-load.php? Их планировщик должен иметь возможность запускать URL-адрес, поэтому это несколько затрудняет его.

Я пытаюсь объяснить это без кода с его общей проблемой, но в этом случае основной скрипт, который я создал и работает, выглядит так:

if ( !defined('WP_LOAD_PATH') ) { /** classic root path if wp-content and plugins is below wp-config.php */ $classic_root = dirname(dirname(dirname(dirname(dirname(__FILE__))))) . '/' ; //echo $classic_root; if (file_exists( $classic_root . 'wp-load.php') ) define( 'WP_LOAD_PATH', $classic_root); else if (file_exists( $path . 'wp-load.php') ) define( 'WP_LOAD_PATH', $path); else exit("Could not find wp-load.php"); } // let's load WordPress require_once( WP_LOAD_PATH . 'wp-load.php'); // If the plugin class is not found, die. if (!class_exists('Aragon_eRH_RSS')) { die('Aragon-eRH RSS not installed.'); } $core = new Aragon_eRH(); $core->aerh_xml_parser_bulk(); 

Теперь они могут запускать http://site.com/wp-content/plugins/aragon-erh-rss/lib/bulk-sync.php?nonce=thenonce

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

Примечание. Я хочу избежать этого, потому что:

  1. Считается плохой практикой
  2. Плагин был отклонен из-за включения WP-Load

Добавьте конечную точку перезаписи, чтобы предоставить вашему плагину общедоступный URL-

 function wpa_my_endpoint(){ add_rewrite_endpoint( 'my_api', EP_ROOT ); } add_action( 'init', 'wpa_my_endpoint' ); 

После того, как вы сбросите правила перезаписи , у вас будет URL, доступный для планировщика для ping.

http://example.com/my_api/do/something/

Затем поймайте эти запросы в действии parse_query чтобы вызвать действие плагина:

 function wpa_parse_query( $query ){ if( isset( $query->query_vars['my_api'] ) ){ include( plugin_dir_path( __FILE__ ) . 'stuff/things.php'); exit; } } add_action( 'parse_query', 'wpa_parse_query' );