¿Mostrar todas las publicaciones que comienzan con la letra dada?

12

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

ABC ... XYZ

Y cada página mostrará todas las publicaciones que comiencen con la letra dada, por lo que después de abrir la página "A" debería mostrar algo como:

detrás

ábaco

abulón

(...) azul

Al principio estaba pensando en los tipos de publicaciones personalizadas, pero crear y mantener 26 tipos de publicaciones personalizadas parece una exageración.

¿Cuál será la forma más eficiente de ordenar publicaciones como esa? Consulta de base de datos, división de bucle con PHP? Estoy apuntando a miles de publicaciones (sí, tiene que ser Wordpress :)).

Wordpressor
fuente

Respuestas:

10

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

Al guardar, establezca los términos del objeto en una taxonomía AZ, utilizando la primera letra del título de la publicación. Asegúrese de forzar mayúsculas o minúsculas para mayor consistencia. Asegúrese 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 le da una taxonomía con la que puede hacer más cosas, como nubes de etiquetas o widgets de lista de términos! También es una forma mucho más rápida de determinar qué letras tienen publicaciones asociadas y cuántas, sin obligar a la base de datos a contar manualmente, y puede usar las API de términos estándar de WordPress para realizar consultas más complejas, como publicaciones que comienzan con vocales

Tom J Nowell
fuente
Esta es definitivamente la ruta ideal para tomar. Sin embargo, tenga en cuenta, con miles de publicaciones; Esta podría ser una tarea bastante engorrosa. Debería consultar inicialmente todas las publicaciones que comiencen con cada letra del alfabeto y actualizar cada publicación con el término de taxonomía adecuado, que coincida con la letra respectiva del alfabeto. De lo contrario, la actualización manual de cada publicación individual tardaría siglos en completarse.
Michael Ecklund
Sí, eso es un ENORME inconveniente, estas publicaciones serán agregadas por personas TOTALMENTE ignorantes y no puedo contar con ellas cuando se trata de establecer la taxonomía correcta al crear una nueva publicación. No estoy seguro de si consultar todas las publicaciones y actualizarlas cada vez que alguien edita / crea algo será eficiente.
Wordpressor
3
No, eso no sería un problema en absoluto, ocultar la interfaz de usuario y automatizar el proceso. Hacerlo en los ganchos de publicación de guardar y actualizar, hacerlo manualmente sería absurdamente costoso
Tom J Nowell
Tom J Nowell, funciona a las mil maravillas, pero tengo un problema grave y no estoy seguro de cómo manejar esto: algunas de las palabras comenzarán con letras como en.wikipedia.org/wiki/Ą - Estoy incapaz de establecer términos para estos. Aquí hay un código y una explicación: pastebin.com/cHxbjVFH , ¿por qué sucede eso? Estoy usando el paquete WP dedicado para este idioma.
Wordpressor
¿Estás hablando de acentos y diéresis, etc., etc.? Si es así, eso es algo que merece una pregunta completamente nueva por derecho propio, 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 hacerla
Tom J Nowell
4

Si no desea utilizar el método de términos de taxonomía preferido, haga lo siguiente:

<ul class="posts">
         <?php 
         global $wpdb; 
         $request = "a" // could be any letter you want
         $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>
                    ... loop stuff here (the_title, the_permalink) ... 
                </li>
                <?php 
            }
         } 
         else 
         {
            ?> 
            <div class="alert">No clubs found for that letter. Please try again, or use the search at the top.</div>
            <?php
         }
         ?>
    </ul>
21zna9
fuente
¿Puedes explicar cómo funciona esto? ¿No devolvería ninguna publicación que contenga la carta?
Tintinabulator Zea
No lo haría. mysql usa% como comodín. Sin embargo, nunca he encontrado $ en consultas mysql. correctamente debería leerWHERE post_title LIKE 'request%'
brett
1

Consulte este artículo aquí: query_post by title?

O puede crear un asistente de pre-guardado usando el marco PODS 2 y guardar la primera letra del título de la publicación en algún campo y usar la condición WHERE simple.

O cree un menú desplegable (otro pod / tipo de contenido) con todas las letras y cree una relación con su tipo de contenido de publicaciones existentes (en los pods 2 es posible) y eso es todo. Entonces, antes de guardar el término del diccionario, seleccione en el cuadro desplegable la letra que desea asignar a este término.

En Pods 2 puede agregar el campo adicional a un tipo de contenido de publicaciones existente. Este plugin / framework que es algo así como CCK + Views en el mundo de Drupal es realmente impresionante.

Pods 2 es un complemento muy útil.

Derfder
fuente