这个想法很简单。我有一个用get\\u categories()生成的下拉菜单。这将输出无序列表中的类别列表,每个类别都位于其自己的li元素中
当用户单击这些li元素时,我会得到它们的文本值,并基于此,我想创建一个自定义wp\\U查询,该查询只返回该类别中的帖子。为此,我将list元素的文本值加载到JS变量中,并将其发送到php文件进行处理。该php文件按如下方式构造字符串:
$ff_query = new WP_Query(\'posts_per_page=2&category_name=\'.$_POST[\'JSvariable\']);
…理想情况下应该执行它,从DB返回信息。我得到的错误是:
“致命错误:C:\\xampp\\htdocs\\suply\\WP content\\themes\\suply\\includes\\proc\\u cat.php中未找到类‘WP\\u Query’”第3行”
这是我的2个文件的外观:
1) 发送ajax请求的文件:
<script>
$(document).ready(function(e) {
$("#ddmenu li").on(\'click\', function() {
var cValue = $(this).text();
$.post("<?php bloginfo(\'template_url\');?>/includes/proc_cat.php", {name: cValue}, function(cat){
alert(cat);
$(".browse-big-slider").append(cat);
});//end of post
});//end of click
});//end of ready
</script>
2)应处理
if(isset($_POST)){
$name = \'posts_per_page=2&category_name=\'.$_POST[\'name\'];
$ff_query = new WP_Query(\'posts_per_page=2&category_name=\'.$_POST[\'name\']);
something else, but it won`t reach this part.
}
我能做些什么来实现这一目标?或者,作为替代方案,我如何创建我想要的功能类型?(基本上是根据用户选择动态生成的不同查询)。
最合适的回答,由SO网友:Tom J Nowell 整理而成
这是因为当直接调用主题模板时,您只有模板文件中包含/定义的内容,而不是整个WordPress环境。
有些人试图通过添加包含wp标头或加载等来修复此问题,但这是incredibly damaging
在执行AJAX请求时,never 调用主题中的文件,而不是调用WP AJAX API。
使用WP AJAX API,您的文件在functions.php
.
我强烈建议您遵循本文的建议:
http://www.garyc40.com/2010/03/5-tips-for-using-ajax-in-wordpress/#js-global
e、 g.PHP:
wp_localize_script( \'my-ajax-request\', \'MyAjax\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) )
add_action( \'wp_ajax_nopriv_myajax-submit\', \'myajax_submit\' );
add_action( \'wp_ajax_myajax-submit\', \'myajax_submit\' );
function myajax_submit() {
// get the submitted parameters
$postID = $_POST[\'postID\'];
// generate the response
$response = json_encode( array( \'success\' => true ) );
// response output
header( "Content-Type: application/json" );
echo $response;
// IMPORTANT: don\'t forget to "exit"
exit;
}
JS公司:
jQuery.post(
// see tip #1 for how we declare global javascript variables
MyAjax.ajaxurl,
{
// here we declare the parameters to send along with the request
// this means the following action hooks will be fired:
// wp_ajax_nopriv_myajax-submit and wp_ajax_myajax-submit
action : \'myajax-submit\',
// other parameters can be added along with "action"
postID : MyAjax.postID
},
function( response ) {
alert( response );
}
);