Como posso obter os links dos posts seguintes / anteriores para ordenar por um filtro (pela última palavra do título)?

4

Estou tentando usar as funções de link de postagem seguinte / anterior pelo Wordpress para alternar entre as postagens de um tipo personalizado com base no sobrenome de uma pessoa.

O tipo personalizado representa uma pessoa com um título de postagem no formato "Nome do Sobrenome".

Eu pedi as postagens em uma página de arquivo pelo sobrenome, mas estou com dificuldades para descobrir como conseguir que os links seguintes / anteriores também sigam este filtro. Eu vi outro pergunta semelhante e consegui encomendar os links seguintes / anteriores por título, mas apenas alfabeticamente no primeiro nome.

Se alguém tiver alguma ideia de como isso poderia ser feito, a ajuda seria muito apreciada.

    
por Clayton Jones 15.07.2015 / 16:06

1 resposta

5

Revisando as funções de string do MySQL , parece que você pode usar o Função SUBSTRING_INDEX() :

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

para encomendar pela última palavra do título da mensagem.

Você pode testar esse método em seus filtros orderby .

Exemplo: CPT anterior / seguinte - ordenada pela última palavra no título do post

Este é um exemplo de como alguém poderia tentar modificar a resposta vinculada por @WillLanni:

a) Próxima parte do tipo de postagem 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 do tipo de postagem 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 );

onde você modifica o tipo de postagem personalizado 'cpt' de acordo com suas necessidades.

    
por birgire 15.07.2015 / 17:35