Home Blog wp_Dev. function Korea SNS 플러그인을 통해 공유되는 카운트 기록 및 확인

Korea SNS 플러그인을 통해 공유되는 카운트 기록 및 확인

SNS 공유 회수에 대한 트래킹을 확인할 수 있도록 어드민에 적용을 해 본 내용입니다.
이 중 어드민에 컬럼을 추가하는 부분,
그리고 Ajax(화면 전환 없이 이벤트 처리)는 상당히 유용한 부분인데 방법도 꽤 간단한 거 같아서 필요하실 경우 한 번 응용을 해 보시라 공유합니다.

 

크게 두가지 방법을 참고했습니다.
1. 어드민에 포스트 메타 정보 컬럼 추가하기 (sort 가능하도록)
2. Ajax 호출 방법 활용 (Korea SNS 플러그인의 구조상 직접 수정이 어려움 > 클릭 이벤트를 다른 데 영향을 주지 않고 체크하기 위해서 Ajax 활용)

 

위 두가지 내용은 구글을 통해 검색을 해 보면 수많은 정리 글을 확인할 수 있습니다.
그 중 따라만 해도 정확한 결과가 나오던 글들은…

 

위 내용을 토대로 적절히 조합을 했더니,
각 SNS 클릭 시의 클래스를 체크해서 어떤 버튼이 눌렸는지 확인 후 그 정보를 토대로 메타 정보를 불러다 하나씩 + 를 하고, 어드민에 공유 카운트에 따라 오름차순/내림차순 정렬이 가능한 컬럼들을 추가할 수 있었습니다. (예제에서 필요한 정보들로 일부만 조정)

코드를 functions.php에 등록을 해도 되고, 또는 플러그인 형태로 만들어서 적용해도 됩니다.

(※ 아래는 두 파일을 플러그인 형태로 한 폴더에 담고 플러그인 형태로 설치했을 때의 예입니다.)

korea-sns-share-track.php 파일 내용
/**
 * Plugin Name: KoreaSNS Share Track
.......
*/

// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) exit;

// ------------------------------------------- Share Count Add to post meta (by Ajax)
// ----------------------------------------------------------------------------------
add_action( 'wp_enqueue_scripts', 'sns_share_count_assets' );
function sns_share_count_assets() {
    
    wp_enqueue_script( 'koreasns_track', plugins_url( '/track.js', __FILE__ ), array('jquery'), '1.0', true );

    wp_localize_script( 'koreasns_track', 'shareinfo',      // .js 파일로 배열 객체를 전달할 수 있음 
        array('ajax_url' => admin_url( 'admin-ajax.php' ),   
               'post_ID' => get_the_ID()                    // 현재 글 ID를 전달함 
        )
    );  
}

add_action( 'wp_ajax_nopriv_post_share_count', 'post_share_count' );     
add_action( 'wp_ajax_post_share_count', 'post_share_count' );
function post_share_count() {   // js 파일에서 호출하는 함수, 저장된 카운트를 불러와서 하나 +하고 다시 메타 정보에 저장   
    $count = get_post_meta( $_POST['post_id'], $_POST['meta_key'], true );    
    $count++;
    if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { 
        update_post_meta( $_POST['post_id'], $_POST['meta_key'], $count );
        echo $_POST['meta_key']. ':' .$count;  // console.log확인용 결과 표시   
    }
    die();
}

// ------------------------------------------------- Share Count Show to Admin Column
// ----------------------------------------------------------------------------------
// Function: Get the number of Share [ Count ]
function get_ShareCount_meta($post_ID, $key) {   
    $count = get_post_meta($post_ID, $key, true); 
    return $count;   
}
// 어드민의 글(post) 리스트에 컬럼 추가  
function regist_share_count_columns($columns){
    $columns['share_facebook'] = __('Facebook');
    $columns['share_kakaostory'] = __('KStory'); 
    $columns['share_kakaotalk'] = __('KTalk'); 
    $columns['share_naverline'] = __('Line'); 
    $columns['share_naverband'] = __('Band');   
    $columns['share_naverblog'] = __('NBlog');     
    return $columns;
}
add_filter( 'manage_post_posts_columns', 'regist_share_count_columns' ); 
add_filter( 'manage_product_posts_columns', 'regist_share_count_columns' );      
 
