我找到了
首先,我想指出,根据wordpress中几乎所有关于AJAX的教程,我在问题中提到的方法都很糟糕。所以我决定改变方法,使用Wordpress的内置AJAX。
换句话说,针对我的情况,最好的方法是使用wp-admin/admin-ajax。php。AJAX请求应定向到此文件。我知道文件名的“admin”部分有点误导。但是,前端(查看端)以及管理面板中的所有请求都可以在admin ajax中处理。php,有很多好处,尤其是在安全方面。
步骤如下:
1.The JavaScript code that submits the AJAX request should look something like this:
$(document).ready(function() {
$(\'.select2\').change(function(e) {
e.preventDefault();
var v = $(\'.select2 option:selected\').val();
$.ajax({
type: "GET",
url: "wp-admin/admin-ajax.php", // check the exact URL for your situation
dataType: \'html\',
data: ({ action: \'nextPrevious\', id: v}),
success: function(data){
$(\'#nav-above\').html(data);
},
error: function(data)
{
alert("Your browser broke!");
return false;
}
});
});
});
请注意,在放置JS脚本时,您应该尊重Wordpress的要求(通常在
footer.php
之前
wp-footer()
)
2- Handling the action:
在里面
functions.php
在主题中(或直接在插件文件中),添加:
add_action(\'wp_ajax_nextPrevious\', \'nextPrevious\');
add_action(\'wp_ajax_nopriv_nextPrevious\', \'nextPrevious\');
并在同一文件中定义
nextPrevious
回调函数如下:
function nextPrevious() {
$p= $_GET[\'id\'];
$my_query = new WP_Query();
$my_query->query(array( \'post__in\' => array($p)));
if ($my_query->have_posts()) : while ($my_query->have_posts()) : $my_query->the_post(); ?>
<div class="nav-previous"><?php previous_post_link( \'%link\', \'<img height="34" src="\' . get_bloginfo("template_directory") . \'/images/previous.png" />\' ); ?></div>
<div class="nav-next"><?php next_post_link( \'%link\', \'<img height="34" src="\' . get_bloginfo("template_directory") . \'/images/next.png" />\' ); ?></div>
<?php endwhile;
endif;
wp_reset_query();
die();
}
不要忘记模具功能,这是必需的(谢谢
Bainternet
).
有关Wordpress中AJAX的更多详细信息,请参阅Google首页教程。