当您以这种方式直接加载模板文件时,您没有加载WordPress环境,因此没有可用的WordPress函数。
您的两个选项是在前端加载搜索页面并过滤结果,如:
$(\'#results\').load(\'http://mysite.com/?s=searchterm ul#target\');
或者使用WordPress提供的AJAX功能构建搜索功能,请参见
AJAX in Plugins.
EDIT
下面是我如何通过AJAX加载其他帖子的一个示例,如果您愿意,可以对其进行调整以创建搜索功能。
首先,在functions.php
, 我将javascript排队并本地化脚本,以传递将处理我的请求的AJAX URL。WordPress AJAX使用admin-ajax.php
要处理所有AJAX请求(前端或后端),请执行以下操作:
add_action( \'wp_enqueue_scripts\', \'wpa56343_scripts\', 100 );
function wpa56343_scripts() {
wp_enqueue_script(
\'wpa56343_script\',
get_template_directory_uri() . \'/js/scripts.js?ver=1.0\',
array( \'jquery\' ),
null,
false
);
wp_localize_script(
\'wpa56343_script\',
\'WPaAjax\',
array(
\'ajaxurl\' => admin_url( \'admin-ajax.php\' )
)
);
}
在中
scripts.js
, 调用AJAX操作并传递
postoffset
var,以便我可以将其传递给查询。另请注意
WPaAjax.ajaxurl
要传递将处理此请求的URL,请执行以下操作:
jQuery(document).ready(function($){
$(\'#blog-more\').click(function(e){ // <- added
e.preventDefault(); // <- added to prevent normal form submission
var postoffset = $(\'.post\').length;
$.post(
WPaAjax.ajaxurl,
{
action : \'wpa56343_more\',
postoffset : postoffset
},
function( response ) {
$(\'#container\').append( response );
}
);
});
});
在中
functions.php
, 处理我的AJAX请求的函数映射到我在上面的javascript中传递的操作。WordPress的精简版已启动,因此我可以访问大多数WordPress功能:
add_action(\'wp_ajax_wpa56343_more\', \'wpa56343_more\');
add_action(\'wp_ajax_nopriv_wpa56343_more\', \'wpa56343_more\');
function wpa56343_more(){
global $wp_query;
$offset = $_POST[\'postoffset\'];
$args = array(
\'offset\' => $offset,
\'posts_per_page\' => 10
);
$wp_query = new WP_Query( $args );
get_template_part( \'post-template\' );
exit;
}