Я использую простой метод ajax для загрузки контента на сайт WordPress: я ловлю клики по ссылкам навигации и добавляю параметр GET в URL:
jQuery('#topnav a').click(function(e){
e.preventDefault();
url = jQuery(this).attr('href');
jQuery.ajax({
type: 'GET',
url: url,
data: 'naked=1', // my parameter
dataType: 'html',
success: function(data){
jQuery('#content').html(data); // load new content
});
}
});
});
После того, как я проверил этот параметр в шаблонах WordPress и, если этот параметр существует, я не включаю верхний и нижний колонтитулы и загружаю голое содержимое:
<?php
/**
* page.php
* @package WordPress
* @subpackage clean
*/
if (!isset($_GET['naked'])) get_header(); // if parameter exist do not load header ?>
<?php if ( have_posts() ) while ( have_posts() ) : the_post(); // cycle wp start ?>
<h1><?php the_title(); ?></h1>
<?php the_content(); ?>
<?php endwhile; // cycle wp end
if (!isset($_GET['naked'])) get_footer(); // if parameter exist do not load footer ?>
Этот метод работал нормально, но если страница содержит шорткод contactform7, форма отправки ajax не работает, потому что footer.php не включает в себя js сотрудников для формы.
Я пытался поместить функцию wp_footer () в page.php, но функция не добавляет JS-скрипты для формы! Если я поместил wp_head () в page.php тоже — wp_footer () работает нормально.
Любые идеи, пожалуйста.
Если вы посмотрите на строка 200 из wp-includes / default-filters.php, вы заметите, что сценарии поставлены в очередь wp_head
,
Вот почему ваши сценарии не работают. wp_head()
является критической функцией для правильной работы контактной формы 7. Вы должны все еще включать wp_head()
, но не нужно включать wp_header()
для того, чтобы это произошло. Например, следующее должно держать вещи «голыми», но все же разрешать загрузку скриптов:
if ( !isset($_GET['naked']) ) {
get_header(); // if parameter exist do not load header
} else {
wp_head(); // still include wp_head(), but without the rest of the "header"}
Удостоверься что wp_head()
все еще выполняется в вашем документе <head></head>
раздел.
Других решений пока нет …