【问题标题】:WordPress, Contact Form7 not loaded via ajaxWordPress,Contact Form7 未通过 ajax 加载
【发布时间】:2014-04-15 19:08:25
【问题描述】:

需要帮助,我使用的是最新版本的插件和 WP。

我什至设置了一个空白测试主题,只是为了确认我的实际主题不是问题。

基本上,我在一页上有一个联系表 7。如果此页面直接在浏览器中加载,内容和表单将按原样显示。

如果我通过 ajax 加载此页面,内容会按原样显示,但表单不会。而是只显示 Contact Form 7 插件的简码。

这是来自测试主题的示例函数。

function th_test_ajax()
{
$page_id = $_POST['page_id'];

$args = array(
    'page_id' => $page_id,
    'post_status' => 'publish',
    'post_type' => array('page')
);

$wp_query = new WP_Query($args);

if ($wp_query->have_posts())
{
    while ($wp_query->have_posts())
    {
        $wp_query->the_post();

        the_content();
    }
}

die();
}
add_action('wp_ajax_load_content', 'th_test_ajax');
add_action('wp_ajax_nopriv_load_content', 'th_test_ajax');

这里是 jQuery 部分。

jQuery(document).ready(function($) {
$('body').on('click', '#load_page', function(e){
    e.preventDefault();

    $.ajax({
        type: 'POST',
        url: th.ajax_url,
        data: { action: 'load_content', page_id: $(this).data('page-id') },
        cache: false,
        dataType: 'html'
    }).done(function(response) {
        $('#content').html(response);
    });
})
});

这里是index.php,“data-page-id='29'”是短代码所在的页面。

<html>
<?php
wp_head();
?>
<body>
<div id="content">
<p>
<?php
if (have_posts()) 
{
    while (have_posts())
    {
        the_post();

        the_content();
    }
}
?>
</p>
<p id="content">first content!</p>
<a href="/kontakt" id="load_page" data-page-id="29">ajax</a>
</div>
</body>
<?php
wp_footer();
?>
</html>

我什至尝试了其他具有短代码的插件并将它们添加到同一页面,并且它们通过 ajax 工作。

由于某种原因,只有 Contact Form 7 不起作用。

有什么想法吗?

【问题讨论】:

  • 您不能使用 ajax 输出简码。因为在进行 ajax 请求时,admin-ajax.php 不知道 shortcodes.php 文件。使用 ajax 请求时,您无权访问整个 wp 环境。
  • 如果我使用需要短代码的随机插件,它可以工作,为什么如果无法通过 admini-ajax.php 访问整个 wp 环境?这就是让我感到困惑的事情。如果所有短代码都不能通过 admin-ajax.php 工作,那么好吧,这是有道理的。但是除了联系表 7 之外,我尝试过的所有方法都可以正常工作。
  • 我建议你看看这个stackoverflow.com/a/13614297/2706988答案

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


【解决方案1】:

你需要这样称呼:

var ajaxContainer = $('#somediv_id'),
    newCF7 = $('.wpcf7 > form', ajaxContainer);
    newCF7.attr('action', "#" + newCF7.attr('id'));
    wpcf7.initForm( newCF7 );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 2014-07-22
    • 2021-09-30
    相关资源
    最近更新 更多