WordPress Beğen Butonu

wordpress beğen butonu

WordPress için haddinden fazla beğenme ve beğenmeme gibi eklentiler mevcut. Fakat çoğunu indirip sistem de denediğim halde istediğim gibi bir wordpress beğen butonu bulamadım. İstediğime en yakın eklenti Zilla Likes adlı eklenti vardı fakat o da sitedeki sorgu sayısını arttırdığı için açıkçası kullanmak istemedim. Fazla eklenti kullanma taraftarı da değilim zaten. Bu nedenle biraz araştırdım ve Hofmann Sven abimizin buradaki beğenme eklentisine rast geldim. Ama yeterli ingilizcem olmadığı için maalesef o yazıdaki çoğu şeyi anlamadım.

Bu sistemi wordpress‘e uygulamayı çok istedim ama gelin görün ki şu dil problemi yüzünden böyle güzel şeylerden mahrum kalıyoruz sürekli. En kısa sürede bu dil işini halletmek lazım aslında. Neyse konumuza dönelim. Derken bir tane blogda bu sistemin en basit haliyle wordpress bloglara nasıl uygulandığını anlatan ve hemen kendi siteme uyguladığım güzel bir makale ile karşılaştım. Ne güzel o anlatımı yer imlerime de eklemiştim fakat bulamadım, galiba silinmiş 🙁 Bir yabancı blogger sitesiydi ama maalesef linkini şu anda da aramama rağmen bulamıyorum.

Neyse gelelim bu güzelim eklentiyi wordpress bloglarımıza uygulamaya. Eklentinin işe yarayan kısımlarını türkçeleştirdim arkadaşlar. Eklentinin en güzel yanı ise bir İP numarasından sadece bir kere beğenebiliyorsunuz yazıyı ve isterseniz beğeninizi iptal edebiliyorsunuz. Baştan şunu söyleyeyim arkadaşlar bu eklentinin yaptığı aynı işi yukarıda da dediğim gibi zilla likes eklentisi yapıyor. “Ben kodlarla uğraşamam eklentiyi indirmek istiyorum” diyorsanız yazının en sonunda ilgili bağlantıyı bulabileceksiniz. Yazının bu kısmı basit kodlara dayalı olup şu şekilde devam edecektir:

Adım 1

Öncelikle temamızın style.css kısmına şu kodları ekliyoruz:

