私のサイトは "wp-supper cache"プラグインと "cloudflare.com"でキャッシュされています
だから私のphp関数は投稿ビューの数が正しく機能していないことを数えます。
私はそれのためにajaxを使用しようとしますが、私はJSコードに慣れていないので、どこに問題があるのかわかりません。
functions.phpでは簡単な関数を作成します。
add_action('template_redirect', 'ajax_activation');
function ajax_activation(){
//optional
wp_enqueue_script(
'ajax_script',
get_template_directory_uri() . '/js/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
);
}
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;
$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);
}
ajax.jsファイルのコード:
var postID = $(".view_detail").attr("id");
jQuery.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: postID // you can store it in html attribute for an easy access like: jQuery(element).attr('id');
},
success: function (result) {
}
});
私のテーマのpage.php:
<div id="<?php the_ID(); ?>" <?php post_class('view_detail'); ?>>
どうすればうまくいくか教えてください。どうもありがとうございました!
私はここでいくつかのエラーを見つけました:
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を有効にする
それを達成するための最善の方法は(私の意見では):
//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
);
}
関数宣言
//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>
jQuery
ids = [];
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
}
何かが明確ではない場合はお気軽にお尋ねください
更新
あなたの質問の更新に応じて、これを変更してください。
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);
}
single.php
// ------------Post views----------
<script type="text/javascript">
// get post views
(function($) {
function mostViews() {
$.getJSON("<?php bloginfo('template_directory'); ?>/ajax.php",
{
action: 'get_mostViewedPost',
postid: <?php echo get_the_ID() ?>
}, function (data) {
})
}
var mostViews = new mostViews();
})(jQuery);
</script>
functions.php
// ------------Post views----------
// function to display number of posts.
function getPostViews($postID){
$count_key = 'post_views_count';
$count = get_post_meta($postID, $count_key, true);
if($count==''){
delete_post_meta($postID, $count_key);
add_post_meta($postID, $count_key, '0');
return "0 View";
}
return $count.' Views';
}
// function to count views.
function setPostViews($postID) {
$count_key = 'post_views_count';
$count = get_post_meta($postID, $count_key, true);
if($count==''){
$count = 0;
delete_post_meta($postID, $count_key);
add_post_meta($postID, $count_key, '0');
}else{
$count++;
update_post_meta($postID, $count_key, $count);
}
}
// Add it to a column in WP-Admin
add_filter('manage_posts_columns', 'posts_column_views');
add_action('manage_posts_custom_column', 'posts_custom_column_views',5,2);
function posts_column_views($defaults){
$defaults['post_views'] = __('Views');
return $defaults;
}
function posts_custom_column_views($column_name, $id){
if($column_name === 'post_views'){
echo getPostViews(get_the_ID());
}
}
function postViews_callback(){
setPostViews($_GET['postid']) ;
echo "Success, Post id: ".$_GET['postid'];
die();
}
add_action('ajax_get_mostViewedPost', 'postViews_callback');
add_action('ajax_nopriv_get_mostViewedPost', 'postViews_callback');
// -----------end Post views----------
ajax.php
<?php
//mimic the actuall admin-ajax
define('DOING_AJAX', true);
//make sure you update this line
//to the relative location of the wp-load.php
require_once(dirname(dirname(dirname(dirname($_SERVER['SCRIPT_FILENAME'])))) . '/wp-load.php');
//Typical headers
header('Content-Type: text/html');
send_nosniff_header();
//Disable caching
header('Cache-Control: no-cache');
header('Pragma: no-cache');
$action = esc_attr(trim($_GET['action']));
//A bit of security
$allowed_actions = array(
'get_mostViewedPost'
);
//For logged in users
add_action('ajax_get_mostViewedPost', 'postViews_callback');
//For guests
add_action('ajax_nopriv_get_mostViewedPost', 'postViews_callback');
if(in_array($action, $allowed_actions)) {
if(is_user_logged_in())
do_action('ajax_'.$action);
else
do_action('ajax_nopriv_'.$action);
} else {
die('-1');
}
single.php //post views -=================================================================================<br> <br>
<script type="text/javascript"> <br>
// get post views <br>
(function($) { <br>
function mostViews() { <br>
$.getJSON("<?php bloginfo('template_directory'); ?>/ajax.php", <br>
{ <br>
action: 'get_mostViewedPost', <br>
postid: <?php echo get_the_ID() ?> <br>
}, function (data) { <br>
}) <br>
} <br>
var mostViews = new mostViews(); <br>
})(jQuery); <br>
<br>
</script> <br>
functions.php <br> -================================================================================= <br>
// ------------Post views---------- <br>
// function to display number of posts. <br>
function getPostViews($postID){ <br>
$count_key = 'post_views_count'; <br>
$count = get_post_meta($postID, $count_key, true); <br>
if($count==''){ <br>
delete_post_meta($postID, $count_key); <br>
add_post_meta($postID, $count_key, '0'); <br>
return "0 View"; <br>
} <br>
return $count.' Views'; <br>
} <br>
<br>
// function to count views. <br>
function setPostViews($postID) { <br>
$count_key = 'post_views_count'; <br>
$count = get_post_meta($postID, $count_key, true); <br>
if($count==''){ <br>
$count = 0; <br>
delete_post_meta($postID, $count_key); <br>
add_post_meta($postID, $count_key, '0'); <br>
}else{ <br>
$count++; <br>
update_post_meta($postID, $count_key, $count); <br>
} <br>
} <br>
<br>
// Add it to a column in WP-Admin <br>
add_filter('manage_posts_columns', 'posts_column_views'); <br>
add_action('manage_posts_custom_column', 'posts_custom_column_views',5,2); <br>
function posts_column_views($defaults){ <br>
$defaults['post_views'] = __('Views'); <br>
return $defaults; <br>
} <br>
function posts_custom_column_views($column_name, $id){ <br> <br>
if($column_name === 'post_views'){ <br>
echo getPostViews(get_the_ID()); <br>
} <br>
} <br>
<br>
function postViews_callback(){ <br>
setPostViews($_GET['postid']) ; <br>
echo "Success, Post id: ".$_GET['postid']; <br>
die(); <br>
} <br>
add_action('ajax_get_mostViewedPost', 'postViews_callback'); <br>
add_action('ajax_nopriv_get_mostViewedPost', 'postViews_callback'); <br>
<br>
// -----------end Post views---------- <br>
ajax.php <br> -================================================================================= <br>
<?php <br>
//mimic the actuall admin-ajax <br>
define('DOING_AJAX', true); <br>
<br>
//make sure you update this line <br>
//to the relative location of the wp-load.php <br>
<br>
require_once(dirname(dirname(dirname(dirname($_SERVER['SCRIPT_FILENAME'])))) . '/wp-load.php');
//Typical headers <br>
header('Content-Type: text/html'); <br>
send_nosniff_header(); <br>
<br>
//Disable caching <br>
header('Cache-Control: no-cache'); <br>
header('Pragma: no-cache'); <br>
<br>
$action = esc_attr(trim($_GET['action'])); <br>
<br>
//A bit of security <br>
$allowed_actions = array( <br>
'get_mostViewedPost'
); <br>
//For logged in users <br>
add_action('ajax_get_mostViewedPost', 'postViews_callback'); <br>
//For guests
add_action('ajax_nopriv_get_mostViewedPost', 'postViews_callback');
<br>
if(in_array($action, $allowed_actions)) { <br>
if(is_user_logged_in()) <br>
do_action('ajax_'.$action); <br>
else <br>
do_action('ajax_nopriv_'.$action); <br>
} else { <br>
die('-1'); <br>
} <br>