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 !
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
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;
}