Mostrar todas las publicaciones que comienzan con una letra dada en WordPress

5 oct 2012, 18:54:50
Vistas: 14.6K
Votos: 12

Estoy intentando construir un diccionario basado en Wordpress, básicamente tendrá 26 páginas (una para cada letra):

A B C ... X Y Z

Y cada página mostrará todas las publicaciones que comiencen con la letra dada, así que al abrir la página "A" debería mostrar algo como:

aback

abacus

abalone

(...) azure

Primero pensé en usar tipos de publicación personalizados, pero crear y mantener 26 tipos de publicación personalizados parece excesivo.

¿Cuál sería la forma más eficiente de ordenar publicaciones así? ¿Consulta a la base de datos, dividir el loop con PHP? Apunto a tener miles de publicaciones (sí, tiene que ser Wordpress :)).

0
Todas las respuestas a la pregunta 3
8
10

¡No uses tipos de publicación, usa términos de taxonomía!

Al guardar, establece los términos del objeto en una taxonomía A-Z, usando la primera letra del título de la publicación. Asegúrate de forzar mayúsculas o minúsculas para mantener la consistencia. Asegúrate de crear términos para cada letra del alfabeto, y un término para números y otros símbolos no alfanuméricos.

Esto debería ser más rápido que consultar la primera letra de cada título de publicación, y te da una taxonomía con la que puedes hacer más cosas, como nubes de etiquetas o widgets de listado de términos. ¡También es una forma mucho más rápida de determinar qué letras tienen publicaciones asociadas y cuántas, sin forzar a la base de datos a contar manualmente! Además, puedes usar las APIs estándar de términos de WordPress para hacer consultas más complejas, como publicaciones que empiezan con vocales.

5 oct 2012 19:02:00
Comentarios

Definitivamente, esta es la ruta ideal a tomar. Sin embargo, ten en cuenta que, con miles de publicaciones; esta podría ser una tarea bastante engorrosa. Necesitarías consultar inicialmente todas las publicaciones comenzando con cada letra del alfabeto, y actualizar cada publicación con el término de taxonomía adecuado, que coincida con la respectiva letra del alfabeto. De lo contrario, actualizar manualmente cada publicación individual tomaría siglos en completarse.

Michael Ecklund Michael Ecklund
5 oct 2012 21:20:48

Sí, ese es un ENORME inconveniente, estas publicaciones serán añadidas por personas TOTALMENTE ignorantes y no puedo contar con ellos cuando se trata de configurar la taxonomía correcta al crear una nueva publicación. ¿No estoy seguro si consultar todas las publicaciones y actualizarlas cada vez que alguien edita/crea algo será eficiente?

Wordpressor Wordpressor
5 oct 2012 21:46:58

No, eso no sería un problema en absoluto, oculta la interfaz de usuario y automatiza el proceso hazlo en los hooks de guardar y actualizar publicación, hacerlo manualmente sería absurdamente costoso

Tom J Nowell Tom J Nowell
5 oct 2012 22:05:11

Tom J Nowell, funciona de maravilla, pero tengo un problema serio y no estoy seguro de cómo manejarlo - algunas palabras comienzan con letras como http://en.wikipedia.org/wiki/Ą - no puedo establecer términos para estas. Aquí hay algo de código y explicación: http://pastebin.com/cHxbjVFH, ¿por qué está pasando esto? Estoy usando el paquete de WP dedicado para este idioma.

Wordpressor Wordpressor
10 oct 2012 23:18:02

¿estás hablando de acentos y diéresis, etc? Si es así, eso merece una pregunta completamente nueva por sí sola, y no es una pregunta trivial. Es probable que también sea una pregunta general de PHP, por lo que Stack Overflow sería el mejor lugar para preguntarlo

Tom J Nowell Tom J Nowell
11 oct 2012 01:25:39

Gracias compañero, lo resolví, parece que cuando usas sbustr() estos caracteres se comportan como 2, no como 1, caracteres :) ¡Gracias!

Wordpressor Wordpressor
11 oct 2012 09:30:54

¡Ah, esas son codificaciones multibyte! Encontrarás funciones apropiadas de PHP para esos prefijadas con mb

Tom J Nowell Tom J Nowell
11 oct 2012 12:02:14

Excelente solución para buscar por letra inicial. En lugar de exagerar teniendo todos los caracteres posibles, creo que es más elegante tener A-Z y # donde todo lo demás encaja.

brett brett
27 feb 2020 01:43:19
Mostrar los 3 comentarios restantes
2

Si no deseas utilizar el método preferido de términos de Taxonomía, haz esto:

<ul class="posts">
         <?php 
         global $wpdb; 
         $request = "a" // puede ser cualquier letra que desees
         $results = $wpdb->get_results(
                "
                SELECT * FROM $wpdb->posts
                WHERE post_title LIKE '$request%'
                AND post_type = 'post'
                AND post_status = 'publish'; 
                "
         ); 
         if ( $results ) 
         {
            foreach ( $results as $post ) 
            {
                setup_postdata ( $post ); 
                ?> 
                <li>
                    ... contenido del bucle aquí (the_title, the_permalink) ... 
                </li>
                <?php 
            }
         } 
         else 
         {
            ?> 
            <div class="alert">No se encontraron clubs para esa letra. Por favor, intenta nuevamente o utiliza la búsqueda en la parte superior.</div>
            <?php
         }
         ?>
    </ul>
9 oct 2012 21:26:59
Comentarios

¿puedes explicar cómo funciona esto? ¿no devolvería cualquier publicación que contenga la letra?

Tintinabulator Zea Tintinabulator Zea
18 dic 2018 07:56:29

no lo haría. mysql usa % como comodín. sin embargo, nunca me he encontrado con $ en consultas mysql. correctamente debería decir WHERE post_title LIKE 'request%'

brett brett
27 feb 2020 01:45:12
0

Consulta este artículo aquí: ¿query_post por título?

O puedes crear un ayudante pre-guardado usando el framework PODS 2 y guardar la primera letra del título del post en algún campo y usar una condición WHERE simple.

O crear un dropdown (otro pod/tipo de contenido) con todas las letras y crear una relación con tu tipo de contenido de posts existente (en pods 2 es posible) y listo. Así, antes de guardar el término del diccionario, seleccionas del dropdown la letra que quieres asignar a este término.

En Pods 2 puedes añadir un campo extra a un tipo de contenido de posts existente. Este plugin/framework que es algo como CCK + Views en el mundo Drupal es realmente increíble.

Pods 2 es un plugin muy útil.

5 oct 2012 19:06:54