【发布时间】: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