// Function: new 컬럼들에 컨텐츠 출력 (카운트 수)
function show_share_count($column_name, $id) {   
    if($column_name === 'share_facebook'){    
        echo get_ShareCount_meta($id,'korea-sns-facebook');    // $id or get_the_ID()   
    }  
    if($column_name === 'share_kakaostory'){    
        echo get_ShareCount_meta($id,'korea-sns-kakaostory'); 
    }
    if($column_name === 'share_kakaotalk'){    
        echo get_ShareCount_meta($id,'korea-sns-kakaotalk'); 
    }
    if($column_name === 'share_naverline'){    
        echo get_ShareCount_meta($id,'korea-sns-naverline'); 
    }
    if($column_name === 'share_naverband'){    
        echo get_ShareCount_meta($id,'korea-sns-naverband'); 
    }
    if($column_name === 'share_naverblog'){    
        echo get_ShareCount_meta($id,'korea-sns-naverblog'); 
    }
}
add_action('manage_posts_custom_column', 'show_share_count',10,2);   
  
// Function:  추가된 컬럼들을 sort 가능한 컬럼으로 등록 
function regist_share_count_columns_sortable( $columns ) {
    $columns['share_facebook'] = 'share_facebook';
    $columns['share_kakaostory'] = 'share_kakaostory';
    $columns['share_kakaotalk'] = 'share_kakaotalk';
    $columns['share_naverline'] = 'share_naverline';
    $columns['share_naverband'] = 'share_naverband';
    $columns['share_naverblog'] = 'share_naverblog';
    return $columns;
}
add_filter( 'manage_edit-post_sortable_columns', 'regist_share_count_columns_sortable' );     // to post list 
add_filter( 'manage_edit-product_sortable_columns', 'regist_share_count_columns_sortable' );  // to product list

// Function: 각 칼럼의 정렬 방법 설명 
function sort_share_count_columns( $vars ) {
    if ( isset( $vars['orderby'] ) && 'share_facebook' == $vars['orderby'] ) {
        $vars = array_merge( $vars, array(
                'meta_key' => 'korea-sns-facebook',   
                'orderby' => 'meta_value_num',  ));
    }
    if ( isset( $vars['orderby'] ) && 'share_kakaostory' == $vars['orderby'] ) {
        $vars = array_merge( $vars, array(
                'meta_key' => 'korea-sns-kakaostory',   
                'orderby' => 'meta_value_num',  ));
    }
    if ( isset( $vars['orderby'] ) && 'share_kakaotalk' == $vars['orderby'] ) {
        $vars = array_merge( $vars, array(
                'meta_key' => 'korea-sns-kakaotalk',   
                'orderby' => 'meta_value_num',  ));
    }
    if ( isset( $vars['orderby'] ) && 'share_naverline' == $vars['orderby'] ) {
        $vars = array_merge( $vars, array(
                'meta_key' => 'korea-sns-naverline',   
                'orderby' => 'meta_value_num',  ));
    }
    if ( isset( $vars['orderby'] ) && 'share_naverband' == $vars['orderby'] ) {
        $vars = array_merge( $vars, array(
                'meta_key' => 'korea-sns-naverband',   
                'orderby' => 'meta_value_num',  ));
    }
    if ( isset( $vars['orderby'] ) && 'share_naverblog' == $vars['orderby'] ) {
        $vars = array_merge( $vars, array(
                'meta_key' => 'korea-sns-naverblog',   
                'orderby' => 'meta_value_num',  ));
    }
    return $vars;
}
add_filter( 'request', 'sort_share_count_columns' );

 

– track.js  파일 내용 (위 파일과 같은 폴더 내에 있으면 작동)

jQuery( document ).on( 'click', '.korea-sns-button', function() {   
    var snsClass =  jQuery(this).attr("class").split(' ').pop();   // get element's last class, 어느 버튼인지 체크 위해  
//  console.log(snsClass);

    var post_id = shareinfo.post_ID;  
    
    jQuery.ajax({
        url : shareinfo.ajax_url,    
        type : 'post',
        data : {
            action : 'post_share_count',
            post_id : post_id, 
            meta_key : snsClass     
        },
        success : function( response ) {
        //  jQuery('#sns-count').html( response );
        //  console.log(response);
        }
    });

    return false;
})

 

플러그인을 활성 화 후 몇차례 공유 테스트를 해 보면, 어드민에 버튼 클릭된 횟수들이 확인 가능하고 각 SNS별로 많이 공유된 post들을 정렬시킬 수 있습니다.

끝.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Fill out this field
Fill out this field
유효한 이메일 주소를 입력해주세요.
You need to agree with the terms to proceed

다음
카테고리별 리스트 목록 디자인을 다르게 꾸미기
이전
슬라이더 레볼루션 에니메이션 만들기