我在这里发现了一些错误:
jQuery.ajax({
type: "POST",
contentType: "application/json; charset=utf-8", // default: \'application/x-www-form-urlencoded; charset=UTF-8\'. you can not set
url: "http://localhost/wp-admin/admin-ajax.php", // if you have correctly enabled ajax in wp, you should use the object you set up with the url
data: "{\'action\':\'get_PostViews(" + idpost + ")\'}", // you can use a PlainObject notation, so you don\'t need to double quoted. action property is the name of your function as you written in function.php
success: function (result) {
alert(\'Update Success!\');
}
});
看看这里
jQuery.ajax() .要在WordPress中使用ajax,请执行以下步骤:
启用ajax功能在函数中声明函数。php使用javascript/jquery将数据发送到服务器并侦听检索到的数据
Enabling ajax
在我看来,实现这一目标的最佳方式是:
//File functions.php
add_action(\'template_redirect\', \'ajax_activation\');
function ajax_activation(){
//optional
wp_enqueue_script(
\'ajax_script\',
get_template_directory_uri() . \'/js/jquery.ajax.js\', // path to your js file for ajax operations
array( \'jquery\' ), false
);
//end optional
wp_localize_script(
\'ajax_script\', // the name of your global.js registered file
\'ajax_object\', // name
array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) // you can add other items for example for using a translated string in javascript/jquery context
);
}
Declare function //File functions.php
add_action(\'wp_ajax_get_PostViews\', \'get_PostViews\');
add_action(\'wp_ajax_nopriv_get_PostViews\', \'get_PostViews\');
function get_PostViews() {
$id = isset( $_POST[\'id\'] ) ? $_POST[\'id\'] : false;
// your code here
wp_die(); // | die(); you need this to avoid trailing zero
}
jQuery/Javascript
$.ajax({
type: "POST",
url: ajax_object.ajaxurl, // this is the object you defined in function.php
data: {
action: \'get_PostViews\', // the name of your function
id: // you can store it in html attribute for an easy access like: jQuery(element).attr(\'id\');
},
success: function (result) {
}
});
我猜您正在对循环中的所有帖子使用此函数,您可以调用ajax一次来完成所有帖子的工作。例如,我想用ajax检索我帖子的标题:
HTML
<html>
<!-- some stuff here -->
<h3 id="<?php echo get_the_ID(); ?>" class="spyhole"></h3> <!-- there are many of this : ) -->
<!-- some stuff here -->
</html>
jQueryids = [];
items = $(\'.spyhole\');
$.each( items, function( i, v){
ids.push( $(v).attr( \'id\' ) ); // each value is added to array
});
$.ajax({
type: "POST",
url: ajax_object.ajaxurl,
data: {
action: \'getMyTitleAjax\',
id: ids
},
success: function (result) {
data = $.parseJSON( result ); // Takes a well-formed JSON string and returns the resulting JavaScript object.
$.each( data, function( i, v ){
$(\'.spyhole[id="\' + i + \'"]\').html( v ); // print the title
});
}
});
PHP
// Enabling ajax - functions.php
add_action(\'template_redirect\', \'ajax_activation\');
function ajax_activation(){
//optional
wp_enqueue_script(
\'ajax_script\',
get_template_directory_uri() . \'/js/jquery.ajax.js\', // path to your js file for ajax operations
array( \'jquery\' ), false
);
//end optional
wp_localize_script(
\'ajax_script\', // the name of your global.js registered file
\'ajax_object\', // name
array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) // you can add other items for example for using a translated string in javascript/jquery context
);
}
// Declare my function
add_action(\'wp_ajax_getMyTitleAjax\', \'getMyTitleAjax\', 3);
add_action(\'wp_ajax_nopriv_getMyTitleAjax\', \'getMyTitleAjax\', 3);
function getMyTitleAjax() {
$ids = isset( $_POST[\'id\'] ) ? $_POST[\'id\'] : false; // check if there is something in global $_POST
if( $ids && is_array( $ids ) ){
foreach( $ids as $id ){
$titles[$id] = get_the_title( $id );
}
}
echo json_encode( $titles ); // prints the result
wp_die(); // avoid trailing zero
}
希望有帮助,如果有什么不清楚的地方,请尽管问
Update
根据您的问题更新,更改此选项:
function get_PostViews() {
$id = isset( $_POST[\'id\'] ) ? $_POST[\'id\'] : false;
$count_key = \'post_views_count\';
$count = get_post_meta($post_ID, $count_key, true);
if( empty($count) ){ $count = 1; } else { $count++; }
update_post_meta($post_ID, $count_key, $count);
}
使用此选项:
function get_PostViews() {
$id = isset( $_POST[\'id\'] ) ? $_POST[\'id\'] : false;
$count_key = \'post_views_count\';
$count = get_post_meta($id, $count_key, true);
if( empty($count) ){ $count = 1; } else { $count++; }
update_post_meta($id, $count_key, $count);
}