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들을 정렬시킬 수 있습니다.
끝.