¿Está buscando una forma de rastrear las vistas de las publicaciones sin un plugin utilizando metadatos de publicación? Si bien probablemente exista un plugin para esto, hemos creado un fragmento de código rápido que puede usar para rastrear las vistas de las publicaciones sin un plugin utilizando metadatos de publicación en WordPress.
Instrucciones:
Agrega este código al archivo functions.php de tu tema o a un plugin específico del sitio:
function getPostViews($postID){
$count_key = 'post_views_count';
$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 View";
}
return $count.' Views';
}
function setPostViews($postID) {
$count_key = 'post_views_count';
$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);
}
}
// Remove issues with prefetching adding extra views
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);
Opcionalmente, agregue este código también a una columna en el administrador de WordPress que muestre las vistas de las publicaciones:
// Add to a column in WP-Admin
add_filter('manage_posts_columns', 'posts_column_views');
add_action('manage_posts_custom_column', 'posts_custom_column_views',5,2);
function posts_column_views($defaults){
$defaults['post_views'] = __('Views');
return $defaults;
}
function posts_custom_column_views($column_name, $id){
if($column_name === 'post_views'){
echo getPostViews(get_the_ID());
}
}
Esta parte del código de rastreo de vistas establecerá las vistas de las publicaciones. Simplemente coloque este código a continuación dentro del archivo single.php dentro del Bucle de WordPress.
<?php
setPostViews(get_the_ID());
?>
Nota sobre el almacenamiento en caché de fragmentos: Si está utilizando un plugin de almacenamiento en caché como W3 Total Cache, el método anterior para establecer vistas no funcionará, ya que la función setPostViews() nunca se ejecutaría. Sin embargo, W3 Total Cache tiene una función llamada almacenamiento en caché de fragmentos. En lugar de lo anterior, use lo siguiente para que setPostViews() se ejecute correctamente y rastree todas las vistas de sus publicaciones incluso cuando tenga el almacenamiento en caché habilitado.
<!-- mfunc setPostViews(get_the_ID()); --><!-- /mfunc -->
El código a continuación es opcional. Use este código si desea mostrar el número de vistas dentro de sus publicaciones. Coloque este código dentro del Bucle.
<?php
echo getPostViews(get_the_ID());
?>
Nota: Si es la primera vez que agregas fragmentos de código en WordPress, consulta nuestra guía sobre cómo copiar / pegar fragmentos de código correctamente en WordPress, para que no rompas accidentalmente tu sitio.
Si te gustó este fragmento de código, considera revisar nuestros otros artículos en el sitio como: Los 10 mejores plugins de testimonios para WordPress y cómo configurar el seguimiento de autores en WordPress con Google Analytics.
Ups, lo siento, por favor ignora mi comentario anterior. Me di cuenta de que estaba llamando a la función setPostViews varias veces. Mi error…
Después de arreglar esto, solo veo que el contador de vistas aumenta en +2 cada vez que actualizo la publicación individual del blog.
¿Alguien tiene una solución para esto? No me imagino que esto sea un gran problema considerando que la mayoría de los usuarios no actualizarán la página, aunque sería bueno tener un número de conteo real para mostrar.
Gracias por el código 🙂
Cómo hacer un conteo de vistas aleatorio entre (600,900)
por favor ayuda..
¿cómo detengo el aumento automático del conteo al actualizar la página?
Hola, muy buenos consejos. Gracias por compartir con nosotros. Estoy usando un plugin y Google Analytics para rastrear las vistas de mi página.
Hola,
Quiero mostrar el conteo dentro de la clase meta, mi código meta es:
¿cómo imprimir el contador entre los meta como autor, fecha, categorías?
Hola,
¿Sabes cuál es el nombre del campo estándar de PHP/wp para las vistas de publicaciones? Solo quiero mostrar eso, simple.
Gracias.
Gerente de Riesgos
lo intento pero no me funciona.
Si solo necesito 5, ¿tendría que cambiar?
¿Dónde aparecerán las vistas de las publicaciones?
En la ubicación donde coloques el código dentro de tu plantilla del paso 2.
echo getPostViews(get_the_ID());puedes colocar esto dentro de algún html y estilizarlo si lo deseas. Pero los datos se guardan en la meta del post, deberías poder verlo cuando editas una publicación dentro de la sección de campos personalizados.w3t cache hace que el caché de fragmentos esté disponible solo en la versión pro $$$
Buenas tardes,
El fragmento funciona muy bien, pero necesito restablecer el valor.
¿Podría alguien ayudarme, por favor?
Intento esto pero no funciona – UPDATE wp_postmeta SET meta_value = ‘0’ WHERE wp_postmeta.meta_key =’post_views_count’
Gracias
puedes restablecer yendo a la base de datos de tu sitio web, busca postmeta, haz clic en ella y busca post_view_count y elimina todas
Lo siento, pero no encuentro este campo en mi base de datos, por favor explica cómo restablecer los contadores a 0. Gracias
Los metadatos de la publicación se encuentran en la tabla wp_postmeta. Si ninguna de las filas en la columna meta_key tiene post_views_count como valor, entonces es posible que el conteo aún no se haya almacenado en la base de datos.
Hola chicos, si alguien busca contar visitas por dirección IP, para contar solo una visita por cada visitante, este es el código correcto para hacerlo, espero que les funcione bien, estas son mis modificaciones en la función “setPostViews”:
function setPostViews($postID) { session_start(); $count_key = ‘post_views_count’; $count = get_post_meta($postID, $count_key, true); if($count==”){ // Si no hay conteo, inicializarlo $count = 0; delete_post_meta($postID, $count_key); add_post_meta($postID, $count_key, ‘0’); }else{ // Si ya hay conteo if(!isset($_SESSION[‘post_views_count-‘. $postID])){ // Si la sesión no ha registrado esta vista $_SESSION[‘post_views_count-‘. $postID]=”si”; // Marcar como vista $count++; // Incrementar el contador update_post_meta($postID, $count_key, $count); // Actualizar el contador en la base de datos } } }
¡Simplemente reemplaza esta función por la antigua y listo!
no funciona
Muchas gracias. El código me funciona :)
Hola Lo estoy usando y es genial, pero tengo un problema molesto Lo cuenta dos veces en el tipo de publicación personalizado.
¿No sabes qué hacer para arreglarlo? ¿Alguna ayuda?
¿Colocaste la función setPostViews() dentro de la plantilla single.php u otra plantilla?
¡Tengo exactamente el mismo problema! Sí, lo coloqué solo en el archivo single.php... uso este plugin icm wp car manager... También cuenta de 2 en 2, 4 en 4, 6 en 6 por cada visita.
Este es un fragmento útil. ¡Gracias por compartir!
Modifiqué la función y le agregué para que comprobace si había una sesión activa de la visita del póst y pues.. aca está;
function wpb_set_post_views($postID) { session_start(); $count_key = ”post_views_count’; $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{ if(!isset($_SESSION[”post_views_count-‘. $postID])){ $_SESSION[”post_views_count-‘. $postID]=”si”;
$count++; update_post_meta($postID, $count_key, $count); } } }
¿y para qué serviría eso? ¿algo en especial?
Estoy recibiendo el doble de conteo por cada vista. Cuando se ve la publicación, suma dos vistas en lugar de una.
Tengo el mismo problema. ¿Alguien tiene alguna idea de cuál es el problema?
¿En qué archivo de plantilla estás colocando la función setPostViews()?
single.php He intentado poner setPostViews() tanto dentro como fuera del bucle, pero no he podido solucionar el problema.
También tengo el mismo problema…
Esto funciona llamando a la función set views que agrega metadatos a la publicación, por lo que a menos que se llame dos veces, solo obtendrías 1 vista. Te recomiendo revisar tu tema para asegurarte de que no haya bucles múltiples o algo similar involucrado. Sin embargo, a menos que pudiera ver el single.php de tu tema, no podría estar seguro de cuál es el problema exacto.
Yo también tengo el mismo problema. En el single.php, ya sea dentro o fuera del bucle, cuenta 2 cada vez que actualizo la página…
Este es también mi tema personal…
Sin embargo, noté que creé una plantilla de tema de publicación personalizada, la mantengo fuera del bucle justo debajo de la etiqueta body, y solo cuenta una vez cuando actualizo la página…
También acabo de intentar colocarla en el encabezado de header.php y solo cuenta una vez allí también… La única vez que esto no funciona bien es cuando estoy viendo la página domain.com/blog y la actualizo desde allí, la primera publicación en la lista del blog cuenta una vez.
Bueno, puedo lidiar con eso… gracias de nuevo por el código…
Es posible que quieras verificar si setPostViews(); se está llamando dos veces, por ejemplo, si el tema está llamando al código de la plantilla dos veces.
No puedo hacer que esto funcione con W3 Total Cache. ¿Hay alguna manera de que funcione con él o es absolutamente imposible?
¿Alguien más tiene problemas para que el contador funcione? Estoy usando WordPress 4.2 y tengo W3 Total Cache instalado. El conteo permanece en 0 sin importar qué (usuario conectado, usuario desconectado, actualización de página, caché limpiada).
Solo estoy buscando que el conteo funcione a través del backend. Cualquier idea sería muy apreciada.
¡yo también!
¿Lo resolviste? Creo que puedo ayudarte.
fantástico, ¿cómo hago para que cuente las vistas de publicaciones solo de hoy?
gracias
Funciona muy bien en single.php, pero ¿qué hay de category.php? Si actualizas la página, todas las publicaciones añaden una vista, debería recuperar el número real de las vistas de la publicación.
¿Has descubierto esto todavía? Estoy usando WP 5.2.2 y obtengo un recuento de +2 al actualizar... Aparte de eso, parece que está funcionando....
funciona genial, exactamente lo que quería. gracias por compartir, hermano.
¡Hola!
Antes que nada, gracias por este script, fue muy útil.
Tengo una pregunta, tengo este fragmento en un tema personalizado que estoy desarrollando para rediseñar/recodificar mi portafolio y descubrí que en las publicaciones personalizadas se muestra el contador, pero cuando estoy en wp-admin no muestra el número de visitas como lo hace en las publicaciones regulares.
¿Tienes alguna idea de cómo solucionar esto?
Gracias.
¡¡Genial!! ¡¡Gracias por el script!! ¡¡Muy bueno!!
esto solo cuenta mis visitas, ¿cómo hago para que cuente las visitas de todos?
Mirando el código en la publicación, definitivamente debería estar rastreando las visitas de cada visitante.
O no tienes absolutamente ningún visitante (esto parece poco probable), o pusiste la llamada a la función setPostViews() dentro de un bloque condicional que solo se activa si el usuario está conectado o es un administrador de página.
Gracias por el script. ¿Hay alguna forma de mostrar, por ejemplo, las 5 publicaciones más vistas?
Finalmente algo simple y funciona muy bien, gracias