ajax jquery update custom field meta value front end

Вероятно, есть намного более простой способ сделать это. После долгих проб и ошибок, пытающихся получить сообщение из URL-адреса, я решил добавить идентификатор к постоянной ссылке. Однако я понятия не имею, как настраиваемая ценность должна обновляться без обновления страницы.

Jquery

$(document).ready(function(){ $("a").addClass("external"); $("a").attr( "target", "_blank" ); }); jQuery(document).ready(function($) { $('.external').click(function(event) { // had to add the post id to the permalink in loop as url to postid didn't work var currentID = $(this).attr('id'); var data = { action: 'my_action', whatever: currentID }; // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php jQuery.post(ajaxurl, data, function(response) { //update the custom field value without a page refresh }); }); }); 

functions.php

 add_action('wp_ajax_my_action', 'my_action_callback'); function my_action_callback() { global $wpdb; // this is how you get access to the database $whatever = intval( $_POST['whatever'] ); // get number of views if we have any $views = get_post_meta($whatever, views, true); // update or add post meta if(!update_post_meta($whatever, 'views', ($views+1))) { add_post_meta($whatever, 'views', 1, true); } die(); // this is required to return a proper result } 

content.php

 <a href="<?php the_permalink(); ?>" id="<?php the_ID(); ?>"><?php the_title(); ?></a> <?php echo get_post_meta($post->ID, 'views', true) ?> // update the view ? 

Solutions Collecting From Web of "ajax jquery update custom field meta value front end"

Во-первых, вам нужно вывести ответ в свою my_action_callback() . Этот ответ будет доступен в вашем обратном вызове jQuery: function(response){} . В этот момент речь идет только об обновлении HTML -страницы с новым количеством просмотров.

PHP:

 function my_action_callback() { // ... echo $views; exit; } 

JavaScript:

 jQuery.post(ajaxurl, data, function(response) { // $(this) refers to the clicked link. // You may use another selector too if needed. $(this).text(response); });