Views counter για Posts και Pages με λίγες γραμμές κώδικα
Δημοσιεύθηκε 05/03/2021
Το WordPress δεν έχει από μόνο του views counter, δηλαδή μετρητή για τις επισκέψεις ενός άρθρου ή μιας σελίδας. Αυτό βέβαια μας το προσφέρει το Google Analytics που έχουν οι περισσότερες ιστοσελίδες στις μέρες μας.
Τί γίνεται όμως αν θέλουμε να καταγράφουμε τις επισκέψεις των σελίδων μας αν δεν έχουμε Google Analytics, ή αν για διάφορους λόγους επιθυμούμε να αυξάνεται το πλήθος των επισκέψεων και με το απλό reload της σελίδας; Δηλαδή, κάθε φορά που κάποιος επισκέπτεται το άρθρο ανεξάρτητα αν έκανε reload ή είναι ο ίδιος χρήστης που ξαναμπήκε πριν λίγο, εμείς θα καταγράφουμε +1 στο πλήθος των επισκέψεων.
Φυσικά, υπάρχουν πολλά plugins που μας το δίνουν αυτό, αλλά επειδή δεν είμαι και μεγάλος υποστηρικτής στη χρήση των plugins, ειδικά όταν θέλουμε να φτιάξουμε κάτι τόσο μικρό και εύκολο για το site μας, γράφω αυτό το άρθρο.
Views counter χωρίς τη χρήση plugin
Η όλη υλοποίηση θα γίνει με την χρήση των post meta του WordPress.
Αρχικά προσθέτουμε τον παρακάτω κώδικα στο functions.php του theme μας.
Περιλαμβάνει τις παρακάτω συναρτήσεις:
- neobabis_set_views_counter: αυξάνει κατά 1 τα views του άρθρου/σελίδας
- neobabis_get_views_counter: επιστρέφει το πλήθος των θεάσεων
- neobabis_views_counter_columns + neobabis_views_counter_custom_column: οι συναρτήσεις που μας επιτρέπουν να δούμε τα views από το dashboard του WordPress
Εννοείται πως το πρόθεμα “neobabis” μπορούμε να το αλλάξουμε σύμφωνα με το δικό μας theme.
function neobabis_set_views_counter()
{
$key = 'views_counter';
$id = get_the_ID();
$counter = (int) get_post_meta($id, $key, true);
$counter++;
update_post_meta($id, $key, $counter);
}
function neobabis_get_views_counter()
{
$counter = get_post_meta(get_the_ID(), 'views_counter', true);
return "$counter views";
}
function neobabis_views_counter_columns($columns)
{
$columns['views'] = 'Views';
return $columns;
}
function neobabis_views_counter_custom_column($column)
{
if ($column === 'views') {
echo neobabis_get_views_counter();
}
}
// WordPress Filters and actions
// Posts
add_filter('manage_posts_columns', 'neobabis_views_counter_columns');
add_action('manage_posts_custom_column', 'neobabis_views_counter_custom_column');
// Pages
add_filter('manage_pages_columns', 'neobabis_views_counter_columns');
add_action('manage_pages_custom_column', 'neobabis_views_counter_custom_column');
Το μόνο που μένει πλέον είναι να χρησιμοποιήσουμε τις set και get συναρτήσεις όπου το χρειαζόμαστε.
Μέσα στο while loop του single.php (για να μετράει τα άρθρα) ή στα page.php (για να μετράει τις σελίδες) κτλ, για να καταγράφει +1 view, προσθέτουμε την εντολή:
<?php neobabis_set_views_counter(); ?>
Διαφορετικά αν δεν θέλω να μετριούνται οι επισκέψεις των διαχειριστών και λοιπών συνδεδεμένων χρηστών στην ιστοσελίδα, γράφω:
<?php if(!is_user_logged_in()) { neobabis_set_views_counter(); } ?>
Και αν θέλω να εμφανίσω τα αποτελέσματα των views και στους επισκέπτες της ιστοσελίδας, γράφω όπου θέλω να φαίνεται, την εντολή:
<?php neobabis_get_views_counter(); ?>
Τα args για ένα WP_Query που θα μας εμφανίζει κατά φθίνουσα σειρά τα δημοφιλέστερα άρθρα:
$args = array(
//'post_type' => 'post',
//'posts_per_page' => -1,
'post_status' => 'publish',
'meta_key' => 'views_counter',
'orderby' => 'meta_value_num'
);
Ο παραπάνω κώδικας υπάρχει και στον Github λογαριασμό μου ως plugin, αν δεν θέλεις να προσθέσεις τον κώδικα στο functions.php.