web-dev-qa-db-fra.com

comment créer des statistiques (personnalisées) pour les vues de publication, par mois

Est-ce que quelqu'un sait comment je pourrais coder quelque chose pour obtenir les publications les plus vues par mois (sans Jetpack), idéalement sans avoir à créer une nouvelle table DB?

Peut-être existe-t-il un moyen intelligent d'y parvenir uniquement en utilisant des métas post et/ou des transitoires.

Pour le moment, je stocke un tableau d'entrées statistiques en tant que méta post, contenant un horodatage. Chaque fois que la méta est mise à jour, je supprime les horodatages <1 mois. Cela fonctionne, mais je ne suis pas sûr que ce soit une bonne solution.

Des idées ?

Merci

1
gordie

Je pense que je construirais cela sur un plugin déjà existant qui fait le compte pour moi. J'ai fait une assez bonne expérience avec Post Views Counter car il vous permet également de l'utiliser dans WP_Query. Mais WP-PostViews semble également prometteur. Choisissez-en un.

Ensuite, j'interrogerais les publications par nombre de vues à partir d'un événement cron WordPress qui s'exécute mensuellement. Et je voudrais simplement enregistrer/ajouter les résultats dans une option d'API Options sous forme de tableau comme $data[INTEGER_YEAR][INTEGER_MONTH][INTEGER_POST_ID][INTEGER_VIEW_COUNT]. Et retirez cela chaque fois que j'en ai besoin pour afficher le meilleur score dans un widget ou n'importe où.

1
leymannx

Vous pouvez suivre les vues des publications avec ces fonctions. Créez un nouveau fichier et appelez-le dans votre functions.php

après avoir collecté suffisamment de données, vous pouvez créer une méta-boîte pour Dashboard et vous pouvez utiliser un module de graphique pour afficher les vues de publication mensuellement/annuellement, etc.

add_action( 'wp_head', 'get_post_id' );
function get_post_id() {
    $postID = get_the_ID();
    return $postID;
}

function getPostViews() {
    $postID    = get_post_id();
    $count_key = 'views';
    $count     = get_post_meta( $postID, $count_key, true );
    if ( $count == '' ) {
        delete_post_meta( $postID, $count_key );
        add_post_meta( $postID, $count_key, '0' );
        return __( '0', 'sagive' );
    }
    return number_format( $count, '0', ',', '.' ) . __( '', 'sagive' );
}


remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );
add_action( 'wp_head', 'setPostViews' );
function setPostViews() {
    if ( ! is_home() && ! is_robots() && ! is_user_logged_in() ) {
        $postID    = get_post_id();
        $count_key = 'views';
        $count     = get_post_meta( $postID, $count_key, true );
        if ( $count == '' ) {
            $count = 0;
            delete_post_meta( $postID, $count_key );
            add_post_meta( $postID, $count_key, '0' );
        } else {
            $count++;
            update_post_meta( $postID, $count_key, $count );
        }
    }
}
1
Serkan Algur