rafaello
Новичок
Здравствуйте!
Постараюсь объяснить поподробнее.
Есть такая связка: плагин Directory Pro + Woocommerce + Wordpress.
В файле темы functions.php я прописал хук
и соответственно функцию function action_function_name_9350($х,$y,$z), которая делает запрос в базу данных и меняет срок действия тарифа так как мне надо. (в коробочной версии даты меняются не так, как мне надо).
Хук срабатывает и функция выполняется, все нормально.
Проблема возникла в том, что на морде сайта срок действия нового тарифа отображается по старой (коробочной методике), хотя в база данных стоит изменная дата.
Парадокс какой то.
Потом я обнаружил, что в настройках в админке данного плагина (Directory Pro) есть кнопка "Очистить системный кеш". Вот именно после нажатия на эту кнопку выскакивает сообщение, что кеш очищен и что удивительно, дата на морде сайта обновляется так как в базе данных.
Я стал искать всевозможные варианты программно очистить кеш (браузера, сервера), удаление куков и т.д. Ничего не работает. Значит у этого плагина есть своя система кеширования.
Я скопировал код на этой кнопке "Очистить системный кеш". Вот он:
Потом Я создал файл /wp-admin/my_post.php
Вы спросите, откуда я взял этот код? Отвечу, я его вычислил из файла /wp-admin/admin.php методом подстановки переменных и проверкой на работоспособность.
И прописал вышеуказанную html-форму и если я вызываю эту форму, изменив action="admin.php?" на action="my_post.php?" из внутри админки, то все работает, то есть происходит редирект и выскакивае сообщение, что кеш очищен.
Однако, мне необходимо запустить это из хука, который прописан в functions.php моей темы.
Там я прописал все соответственно через curl post.
Так вот из темы не работает, выходит ошибка то токен неверный, то еще чего.
Раз не работает из темы, то значит здесь два решения:
причем тут присутствуют и $_POST и $_GET
Я искал инфу в интернете и нашел, что do_action() создает хук. Но ведь при пост запросе происходит выполнение определенных функций, не понятно почему.
Искал через терминал
все бесполезно, терминал не нашел файлов с таким содержимым, видать эти названия формируются через какие то переменные.
Файлы класса кеширования я нашел:
Вот содержание ClearCacheTool.php :
Подскажите, если по второму варианту, то как мне вызвать этот класс в хуке?
Или по первому варианту, как исправить файл /wp-admin/my_post.php ?
Постараюсь объяснить поподробнее.
Есть такая связка: плагин Directory Pro + Woocommerce + Wordpress.
В файле темы functions.php я прописал хук
PHP:
add_action( 'woocommerce_order_status_changed', 'action_function_name_9350', 99, 3 );
Хук срабатывает и функция выполняется, все нормально.
Проблема возникла в том, что на морде сайта срок действия нового тарифа отображается по старой (коробочной методике), хотя в база данных стоит изменная дата.
Парадокс какой то.
Потом я обнаружил, что в настройках в админке данного плагина (Directory Pro) есть кнопка "Очистить системный кеш". Вот именно после нажатия на эту кнопку выскакивает сообщение, что кеш очищен и что удивительно, дата на морде сайта обновляется так как в базе данных.
Я стал искать всевозможные варианты программно очистить кеш (браузера, сервера), удаление куков и т.д. Ничего не работает. Значит у этого плагина есть своя система кеширования.
Я скопировал код на этой кнопке "Очистить системный кеш". Вот он:
HTML:
<form id="drts-form-28a52522db1b378f4b6751d54338a157" method="post" action="http://mysite.ru/wp-admin/admin.php?page=drts/directories&q=/_drts/system/tool_with_progress/" class="drts-form drts-system-admin-runtoolwithprogress-run" novalidate="novalidate" data-form-name="system_admin_runtoolwithprogress_run">
<div class="drts-form-buttons drts-bs-form-inline drts-bs-mt-5">
<button type="submit" name="_drts_form_submit[0]" value="0" data-modal-title="false" class=" drts-bs-mr-3 drts-bs-btn drts-bs-btn-primary drts-bs-btn-lg">Run Tool</button>
</div>
<input type="hidden" name="tool" value="system_clear_cache" class="drts-form-field drts-form-type-hidden">
<input type="hidden" name="redirect" value="/directories/system/" class="drts-form-field drts-form-type-hidden">
<input type="hidden" name="_drts_form_build_id" value="28a52522db1b378f4b6751d54338a157" class="drts-form-field drts-form-type-hidden">
<input type="hidden" name="_t_" value="81d1695a07">
</form>
PHP:
<?php
require_once __DIR__ . '/admin.php';
do_action( 'load-toplevel_page_drts/directories' );
do_action( 'toplevel_page_drts/directories' );
И прописал вышеуказанную html-форму и если я вызываю эту форму, изменив action="admin.php?" на action="my_post.php?" из внутри админки, то все работает, то есть происходит редирект и выскакивае сообщение, что кеш очищен.
Однако, мне необходимо запустить это из хука, который прописан в functions.php моей темы.
Там я прописал все соответственно через curl post.
Так вот из темы не работает, выходит ошибка то токен неверный, то еще чего.
Раз не работает из темы, то значит здесь два решения:
- Необходимо напрямую прописать функцию очистки кеша в хуке, а не вылавливать через curl post. А для этого необходимо в самом хуке вызвать экземпляр того класса и вызвать функцию очистки.
- Правильно прописать файл /wp-admin/my_post.php, чтобы через него срабатывал curl post.
PHP:
do_action( 'load-toplevel_page_drts/directories' );
do_action( 'toplevel_page_drts/directories' );
Я искал инфу в интернете и нашел, что do_action() создает хук. Но ведь при пост запросе происходит выполнение определенных функций, не понятно почему.
Искал через терминал
Bash:
grep -rl 'load-toplevel_page_drts/directories'
grep -rl 'toplevel_page_drts/directories'
grep -rl 'load-toplevel_page_drts'
grep -rl 'toplevel_page_drts'
grep -rl '_page_drts'
Файлы класса кеширования я нашел:
PHP:
wp-content/plugins/directories/lib/application/Component/System/Tool/ClearCacheTool.php
wp-content/plugins/directories/lib/application/Component/System/Helper/ToolsHelper.php
wp-content/plugins/directories/lib/application/Component/System/SystemComponent.php
PHP:
<?php
namespace SabaiApps\Directories\Component\System\Tool;
class ClearCacheTool extends AbstractTool
{
protected function _systemToolInfo()
{
return [
'label' => __('Clear cache', 'directories'),
'description' => __('This tool will clear settings and data currently cached.', 'directories'),
'weight' => 5,
'redirect' => true,
];
}
public function systemToolRunTask($task, array $settings, $iteration, $total, array &$storage, array &$logs)
{
$this->_application->getPlatform()->clearCache();
$this->_application->Action('system_clear_cache');
return 1;
}
}
Или по первому варианту, как исправить файл /wp-admin/my_post.php ?