WordPress

Licz i pokazuj kliknięcia linków zewnętrznych na jednej stronie/poście

  • 5 marca, 2017
  • 3 min read
Licz i pokazuj kliknięcia linków zewnętrznych na jednej stronie/poście


Tak to mozliwe. Możesz to zrobić za pomocą wywołania ajax, które aktualizuje pole meta postu przed kliknięciem łącza.

W przykładzie użyłem administratorów i użytkowników niebędących administratorami, którzy kliknęli link i automatycznie zwiększyli link_check_click_counter w meta posta. Użyłem tutaj przykładu, aby pokazać dane za pomocą wp_footer. Możesz także użyć wp_head zamiast wp_footer. Skopiuj i wklej kod i dodaj go do functions.php. Po kliknięciu linku link_check_click_counter meta utworzy dla tego posta i możesz śledzić, ile kliknięć linku.

HTML

<div id="link_count">
  <a href="
  <a href="
  <a href="
  <a href="
</div>

PHP

<?php
/* functions.php */
add_action( 'wp_ajax_link_check_click_counter', 'link_check_click_counter');
add_action( 'wp_ajax_nopriv_link_check_click_counter', 'link_check_click_counter' );
function link_check_click_counter() {

    if ( isset( $_POST['nonce'] ) &&  isset( $_POST['post_id'] ) && wp_verify_nonce( $_POST['nonce'], 'link_check_click_counter_' . $_POST['post_id'] ) ) {
        $count = get_post_meta( $_POST['post_id'], 'link_check_click_counter', true );
        update_post_meta( $_POST['post_id'], 'link_check_click_counter', ( $count === '' ? 1 : $count + 1 ) );
    }
    exit();
}


add_action( 'wp_footer', 'link_click' );
//add_action( 'wp_head', 'link_click' );
function link_click() {
    global $post;

    if( isset( $post->ID ) ) {
?>
    <script type="text/javascript" >
    jQuery(function ($) {
        var ajax_options = {
            action: 'link_check_click_counter',
            nonce: '<?php echo wp_create_nonce( 'link_check_click_counter_' . $post->ID ); ?>',
            ajaxurl: '<?php echo admin_url( 'admin-ajax.php' ); ?>',
            post_id: '<?php echo $post->ID; ?>'
        };

        $( '#link_count a' ).on( 'click', function() {
            var href = $( this ).attr( "href" );
            var redirectWindow = window.open(href, '_blank');   
            $.post( ajax_options.ajaxurl, ajax_options, function() {
                redirectWindow.location;
            });
            return false;
        });
    });
    </script>
<?php
    }
}
?>

Liczba linków w poście

global $post;
print get_post_meta($post->ID,'link_check_click_counter',true);

Zsumuj wszystkie liczby ze wszystkich postów

   $all_link_count = link_check_meta_values( 'link_check_click_counter', 'page' );
    $total = array_sum($all_link_count);
    print $total;

// dodaj to w functions.php

function link_check_meta_values( $key = '', $type="post", $status="publish" ) {

    global $wpdb;

    if( empty( $key ) )
        return;

    $r = $wpdb->get_col( $wpdb->prepare( "
        SELECT pm.meta_value FROM {$wpdb->postmeta} pm
        LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
        WHERE pm.meta_key = '%s'
        AND p.post_status="%s"
        AND p.post_type="%s"
    ", $key, $status, $type ) );

    return $r;
}


Źródło

Warto przeczytać!  Jak przesłać dane za pomocą formularza kontaktowego 7 przez WP Rest API (React)