it-swarm.com.de

Zählen und Anzeigen von Klicks auf externe Links in einer einzelnen Seite/einem einzelnen Beitrag

Ich habe das folgende Szenario Ich habe einen Beitrag, der eine Tabelle per Shortcode aufruft. Die Tabelle enthält Links zu externen Hosts (MediaFire, Dropbox..etc). Ich möchte nachverfolgen, wie oft auf alle Links dieses bestimmten Beitrags geklickt wird, und diese Anzahl anzeigen in der Post selbst.

Ist es möglich?

3
Ibrahim Hassan

Ja, es ist möglich. Sie können dies mit einem Ajax-Aufruf tun, der das Post-Meta-Feld aktualisiert, bevor dem Link gefolgt wird.

Im Beispiel habe ich Benutzer mit und ohne Administratorrechte verwendet, die auf den Link klicken und link_check_click_counter im Post-Meta automatisch erhöhen. Ich habe hier das Beispiel verwendet, um die Daten mit wp_footer anzuzeigen. Sie können auch wp_head anstelle von wp_footer verwenden. Kopieren Sie den Code, fügen Sie ihn in die Datei functions.php ein. Wenn Sie auf link link_check_click_counter geklickt haben, wird Meta für diesen Beitrag erstellt und Sie können nachverfolgen, wie oft auf den Link geklickt wurde.

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
    }
}
?>

Linkanzahl eines Beitrags

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

Summe aller Zählimpulse aus allen Beiträgen

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

// füge dies in functions.php hinzu

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