web-dev-qa-db-fra.com

Compter et afficher les clics sur les liens externes dans une seule page/publication

J'ai le scénario suivant J'ai une publication qui appelle une table par code court. La table contient des liens vers des hôtes extérieurs (MediaFire, Dropbox, etc.). Je souhaite suivre le nombre de clics sur tous les liens de cette publication spécifique et indiquer leur nombre. dans le post lui-même.

C'est possible?

3
Ibrahim Hassan

Oui c'est possible. Vous pouvez le faire avec un appel ajax qui met à jour le champ meta avant que le lien ne soit suivi.

Dans l'exemple, j'ai utilisé des utilisateurs admin et non-admin qui cliquent sur le lien et augmentent automatiquement link_check_click_counter dans le méta-post. J'ai utilisé ici l'exemple pour montrer les données en utilisant wp_footer. Vous pouvez également utiliser wp_head au lieu de wp_footer. Copiez et collez le code et ajoutez-le à functions.php. Lorsque vous avez cliqué sur le lien link_check_click_counter, une méta est créée pour ce message et vous pouvez suivre le nombre de clics sur le lien.

HTML

<div id="link_count">
  <a href="https://www.dropbox.com/">Dropbox</a>
  <a href="https://www.mediafire.com/">Mediafire</a>
  <a href="http://google.com">google.com</a>
  <a href="http://www.linkedin.com/in/turjo">Linkadin</a>
</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
    }
}
?>

Nombre de liens d'un post

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

Somme tous les comptes de tous les messages

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

// ajoute ceci dans 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;
}
2
Faysal Mahamud