رفتن به مطلب

راهکار برای رلود نشدن هنگام لایک کردن


پست های پیشنهاد شده

سلام

ببخشید من این سیستم لایک رو فراهم کردم خواستم ببینم راهی هست که بعد از هربار لایک کردن صفحه بارگزاری نشه

HTML

// The 'likes' meta key value will store the total like count for a specific post, it'll show 0 if it's an empty string
<?php
	$likes = get_post_meta($post->ID, "likes", true);
	$likes = ($likes == "") ? 0 : $likes;
?>

This post has <span id='like_counter'><?php echo $likes ?></span> likes<br>

// Linking to the admin-ajax.php file. Nonce check included for extra security. Note the "user_like" class for JS enabled clients.
<?php
	$nonce = wp_create_nonce("my_user_like_nonce");
	$link = admin_url('admin-ajax.php?action=my_user_like&post_id='.$post->ID.'&nonce='.$nonce);
	echo '<a class="user_like" data-nonce="' . $nonce . '" data-post_id="' . $post->ID . '" href="' . $link . '">Like this Post</a>';
?>
فایل های فانکشن

// used here only for enabling syntax highlighting. Leave this out if it's already included in your plugin file.

// define the actions for the two hooks created, first for logged in users and the next for logged out users
add_action("wp_ajax_my_user_like", "my_user_like");
add_action("wp_ajax_nopriv_my_user_like", "please_login");

// define the function to be fired for logged in users
function my_user_like() {
   
   // nonce check for an extra layer of security, the function will exit if it fails
   if ( !wp_verify_nonce( $_REQUEST['nonce'], "my_user_like_nonce")) {
      exit("Woof Woof Woof");
   }   
   
   // fetch like_count for a post, set it to 0 if it's empty, increment by 1 when a click is registered 
   $like_count = get_post_meta($_REQUEST["post_id"], "likes", true);
   $like_count = ($like_count == ’) ? 0 : $like_count;
   $new_like_count = $like_count + 1;
   
   // Update the value of 'likes' meta key for the specified post, creates new meta data for the post if none exists
   $like = update_post_meta($_REQUEST["post_id"], "likes", $new_like_count);
   
   // If above action fails, result type is set to 'error' and like_count set to old value, if success, updated to new_like_count  
   if($like === false) {
      $result['type'] = "error";
      $result['like_count'] = $like_count;
   }
   else {
      $result['type'] = "success";
      $result['like_count'] = $new_like_count;
   }
   
   // Check if action was fired via Ajax call. If yes, JS code will be triggered, else the user is redirected to the post page
   if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
      $result = json_encode($result);
      echo $result;
   }
   else {
      header("Location: ".$_SERVER["HTTP_REFERER"]);
   }

   // don't forget to end your scripts with a die() function - very important
   die();
}

// define the function to be fired for logged out users
function please_login() {
   echo "You must log in to like";
   die();
}
// used here only for enabling syntax highlighting. Leave this out if it's already included in your plugin file.

// Fires after WordPress has finished loading, but before any headers are sent.
add_action( 'init', 'script_enqueuer' );

function script_enqueuer() {
   
   // Register the JS file with a unique handle, file location, and an array of dependencies
   wp_register_script( "liker_script", plugin_dir_url(__FILE__).'https://hipborn.ir/wp-content/themes/Hipbornpro/Like/ liker_script.js', array('jquery') );
   
   // localize the script to your domain name, so that you can reference the url to admin-ajax.php file easily
   wp_localize_script( 'liker_script', 'myAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' )));        
   
   // enqueue jQuery library and the script you registered above
   wp_enqueue_script( 'jquery' );
   wp_enqueue_script( 'liker_script' );
}
فایل جی کوئری

jQuery(document).ready( function() {
   jQuery(".user_like").click( function(e) {
      e.preventDefault(); 
      post_id = jQuery(this).attr("data-post_id");
      nonce = jQuery(this).attr("data-nonce");
      jQuery.ajax({
         type : "post",
         dataType : "json",
         url : myAjax.ajaxurl,
         data : {action: "my_user_like", post_id : post_id, nonce: nonce},
         success: function(response) {
            if(response.type == "success") {
               jQuery("#like_counter").html(response.like_count);
            }
            else {
               alert("Your like could not be added");
            }
         }
      });
   });
});

 

لینک به ارسال

خب رفقا خودم ردیفش کردم.

قبل از هرچیز از مدیرای ارشد میخوام که لینک سایت بنده رو در کد فانکشن حذف کنند

در قسمت 

https://hip born.  ir/wp-content/themes/Hipbornpro/Like/liker_script.js  

 

یه توضیح بدم برای کسایی که شاید بخوان این کد رو استفاده کنند 

فایل ها رو اضافه کنید و در قسمت کد فانکشن ادرس دقیق فایل جی کوئری رو بدید و عبارت 

plugin_dir_url(__FILE__).

رو حذف کنید.

برای اینکه هر یوزر بتونه فقط یبار لایک کنه هم میتونین با جاوااسکریپت یه کوکی بنویسید. خودم که نوشتم اضافه میکنم

در ضمن میتونید با css هم این کار کنید که لینک بعد از لایک قابلیت کلیک نداشته باشه

 

 

لینک به ارسال
در 21 دقیقه قبل، estedadrap گفته است :

خب رفقا خودم ردیفش کردم.

قبل از هرچیز از مدیرای ارشد میخوام که لینک سایت بنده رو در کد فانکشن حذف کنند

در قسمت 


https://hip born.  ir/wp-content/themes/Hipbornpro/Like/liker_script.js  

 

یه توضیح بدم برای کسایی که شاید بخوان این کد رو استفاده کنند 

فایل ها رو اضافه کنید و در قسمت کد فانکشن ادرس دقیق فایل جی کوئری رو بدید و عبارت 


plugin_dir_url(__FILE__).

رو حذف کنید.

برای اینکه هر یوزر بتونه فقط یبار لایک کنه هم میتونین با جاوااسکریپت یه کوکی بنویسید. خودم که نوشتم اضافه میکنم

در ضمن میتونید با css هم این کار کنید که لینک بعد از لایک قابلیت کلیک نداشته باشه

 

 

سلام. خیلی عالیه که حلش کردید منتهی آدرس مطلق دادن برای فایلهای js کار درستی نیست. کدی که گذاشتید برای حالت افزونه نویسی هست. شما احتمالا دارید این کد رو داخل پوسته استفاده میکنید و مسلما جواب نمیداده. برای آدرس دهی درست داخل پوسته باید از تابع get_template_directory_uri()  استفاده کنید. بصورت زیر:

get_template_directory_uri() . '/assets/js/my_js_file.js'

 

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...