¿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.
¿Alguna idea de cómo usar esto con un tipo de publicación personalizado?
¡Genial! Exactamente lo que estaba buscando.
Genial, me alegra saber que te gusta el fragmento, ¡disfrútalo!
Igualmente, ¿podemos contar el número de imágenes subidas al sitio de WordPress? Estoy seguro de que sí... ¿alguna pista?
¡Disculpa la demora!
http://wpsnipp.com/index.php/functions-php/count-total-number-of-jpg-gif-png-images-in-media-library/
¿Ejemplo de Bob es posible?
Publicaciones más vistas
Título de publicación3 100 vistas
Título de publicación1 50 vistas
Título de publicación2 10 vistas
¿Cuál es el impacto de usar esta función en la base de datos de WordPress? ¿Podré borrar los registros (vistas) en horarios establecidos?
Esto no es un plugin con muchas funciones, simplemente incrementará el contador en el meta de la publicación en uno cada vez que se vea la publicación.
¿Cómo eliminar la palabra “Vistas”?
Hola Joj,
Verás en la línea 09 return $count.’ Views’;
reemplaza esa línea con la siguiente y eso es todo.
return $count;
Gracias por el fragmento. Modifiqué ligeramente setPostViews() para descontar las vistas de las publicaciones de Editores o superiores:
function setPostViews($postID) { if (!current_user_can('level_7') ) { $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); } } }Gracias Drew, muy bueno.
No me funciona en localhost. No estoy seguro por qué, pero cada vista, independientemente de si es de nivel Editor o superior, se cuenta.
Por otro lado, ¿cómo deshabilitarías el conteo de vistas por parte del autor de la publicación?
¡Uy! No había iniciado sesión como administrador durante las pruebas. (facepalm)
Me alegra saber que lograste que funcionara.
¡Hola Kevin!
Probé este código en una instalación nueva de WP 3.2 y funciona muy bien. Sin embargo, noté que aunque solo debería incrementar el conteo en 1, el mío lo hace en 4. ¿Alguna sugerencia sobre qué podría estar mal?
Puse las funciones en el lugar correcto y el único cambio que hice fue excluir los conteos de los visitantes conectados. Incluso sin este cambio, el código da 4 vistas en lugar de 1.
Huh, solo debería contar por uno, ya que es solo count++. ¿Tuviste alguna otra persona visitando tu sitio mientras se ejecutaba o tenías varias pestañas abiertas?
Está en mi localhost. Es realmente extraño, pero podría ser solo una cosa del navegador. ¡Gracias por un pequeño fragmento útil de todos modos!
Kevin,
Primero que nada, ¡me encanta la simplicidad de esta solución! Tengo el código funcionando correctamente en mi servidor local, pero noté que cuando recargo mi página de inicio (que contiene mis 5 entradas más recientes), cada recarga de mi página de inicio agrega una vista al contador de cada una de las 5 publicaciones. ¿Hay alguna manera de evitar eso y contar solo las visitas reales a la página del artículo? ¡Gracias!
Hola Rgsanchezz, me alegra saber que te gusta el fragmento. Con respecto a tu pregunta, asegúrate de colocar setPostViews(get_the_ID()); dentro de la plantilla single.php o dentro de if(is_singular()) también debería funcionar si no usas una plantilla single.php, eso debería resolver el problema.
¿Usaste este fragmento en un bucle separado? Si es así, deberías colocar setPostViews(get_the_ID()); fuera del bucle de "más vistos" para que cuente el +1 solo para la publicación que se muestra actualmente y no para todos en la lista. Por ejemplo:
INCORRECTO:
( ) CORRECTO: ( )
Lo siento, copié y pegué el código en el cuadro de respuesta. Lo acorté a través de codepad, échale un vistazo allí : )
http://codepad.org/QOUWc3XB
Es solo una falsificación, nada más, amigo. Si lo estás revisando en Firefox, se mostrará, pero si revisaste tu URL en Chrome e IE, no se muestra allí. Cuando revisas en Firefox, solo se mostrarán tus vistas, nada más... y si crees que es mi problema, solo dímelo.
Hola Sunnysuffy, bueno, el fragmento no es falso, sin embargo, si tienes software de caché ejecutándose en tu copia de WordPress, tendría problemas para funcionar. Supercache, etc.
[…] un buen ejemplo del tipo de consejos que encontrarás en wpsnipp.com es “Rastrear vistas de publicaciones sin un plugin usando meta de publicación”. Kevin comienza describiendo lo que hará el fragmento y luego te da un […]
oye, está genial..
muchas gracias.
Genial, me alegra que te guste el fragmento.
¡Increíble, gracias!
De nada @4f9649a2dc0c5d186623a62544564bfe:disqus, ¡me alegra que te guste el fragmento!
No hace falta decir que este es un fragmento impresionante. Pero si hay una solución para que funcione con plugins de caché, por ejemplo con W3TC, sería aún mejor.
De todos modos, ¡buen trabajo!
No lo he investigado, le echaré un vistazo más de cerca a algunos de los plugins y veré qué puedo hacer. Me alegra que te guste el fragmento de todos modos.
Hola Kevin, he estado navegando por foros para encontrar una solución. Aparentemente, muchas personas tienen problemas para excluir funciones del almacenamiento en caché. Desafortunadamente, parece que no hay cura hasta ahora. Estoy seguro de que la hay. Esperemos que uno de nosotros encuentre algo pronto 🙂
hola, según entiendo W3TC tiene una opción de “Ignored query stems” para filtrar algunas funciones de la caché.
hola, buena información, ¿es posible usar echo getPostViews(get_the_ID()); en la sección de publicaciones del panel de administración si quiero usar las vistas de publicaciones solo para fines personales/administrativos?
Sí, puedes. Publiqué un fragmento no hace mucho por esa misma razón.
http://wpsnipp.com/index.php/functions-php/display-post-views-within-admin-post-columns/
Esto es genial, funciona de maravilla. Lo usaré en un nuevo sitio de fondos de pantalla en el que estoy trabajando. Tomé nota de tu sitio en las funciones para referencia futura.
Me pregunto si se puede hacer algo para registrar solo 1 vista por sesión para cada usuario. Sería genial para evitar vistas "falsas" al actualizar la página. Si alguien puede hacer eso (si es que es posible), sería genial.
Gracias @6c9628c836d0d3ed67e8ef3b43a993dd:disqus ¡Me alegra saber que te gusta el fragmento! Estoy seguro de que algo así podría hacerse, sin embargo, yo usaría esto como un método para rastrear la popularidad de una publicación en lugar de para estadísticas detalladas.
Estoy teniendo un problema con esto, si veo la segunda publicación más reciente, la publicación más reciente obtiene 1 vista añadida, ¿alguna idea de por qué?
La única razón que se me ocurre es que no tienes la función setPostViews(get_the_ID()); dentro de single.php? ¿puedes confirmar que este es el caso…
Sí, está en single.php dentro del bucle
Estoy teniendo el mismo problema después de configurar una lista de las publicaciones más populares en la barra lateral, usando el artículo “las publicaciones más populares usando meta de publicación de vistas”. setPostViews(get_the_ID()); está en single.php. setPostViews(get_the_ID()); está en single.php.
Yo también estoy teniendo un problema aquí. El mío está en single.php, seguí las instrucciones. Sin embargo, noto que si visito una publicación (con un ID de publicación, digamos 20), otra publicación (con un ID de publicación, digamos 22) también recibe +1 en el contador de vistas. Lo raro es que, cuando hago un echo del ID de publicación recibido por la función setPostViews, solo se muestra el ID de publicación 20 en mi pantalla.
Bueno, debería funcionar sin problemas, sin embargo, si editas las publicaciones, puedes ver el campo personalizado agregado con las vistas actuales de la publicación. Yo recargaría la página y vería si el campo personalizado se actualiza en ambas publicaciones. ¿Qué versión de WordPress estás usando actualmente?
Tuve el mismo problema. Me tomó una eternidad resolverlo. El problema es causado por Wordpress cargando enlaces relacionales para las publicaciones anterior y siguiente en el encabezado. Firefox, por defecto, pre-carga los enlaces REL con el valor de Siguiente, por lo que ambas publicaciones están siendo "vistas".
La solución que encontré fue eliminar la acción que agrega esta funcionalidad a la función wp_head: remove_action( ‘wp_head’, ‘adjacent_posts_rel_link_wp_head’, 10, 0);
Chris, gracias por el comentario. Actualicé la publicación para informar a otros sobre esta solución para el problema. También agregué un enlace a tu sitio. Gracias de nuevo,
Hola Wprebel, es posible que tengas un plugin u otra cosa que haya causado un problema con el fragmento. El fragmento es bastante simple y solo actualiza los metadatos de la publicación cuando un usuario carga la publicación, no hay mucho que pueda salir mal. Sin ver tu tema en detalle, solo estaría adivinando.
@e4fcff6cc58dc5e1b2ab556d9cdb2cb2:disqus necesitas usar la función getPostViews() cuando quieras mostrar las vistas de las publicaciones y setPostViews() en single.php.
[…] Rastrea las vistas de las publicaciones sin un plugin usando metadatos de publicación […]
[…] Vía: enlace […]
Esta técnica no funcionará con plugins de caché. Me gustaría usar el plugin WP-PostViews ya que proporciona una mejor compatibilidad con los plugins de caché.
Esto es cierto, no se lleva bien con los plugins de caché. Sin embargo, como un fragmento rápido para rastrear vistas, funciona bastante bien.
Renombraría la clave de metadatos post_views_count a _post_views_count para ocultarla y evitar que los usuarios editen las vistas de las publicaciones desde campos personalizados.
Ahh, buena idea Daniel, podrías hacer eso.
[…] te gustaría mostrar el número de vistas: <?php echo getPostViews(get_the_ID()); ?> Fuente → Rastrear la cantidad de vistas de publicaciones usando metadatos de publicación Este fragmento creará una lista de tus publicaciones más populares […]
¿Hay alguna forma de hacer un resumen de las publicaciones más vistas?
Al igual que las populares en tu barra lateral, pero usando las vistas de las publicaciones en lugar de los comentarios.
Hola Alec,
Terminé una publicación sobre eso ayer y la publicaré en aproximadamente una hora.
¡Primera vez que visito tu sitio y ya eres mi héroe! +1
¿Es posible hacer una lista de las publicaciones más vistas basándose en este código?
No estoy seguro de entender, ¿puedes darme un poco más de detalle?
Ejemplo:
Publicaciones más vistas
Título de publicación3 100 vistas
Título de publicación1 50 vistas
Título de publicación2 10 vistas
Hola Bob,
Sí, había pensado en hacer algo así, jugaré un poco con la idea y publicaré un fragmento.
Acabo de encontrar esta publicación.
http://www.moocr.com/blog/posts/2010/display-posts-views-count-without-plugin-in-wordpress.html
Hice lo que dijo el tipo. No parece funcionar. ¿Funciona en localhost?
Debería funcionar bien en localhost, sin embargo, necesitarías recargar la página para ver las vistas. No olvides colocar setPostViews dentro del bucle en single.php. Lo probé en wpsnipp.com para rastrear vistas y funcionó bien. Lo que hace el fragmento es agregar un número a la meta del post y luego incrementarlo cada vez que se carga single.php. ¿Qué versión de WordPress estás usando?
Gracias. Acabo de descubrir que no lo estaba implementando correctamente.
Genial, me alegra que todo te haya funcionado perfectamente…
¿Tengo que configurarlos manualmente?:/
Sí, tendrías que agregar este código manualmente a tus plantillas de WordPress.
Gran aporte Chad. Gracias 😀