我是wordpress新手,但对php和javascript有一定的了解。
我在wordpress上读了很多关于ajax调用的博客。我也在这个论坛上读了一些帖子。然而,我仍然很难用wordpress调用ajax。
我有点困惑在哪里add_action
必须编写钩子(在自定义php函数文件或function.php文件内?或以其他方式)。
调用jquery脚本时,wp_ajax
未定义。。。我不明白我的jquery脚本如何wp_ajax
url或php中的其他变量。
以下是我的不同脚本:
在我的功能中。php(我真的不知道我是需要把它放在这里还是放在我的自定义php文件中):
wp_enqueue_script(\'load_post\', get_template_directory_uri().\'/js/load_post.js\', array(\'jquery\'), \'1.0\', 1 );
wp_localize_script( \'load_post\', \'wp_ajax\',
array( \'url\' => admin_url( \'admin-ajax.php\' ), \'nonce\' => wp_create_nonce(\'ajax_nonce\') ));
在load\\U post中。php
<?php
add_action(\'wp_ajax_load_post\', \'load_post_callback\');
add_action(\'wp_ajax_nopriv_load_post\', \'load_post_callback\');
function load_post_callback() {
if (isset($_POST[\'post_ids\'])) {
$nonce = $_POST[\'nonce\'];
if ( ! wp_verify_nonce( $nonce, \'ajax-nonce\' ) ) {
die ( \'Interdit !\');
}
$ids = array();
$ids[] = $_POST[\'post_ids\'];
$posts_per_page = 8;
global $wp_query;
query_posts(array(\'post_type\' => array(\'post\', \'portfolio\'), \'post__not_in\' => $ids, \'posts_per_page\' => $posts_per_page));
while (have_posts()) : the_post();
$post_type = get_post_type( $post->ID );
if ($post_type == \'post\') {
$post_type = \'blog\';
}
?>
//I do some stuff echo...
<?php
endwhile;
wp_reset_query();
}
}
?>
和load\\u post。js公司
jQuery(document).ready(function($) {
jQuery(\'#next-container\').click(function() {
var IDs = [];
$(".element").each(function(){ IDs.push(this.id); });
$(\'#next-container\').html(\'loading\');
$.ajax({
type: \'POST\',
url: wp_ajax.url,
data: { action: \'load_post\',
ajax_nonce: wp_ajax.nonce,
\'post_ids\': IDs,
}, //{\'post_ids[]\': IDs },//\'post_ids=\'+IDs,
success: function(data) {
$(\'#next-container\').html(\'\');
$container.isotope( \'insert\', $(data));
}
})
})
})
最合适的回答,由SO网友:livearoha 整理而成
在您的功能中。php文件您应该添加一个操作以将脚本排队。
<?php
function my_enqueue_scripts() {
wp_enqueue_script(
\'load_post\',
get_template_directory_uri() . \'/js/load_post.js\',
array( \'jquery\' ),
\'1.0\',
1
);
wp_localize_script(
\'load_post\',
\'wp_ajax\',
array(
\'url\' => admin_url( \'admin-ajax.php\' ),
\'nonce\' => wp_create_nonce( \'ajax_nonce\' )
)
);
}
add_action( \'wp_enqueue_scripts\', \'my_enqueue_scripts\' );
SO网友:Mehrwash Faruqi
我也有一些问题,这就是我如何通过Windows scroll上的Ajax调用功能
$(document).live(\'scroll\',(function(){
// if ($(window).scrollTop() + $(window).height() == $(document).height())
if ($(window).scrollTop() == $(document).height() - $(window).height()) {
LoadonButton();
}
}));
函数LoadonButton(){
var sessionCommentId=$(“.message\\u box:last”).attr(“id”);jQuery(“\\35; slick slidetoggle”).show();jQuery.ajax({类型:\'POST\',url:\'
http://dino-dev.com/foodie/wp-admin/admin-ajax.php\',
数据:{
操作:“HomeComments”,编号:“10”,CommentLoadeId:sessionCommentId},
成功:函数(数据,textStatus,XMLHttpRequest){
jQuery(".comment_box:last").after(data);
},
error: function(MLHttpRequest, textStatus, errorThrown){
}
});}
但是我在HomeComments中调用的插件有问题。已调用插件函数,但未填充选项表或缺少其他内容。如何确保插件正确加载。当我直接调用这个函数时,它工作得非常好。