¿Cómo puedo obtener los enlaces de la siguiente / última publicación para ordenarlos por un filtro (por la última palabra del título)?

4

Estoy tratando de usar las funciones de enlace de publicación siguiente / anterior de Wordpress para moverme entre las publicaciones de un tipo personalizado basado en el apellido de una persona.

El tipo personalizado representa a una persona con un título de publicación en el formato "Nombre del apellido".

He ordenado las publicaciones en una página de archivo por el apellido, pero estoy luchando para averiguar cómo puedo obtener los enlaces siguientes / anteriores para seguir este filtro. He visto otro pregunta similar y he logrado ordenar los enlaces siguientes / anteriores por título, pero solo alfabéticamente en el primer nombre.

Si alguien tiene alguna idea de cómo se podría hacer esto, la ayuda sería muy apreciada.

    
pregunta Clayton Jones 15.07.2015 - 16:06

1 respuesta

5

Revisando las funciones de cadena MySQL , parece que podrías usar el Función SUBSTRING_INDEX() :

ORDER BY SUBSTRING_INDEX( p.post_title, ' ', -1 ) {ASC|DESC} LIMIT 1

para ordenar por la última palabra del título de la publicación.

Puede probar este método dentro de los filtros orderby .

Ejemplo: Anterior / Siguiente CPT: ordenado por la última palabra en el título de la publicación

Este es un ejemplo de cómo se podría intentar modificar la respuesta vinculada por @WillLanni:

a) Parte siguiente para el tipo de publicación personalizada cpt :

// Next CPT
add_filter( 'get_next_post_where', function( $where, $in_same_term, $excluded_terms )
{
    global $post, $wpdb;

    // Edit this custom post type to your needs
    $cpt = 'post';

    // Current post type
    $post_type = get_post_type( $post );

    // Nothing to do    
    if( $in_same_term || ! empty( $excluded_terms ) || $cpt !== $post_type )
        return $where;

    // Next CPT order by last word in title
    add_filter( 'get_next_post_sort', function( $orderby ) 
    {
        return " ORDER BY SUBSTRING_INDEX( p.post_title, ' ', -1 ) ASC LIMIT 1 ";
    } );

    // Modify Next WHERE part
    return $wpdb->prepare( 
        " WHERE 
            SUBSTRING_INDEX( p.post_title, ' ', -1 ) > SUBSTRING_INDEX( '%s', ' ', -1 ) 
            AND p.post_type = '%s' 
            AND p.post_status = 'publish'
        ", 
        $post->post_title, 
        $post_type 
    );    

}, 10, 3 );

b) Parte anterior para el tipo de publicación personalizada cpt :

// Previous CPT
add_filter( 'get_previous_post_where', function( $where, $in_same_term, $excluded_terms)
{
    global $post, $wpdb;

    // Edit this custom post type to your needs
    $cpt = 'post';

    // Current post type
    $post_type = get_post_type( $post );

    // Nothing to do    
    if( $in_same_term || ! empty( $excluded_terms ) || $cpt !== $post_type )
        return $where;

    // Previous CPT, order by last word in post title
    add_filter( 'get_previous_post_sort', function( $orderby )
    {
        return " ORDER BY SUBSTRING_INDEX( p.post_title, ' ', -1 ) DESC LIMIT 1 ";
    } );

    // Modify Prev WHERE part
    return $wpdb->prepare( 
        " WHERE 
            SUBSTRING_INDEX( p.post_title, ' ', -1 ) < SUBSTRING_INDEX( '%s', ' ', -1 ) 
            AND p.post_type = '%s' 
            AND p.post_status = 'publish'
        ", 
        $post->post_title, 
        $post_type 
    );

}, 10, 3 );

donde modificas el tipo de publicación personalizada 'cpt' a tus necesidades.

    
respondido por el birgire 15.07.2015 - 17:35

Lea otras preguntas en las etiquetas