WordPress previous_post_link exclui postagens com várias categorias

4

Eu tenho uma página single-news no WordPress, em que estou circulando todos os posts e atualizando condicionalmente os botões anterior e seguinte para excluir determinadas categorias com base no ID da categoria da postagem atual.

Aqui está o que eu tenho:

          <?php if (have_posts()): ?>
            <?php while (have_posts()): ?>
                <?php the_post(); ?>

                <?php if ( in_category(7)) : ?>

                    <?php
                        $sidebar = 'blog-news';        
                        $catagory = array(3,5,6,4,1);
                    ?>
                <?php endif; ?>

        <nav>
            <ul class="pager">
                <li class="prev">
                    <?php 
                        echo previous_post_link( "%link", "Previous", true, $catagory );
                    ?>
                </li>
                <li class="next">
                    <?php 
                        echo next_post_link( "%link", "Next", true, $catagory );
                    ?>
                </li>
            </ul>
        </nav>
    <?php endwhile; ?>
    <?php endif; ?>

O problema que estou tendo é que, se uma postagem tiver duas categorias, por exemplo, 6 e 7, exclui essa postagem do link, enquanto se a postagem tiver apenas uma categoria, e. 6 então não exclui.

Como configuro para que NÃO exclua nenhuma postagem que tenha categoria 7, independentemente de ter várias categorias.

    
por user3574492 31.10.2016 / 12:55

1 resposta

0

O que você precisa fazer é alterar o argumento excluded_terms das funções previous_post_link e next_post_link que você chamou de $catagory . Basta remover todos os IDs de categoria da sua postagem atual da matriz excluded_terms . Certifique-se de definir uma matriz de categorias que você não deseja exibir como você fez no exemplo acima.

$catagory = array(3,5,6,4,1) // array of category ids you don't want to be displayed

o próximo passo é encontrar todos os IDs de categoria de sua postagem atual e colocá-la em uma nova matriz.

$post_category_objects = get_the_category(); // returns an array of WP_Term objects
$post_category_ids = array();
foreach($post_category_objects as $pco){
     array_push($post_category_ids, $pco->term_id); // adds the post's category id to the $post_category_ids array
}

Em seguida, você precisa remover os IDs de categoria da postagem atual de $catagory (< - a matriz que contém os valores a serem excluídos das funções previous_post_link e next_post_link ).

Supondo que a postagem tenha as categorias 6 e 7, esses IDs de categoria serão removidos de $catagory .

// removes the current post's category ids from the $catagory-array
   foreach( $post_category_ids as $pci ){
        $key = array_search( $pci, $catagory );
        if( $key !== false ){
             unset( $catagory[$key]);
        }
   }
// rearranges the $catagory's keys
   $catagory = array_values($catagory);

Coloque todo o código acima em sua declaração if e isso deve funcionar.

    
por newjonnydepony 21.11.2016 / 16:44