web-dev-qa-db-fra.com

ajouter le message le plus consulté par google analytic in loop

J'essaie de trouver une solution pour afficher les 5 publications les plus consultées (à partir de Google Analytics) dans ma boucle.

Le seul moyen que je trouve pour le moment est d'utiliser ce plugin "Widget du contenu supérieur de Google Analytics".

Cependant, je ne veux pas l'utiliser et je souhaiterai pouvoir l'ajouter à ma boucle car j'ai une mise en page vraiment spécifique pour cela, que ce plugin ne peut pas faire ...

Toute aide sera incroyable,

merci les gars !

1
tibewww

Si vous avez le plugin Analytics de Yoast, ce ne serait pas très difficile. Cependant, cela nécessitera des connaissances en codage. Je ne vous expliquerai pas tout, mais je vous orienterai dans la bonne direction. Sans Yoast, vous devrez examiner beaucoup de documentation

  1. Charger Yoast GA ID de fichiers/classes et d'analyse à partir de Yoast (ou utiliser l'API client Google elle-même)
  2. Demandez les pages les plus consultées à Google Analytics et obtenez les ID de publication .
  3. Obtenir les messages et la boucle

J'ai créé un exemple ici. N'hésitez pas à la lancer dans une fonction et à l'essayer telle quelle, bien qu'elle n'ait pas été testée et puisse ne pas fonctionner correctement. Cela a une option de taux de rafraîchissement (en minutes) et une option pour masquer votre page d'accueil (qui est généralement la page la plus consultée, après tout)

J'ai beaucoup volé du plugin GA Top Content.

function jr_get_ga_top_posts() {
    $expires = 5; // minutes
    $showhome = false; // if you want to hide the homepage, set true

    if ( false === ( $post_ids = get_transient('jr_ga_top_posts') ) ) {

        // check for Yoast and include files
        if ( ! class_exists( 'Yoast_Google_Analytics' ) ) {
            return;
        }

        if ( ! is_admin() ) {
            $path = dirname( GAWP_FILE );
            $files_to_include = array(
                'Yoast_Google_CacheParser'      => '/vendor/yoast/api-libs/google/io/Google_CacheParser.php',
                'Yoast_Google_Utils'            => '/vendor/yoast/api-libs/google/service/Google_Utils.php',
                'Yoast_Google_HttpRequest'      => '/vendor/yoast/api-libs/google/io/Google_HttpRequest.php',
                'Yoast_Google_IO'               => '/vendor/yoast/api-libs/google/io/Google_IO.php',
                'Yoast_Google_WPIO'             => '/vendor/yoast/api-libs/google/io/Google_WPIO.php',
                'Yoast_Google_Auth'             => '/vendor/yoast/api-libs/google/auth/Google_Auth.php',
                'Yoast_Google_OAuth2'           => '/vendor/yoast/api-libs/google/auth/Google_OAuth2.php',
                'Yoast_Google_Cache'            => '/vendor/yoast/api-libs/google/cache/Google_Cache.php',
                'Yoast_Google_WPCache'          => '/vendor/yoast/api-libs/google/cache/Google_WPCache.php',
                'Yoast_Google_Client'           => '/vendor/yoast/api-libs/google/Google_Client.php',
                'Yoast_Google_Analytics_Client' => '/vendor/yoast/api-libs/googleanalytics/class-google-analytics-client.php',
            );

            if ( version_compare( GAWP_VERSION, '5.4.3' ) >= 0 ) {
                unset( $files_to_include['Yoast_Google_Analytics_Client'] );
                $files_to_include['Yoast_Api_Google_Client'] = '/vendor/yoast/api-libs/class-api-google-client.php';
            }

            foreach ( $files_to_include as $class => $file ) {
                require_once $path . $file;
            }
        }

        $options = Yoast_GA_Options::instance()->options;
        $ga_id = isset( $options['analytics_profile'] ) ? $options['analytics_profile'] : '';

        // this might be the end
        if ( empty( $ga_id ) )
            return;

        $params = array(
            'ids'         => 'ga:'. $ga_id,
            'dimensions'  => 'ga:pageTitle,ga:pagePath',
            'metrics'     => 'ga:pageViews',
            'sort'        => '-ga:pageviews',
            'filters'     => urlencode( 'ga:pagePath=~' . $link_uri . '.*' ),
            'max-results' => 100,
        );

        $response = Yoast_Google_Analytics::get_instance()->do_request( add_query_arg( $params, 'https://www.googleapis.com/analytics/v3/data/ga' ) );

        $pages = isset( $response['response']['code'] ) && 200 == $response['response']['code']
            ? wp_remote_retrieve_body( $response )
            : array();

        $counter = 1;
        $maxpost = 5;
        $post_ids = array();

        foreach ( $pages as $page ) {
            // stop when reaching 5
            if ( $counter > $maxpost )
                break;

            $url = $page['path'];

            // Url is index and we don't want the homepage, skip
            if ( $url == '/' && ! $showhome ) {
                continue;
            }

            // We need to check if there are duplicates
            $default_permalink = strpos( $url, '?p=' );
            $query_var = strpos( $url, '?' );
            $and_var = strpos( $url, '&' );

            // Strip the query var off the url (if not using default permalinks)
            $url = ( false !== $query_var && false === $default_permalink )
                ? substr( $url, 0, $query_var )
                : $url;

            $and_var = strpos( $url, '&' );

            // strip extra args from ?p=id
            if ( $default_permalink && false !== $and_var ) {
                $url = substr( $url, 0, $and_var );
            }

            $post_id = url_to_postid( $url );

            if ( empty( $post_id ) || in_array( $post_id, $post_ids ) )
                continue;

            $post_ids[] = $post_id;
            $counter++;
        }

        set_transient('jr_ga_top_posts', $post_ids, $expires * MINUTE_IN_SECONDS );
    }

    // we can't go any further
    if ( empty( $post_ids ) )
        return;

    $query = new WP_Query( array(
        'post__in' => $post_ids,
    ) );

    return $query;
}

$top_posts = jr_get_ga_top_posts();

if ( ! empty( $top_posts ) {
    while( $top_posts->have_posts() ) : $top_posts->the_post();
        // loop...
    endwhile;
}
1
johnrom