a.jm-post-like{font-weight:normal;display:inline-block;width:auto;font-size:13px;font-size:0.928571429rem;line-height:1.846153846;-moz-transition:all 0.3s ease-out 0.2s;-webkit-transition:all 0.3s ease-out 0.2s;-o-transition:all 0.3s ease-out 0.2s;}a.jm-post-like.liked{color:#da1b1b;}a.jm-post-like:hover,a.jm-post-like:active,a.jm-post-like:focus,a.liked:hover,a.liked:active,a.liked:focus{color:#000;}

Adım 2

Bu kısımda önemli olan iki dosyamız var. Bir tanesi bu eklentinin javascript dosyası. Bizim işimize haliyle yarayacak olan bu dosyayı sitemdeki adresten çekebilir ve kendi sunucunuza atabilirsiniz şu bağlantı vesilesiyle:

<script type='text/javascript' src='https://www.enesilhan.net/wp-content/themes/anew/js/post-like.js'></script>

Diğeri ise sitemizde Font Awesome icon dosyasının temanızda bulunması gerekiyor. Eğer bu ikon seti sizin temanızda yoksa aşağıdaki koddan “(2) Add Fontawesome Icons” yazılı yerdeki
bu kod yerine”‘/fonts/font-awesome.min.css’” tek tırnaklı adrese şu bağlantıdaki css dosyasını çağırabilirsiniz:

https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css

Bu öenmli bilgileri verdikten sonra temamızın function.php dosyasına şu kodları ekliyoruz:

function like_scripts() {
    wp_enqueue_script( 'jm_like_post', get_template_directory_uri().'/js/post-like.js', array('jquery'), '1.0', 1 );
    wp_localize_script( 'jm_like_post', 'ajax_var', array(
        'url' => admin_url( 'admin-ajax.php' ),
        'nonce' => wp_create_nonce( 'ajax-nonce' )
        )
    );
}
add_action( 'init', 'like_scripts' );

/**
 * (2) Add Fontawesome Icons
 */
function enqueue_icons () {
    wp_register_style( 'font-awesome', get_template_directory_uri().'/fonts/font-awesome.min.css' );
    wp_enqueue_style( 'icon-style' );   
}
add_action( 'wp_enqueue_scripts', 'enqueue_icons' );

/**
 * (3) Save like data
 */
add_action( 'wp_ajax_nopriv_jm-post-like', 'jm_post_like' );
add_action( 'wp_ajax_jm-post-like', 'jm_post_like' );
function jm_post_like() {
    $nonce = $_POST['nonce'];
    if ( ! wp_verify_nonce( $nonce, 'ajax-nonce' ) )
        die ( 'Hata!' );
    
    if ( isset( $_POST['jm_post_like'] ) ) {
    
        $post_id = $_POST['post_id']; // post id
        $post_like_count = get_post_meta( $post_id, "_post_like_count", true ); // post like count
        
        if ( is_user_logged_in() ) { // user is logged in
            $user_id = get_current_user_id(); // current user
            $meta_POSTS = get_user_option( "_liked_posts", $user_id  ); // post ids from user meta
            $meta_USERS = get_post_meta( $post_id, "_user_liked" ); // user ids from post meta
            $liked_POSTS = NULL; // setup array variable
            $liked_USERS = NULL; // setup array variable
            
            if ( count( $meta_POSTS ) != 0 ) { // meta exists, set up values
                $liked_POSTS = $meta_POSTS;
            }
            
            if ( !is_array( $liked_POSTS ) ) // make array just in case
                $liked_POSTS = array();
                
            if ( count( $meta_USERS ) != 0 ) { // meta exists, set up values
                $liked_USERS = $meta_USERS[0];
            }        

            if ( !is_array( $liked_USERS ) ) // make array just in case
                $liked_USERS = array();
                
            $liked_POSTS['post-'.$post_id] = $post_id; // Add post id to user meta array
            $liked_USERS['user-'.$user_id] = $user_id; // add user id to post meta array
            $user_likes = count( $liked_POSTS ); // count user likes
    
            if ( !AlreadyLiked( $post_id ) ) { // like the post
                update_post_meta( $post_id, "_user_liked", $liked_USERS ); // Add user ID to post meta
                update_post_meta( $post_id, "_post_like_count", ++$post_like_count ); // +1 count post meta
                update_user_option( $user_id, "_liked_posts", $liked_POSTS ); // Add post ID to user meta
                update_user_option( $user_id, "_user_like_count", $user_likes ); // +1 count user meta
                echo $post_like_count; // update count on front end

            } else { // unlike the post
                $pid_key = array_search( $post_id, $liked_POSTS ); // find the key
                $uid_key = array_search( $user_id, $liked_USERS ); // find the key
                unset( $liked_POSTS[$pid_key] ); // remove from array
                unset( $liked_USERS[$uid_key] ); // remove from array
                $user_likes = count( $liked_POSTS ); // recount user likes
                update_post_meta( $post_id, "_user_liked", $liked_USERS ); // Remove user ID from post meta
                update_post_meta($post_id, "_post_like_count", --$post_like_count ); // -1 count post meta
                update_user_option( $user_id, "_liked_posts", $liked_POSTS ); // Remove post ID from user meta            
                update_user_option( $user_id, "_user_like_count", $user_likes ); // -1 count user meta
                echo "already".$post_like_count; // update count on front end
                
            }
            
        } else { // user is not logged in (anonymous)
            $ip = $_SERVER['REMOTE_ADDR']; // user IP address
            $meta_IPS = get_post_meta( $post_id, "_user_IP" ); // stored IP addresses
            $liked_IPS = NULL; // set up array variable
            
            if ( count( $meta_IPS ) != 0 ) { // meta exists, set up values
                $liked_IPS = $meta_IPS[0];
            }
    
            if ( !is_array( $liked_IPS ) ) // make array just in case
                $liked_IPS = array();
                
            if ( !in_array( $ip, $liked_IPS ) ) // if IP not in array
                $liked_IPS['ip-'.$ip] = $ip; // add IP to array
            
            if ( !AlreadyLiked( $post_id ) ) { // like the post
                update_post_meta( $post_id, "_user_IP", $liked_IPS ); // Add user IP to post meta
                update_post_meta( $post_id, "_post_like_count", ++$post_like_count ); // +1 count post meta
                echo $post_like_count; // update count on front end
                
            } else { // unlike the post
                $ip_key = array_search( $ip, $liked_IPS ); // find the key
                unset( $liked_IPS[$ip_key] ); // remove from array
                update_post_meta( $post_id, "_user_IP", $liked_IPS ); // Remove user IP from post meta
                update_post_meta( $post_id, "_post_like_count", --$post_like_count ); // -1 count post meta
                echo "already".$post_like_count; // update count on front end
                
            }
        }
    }
    
    exit;
}

/**
 * (4) Test if user already liked post
 */
function AlreadyLiked( $post_id ) { // test if user liked before
    if ( is_user_logged_in() ) { // user is logged in
        $user_id = get_current_user_id(); // current user
        $meta_USERS = get_post_meta( $post_id, "_user_liked" ); // user ids from post meta
        $liked_USERS = ""; // set up array variable
        
        if ( count( $meta_USERS ) != 0 ) { // meta exists, set up values
            $liked_USERS = $meta_USERS[0];
        }
        
        if( !is_array( $liked_USERS ) ) // make array just in case
            $liked_USERS = array();
            
        if ( in_array( $user_id, $liked_USERS ) ) { // True if User ID in array
            return true;
        }
        return false;
        
    } else { // user is anonymous, use IP address for voting
    
        $meta_IPS = get_post_meta( $post_id, "_user_IP" ); // get previously voted IP address
        $ip = $_SERVER["REMOTE_ADDR"]; // Retrieve current user IP
        $liked_IPS = ""; // set up array variable
        
        if ( count( $meta_IPS ) != 0 ) { // meta exists, set up values
            $liked_IPS = $meta_IPS[0];
        }
        
        if ( !is_array( $liked_IPS ) ) // make array just in case
            $liked_IPS = array();
        
        if ( in_array( $ip, $liked_IPS ) ) { // True is IP in array
            return true;
        }
        return false;
    }
    
}

/**
 * (5) Front end button
 */
function getPostLikeLink( $post_id ) {
    $like_count = get_post_meta( $post_id, "_post_like_count", true ); // get post likes
    $count = ( empty( $like_count ) || $like_count == "0" ) ? '' : esc_attr( $like_count );
    if ( AlreadyLiked( $post_id ) ) {
        $class = esc_attr( ' liked' );
        $heart = '<i class="fa fa-heart"></i>';
    } else {
        $class = esc_attr( '' );
        $title = esc_attr( 'Beğen' );
        $heart = '<i class="fa fa-heart-o"></i>';
    }
    $output = '<a href="#" class="jm-post-like'.$class.'" data-post_id="'.$post_id.'" title="'.$title.'">'.$heart.'&nbsp;'.$count.'</a>';
    return $output;
}

/**
 * (6) Retrieve User Likes and Show on Profile
 */
add_action( 'show_user_profile', 'show_user_likes' );
add_action( 'edit_user_profile', 'show_user_likes' );
function show_user_likes( $user ) { ?>        
    <table class="form-table">
        <tr>
            <th><label for="user_likes"><?php _e( 'You Like:' ); ?></label></th>
            <td>
            <?php
            $user_likes = get_user_option( "_liked_posts", $user->ID );
            if ( !empty( $user_likes ) && count( $user_likes ) > 0 ) {
                $the_likes = $user_likes;
            } else {
                $the_likes = '';
            }
            if ( !is_array( $the_likes ) )
            $the_likes = array();
            $count = count( $the_likes ); 
            $i=0;
            if ( $count > 0 ) {
                $like_list = '';
                echo "<p>\n";
                foreach ( $the_likes as $the_like ) {
                    $i++;
                    $like_list .= "<a href=\"" . esc_url( get_permalink( $the_like ) ) . "\" title=\"" . esc_attr( get_the_title( $the_like ) ) . "\">" . get_the_title( $the_like ) . "</a>\n";
                    if ($count != $i) $like_list .= " &middot; ";
                    else $like_list .= "</p>\n";
                }
                echo $like_list;
            } else {
                echo "<p>" . _e( 'You don\'t like anything yet.' ) . "</p>\n";
            } ?>
            </td>
        </tr>
    </table>
<?php }

/**
 * (7) Add a shortcode to your posts instead
 * type  36 in your post to output the button
 */
function jm_like_shortcode() {
    return getPostLikeLink( get_the_ID() );
}
add_shortcode('jmliker', 'jm_like_shortcode');

/**
 * (8) If the user is logged in, output a list of posts that the user likes
 * Markup assumes sidebar/widget usage
 */
function frontEndUserLikes() {
    if ( is_user_logged_in() ) { // user is logged in
        $like_list = '';
        $user_id = get_current_user_id(); // current user
        $user_likes = get_user_option( "_liked_posts", $user_id );
        if ( !empty( $user_likes ) && count( $user_likes ) > 0 ) {
            $the_likes = $user_likes;
        } else {
            $the_likes = '';
        }
        if ( !is_array( $the_likes ) )
            $the_likes = array();
        $count = count( $the_likes );
        if ( $count > 0 ) {
            $limited_likes = array_slice( $the_likes, 0, 5 ); // this will limit the number of posts returned to 5
            $like_list .= "<aside>\n";
            $like_list .= "<h3>" . __( 'You Like:' ) . "</h3>\n";
            $like_list .= "<ul>\n";
            foreach ( $limited_likes as $the_like ) {
                $like_list .= "<li><a href='" . esc_url( get_permalink( $the_like ) ) . "' title='" . esc_attr( get_the_title( $the_like ) ) . "'>" . get_the_title( $the_like ) . "</a></li>\n";
            }
            $like_list .= "</ul>\n";
            $like_list .= "</aside>\n";
        }
        echo $like_list;
    }
}

/**
 * (9) Outputs a list of the 5 posts with the most user likes TODAY
 * Markup assumes sidebar/widget usage
 */
function jm_most_popular_today() {
    global $post;
    $today = date('j');
      $year = date('Y');
    $args = array(
        'year' => $year,
        'day' => $today,
        'post_type' => array( 'post', 'enter-your-comma-separated-post-types-here' ),
        'meta_key' => '_post_like_count',
        'orderby' => 'meta_value_num',
        'order' => 'DESC',
        'posts_per_page' => 5
        );
    $pop_posts = new WP_Query( $args );
    if ( $pop_posts->have_posts() ) {
        echo "<aside>\n";
        echo "<h3>" . _e( 'Today\'s Most Popular Posts' ) . "</h3>\n";
        echo "<ul>\n";
        while ( $pop_posts->have_posts() ) {
            $pop_posts->the_post();
            echo "<li><a href='" . get_permalink($post->ID) . "'>" . get_the_title() . "</a></li>\n";
        }
        echo "</ul>\n";
        echo "</aside>\n";
    }
    wp_reset_postdata();
}

/**
 * (10) Outputs a list of the 5 posts with the most user likes for THIS MONTH
 * Markup assumes sidebar/widget usage
 */
function jm_most_popular_month() {
    global $post;
    $month = date('m');
      $year = date('Y');
    $args = array(
        'year' => $year,
        'monthnum' => $month,
        'post_type' => array( 'post', 'enter-your-comma-separated-post-types-here' ),
        'meta_key' => '_post_like_count',
        'orderby' => 'meta_value_num',
        'order' => 'DESC',
        'posts_per_page' => 5
        );
    $pop_posts = new WP_Query( $args );
    if ( $pop_posts->have_posts() ) {
        echo "<aside>\n";
        echo "<h3>" . _e( 'This Month\'s Most Popular Posts' ) . "</h3>\n";
        echo "<ul>\n";
        while ( $pop_posts->have_posts() ) {
            $pop_posts->the_post();
            echo "<li><a href='" . get_permalink($post->ID) . "'>" . get_the_title() . "</a></li>\n";
        }
        echo "</ul>\n";
        echo "</aside>\n";
    }
    wp_reset_postdata();
}

/**
 * (11) Outputs a list of the 5 posts with the most user likes for THIS WEEK
 * Markup assumes sidebar/widget usage
 */
function jm_most_popular_week() {
    global $post;
    $week = date('W');
      $year = date('Y');
    $args = array(
        'year' => $year,
        'w' => $week,
        'post_type' => array( 'post', 'enter-your-comma-separated-post-types-here' ),
        'meta_key' => '_post_like_count',
        'orderby' => 'meta_value_num',
        'order' => 'DESC',
        'posts_per_page' => 5
        );
    $pop_posts = new WP_Query( $args );
    if ( $pop_posts->have_posts() ) {
        echo "<aside>\n";
        echo "<h3>" . _e( 'This Week\'s Most Popular Posts' ) . "</h3>\n";
        echo "<ul>\n";
        while ( $pop_posts->have_posts() ) {
            $pop_posts->the_post();
            echo "<li><a href='" . get_permalink($post->ID) . "'>" . get_the_title() . "</a></li>\n";
        }
        echo "</ul>\n";
        echo "</aside>\n";
    }
    wp_reset_postdata();
}

/**
 * (12) Outputs a list of the 5 posts with the most user likes for ALL TIME
 * Markup assumes sidebar/widget usage
 */
function jm_most_popular() {
    global $post;
    echo "<aside>\n";
    echo "<h3>" . _e( 'Most Popular Posts' ) . "</h3>\n";
    echo "<ul>\n";
    $args = array(
         'post_type' => array( 'post', 'enter-your-comma-separated-post-types-here' ),
         'meta_key' => '_post_like_count',
         'orderby' => 'meta_value_num',
         'order' => 'DESC',
         'posts_per_page' => 5 
         );
    $pop_posts = new WP_Query( $args );
    while ( $pop_posts->have_posts() ) {
        $pop_posts->the_post();
        echo "<li><a href='" . get_permalink($post->ID) . "'>" . get_the_title() . "</a></li>\n";
    }
    wp_reset_postdata();
    echo "</ul>\n";
    echo "</aside>\n";
}

Adım 3

Evet artık sadece bu kodları küçük bir php koduyla temamıza eklemek kalıyor. Temanızda ister yazı içine ister anasayfaya şu kod yardımıyla beğenme butonunu ekleyebilirsiniz arkadaşlar:

<?php echo getPostLikeLink( $post->ID );?>

Kodlarla işimiz bitti. Şimdi bu kodlarla uğraşmak istemeyen kişiler bu bağlantıdan Zilla Likes isimli eklentiyi indirip bloglarına kurabilirler. Ama şunu söyleyeyim direk indiremiyorsunuz. Mail adresinizi felan girip oraya indirme bağlantısını gönderiyor. Ben bununla da uğraşmak istemiyorum bana hemen balığı ver diyorsanız buyrun ben daha önceden indirmiştim 🙂

indir - [49,2 KiB] - Toplam indirme: 29

Bir beğen‘i hak ettik sanırım, esen kalın 😉

Bu yazıdan önce yazmış olduğum "Jquery ile Linkleri Yeni Sekmede Açma" başlıklı yazımı da okumanızı tavsiye ederim.

Herkese Merhabalar, ben Enes İLHAN. Gaziantep'te doğdum, Adana'da Büro Yönetimi ve Yönetici Asistanlığı bölümünü okudum ve 2012'de mezun oldum. Askerliğimi uzun dönem olarak, { acemiliği Ankara/Mamak'ta , usta birliğini ise Hatay/İskenderun'da } yapıp bitirmiş bulunmaktayım. Şimdi ise hayata atılmanın çabası içerisine girmiş bulunmakta olup iş bulma derdindeyim.

3 yorum

  1. Roman   •  

    Blog dünyasına tekrardan hoş geldin, bir kalp de benden gelsin 🙂

    • Enes ILHAN   •     Yazar

      Hoşbulduk, teşekkür ediyorum Roman 🙂

  2. Highlift   •  

    Bilgilendirme için çok teşekkürler, bende bu konu hakkında etrafa bakınıyordum eklentiyi kullanacağım.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Güvenlik Sorusu ? * Time limit is exhausted. Please reload the CAPTCHA.