Я использую https://github.com/gmrchk/swup в сочетании с веткой / древесиной. Это прекрасно работает, однако, я понял, что ни одно из моих предложений if не работает, когда я попадаю на новую страницу, так как SWUP не может прочитать аргументы if из моих файлов веток. (это библиотека JS для динамической загрузки страниц)
Например:
{% if fn('is_single') %}
<div class="progress"></div>
{% endif %}
не загружается вообще, когда я первоначально загружаю страницу на странице, не состоящей из одного сообщения.
Моя идея состояла в том, чтобы заново обработать header.twig (где вышеупомянутое условие if) с помощью вызова AJAX.
AJAX-вызов выглядит так:
function swupReplaceHeader() {
jQuery.ajax({
type: "POST",
url: "/wp-admin/admin-ajax.php",
data: {
action: 'spx_replace_header',
},
success: function (output) {
console.log(output);
}
});
}
swupReplaceHeader();
document.addEventListener('swup:clickLink', swupReplaceHeader);
Он помещен в прослушиватель событий, который срабатывает каждый раз, когда я нажимаю на ссылку.
Функция WP выглядит следующим образом:
add_action('wp_ajax_spx_replace_header', 'spx_replace_header');
add_action('wp_ajax_nopriv_spx_replace_header', 'spx_replace_header');
function spx_replace_header()
{
$context = Timber::get_context();
Timber::render('templates/header.twig', $context);
wp_send_json_success(['AJAX is working']);
}
Я добавил сообщение JSON об отправке, чтобы проверить, работает ли мой вызов AJAX.
Теперь, когда я тестирую вызов AJAX без кода Timber, он работает, но когда я добавляю две строки Timber в функцию, ничего не происходит - даже не появляется сообщение JSON. Я тоже попробовал Timber :: compile безуспешно.
Я надеюсь, что кто-то может мне помочь ..
Лучший,
Dennis