wp_footer()在没有wp_head()的情况下不起作用?

时间:2014-12-11 07:31:54

标签: php jquery ajax wordpress contact-form-7

我使用简单的ajax方法在wordpress网站中加载内容:我点击导航链接点击并将GET参数添加到网址:

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()工作正常。

请任何想法。

1 个答案:

答案 0 :(得分:2)

如果查看line 200 of wp-includes/default-filters.php,您会注意到脚本已加入wp_head

这就是您的脚本无法运行的原因。 wp_head()是Contact Form 7正常运行的关键功能。您仍需要包含wp_head(),但不要包含wp_header()以便实现此目的。例如,以下内容应该保留&#34; naked&#34;,但仍然允许加载脚本:

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>部分中运行。