WordPress previous_post_link excluye publicaciones con múltiples categorías

4

Tengo una página single-news en WordPress donde estoy repasando todas las publicaciones y actualizando condicionalmente los botones anterior y siguiente para excluir ciertas categorías basadas en la ID de categoría de la publicación actual.

Esto es lo que tengo:

          <?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; ?>

El problema que tengo es que si una publicación tiene 2 categorías, por ej. 6 y 7, excluye esa publicación del enlace, mientras que si la publicación tiene solo una categoría, por ejemplo. 6 entonces no lo excluye.

¿Cómo lo configuro para que NO excluya ninguna publicación que tenga categoría 7, independientemente de si tiene varias categorías?

    
pregunta user3574492 31.10.2016 - 12:55

1 respuesta

0

Lo que debe hacer es cambiar el argumento excluded_terms de las funciones previous_post_link y next_post_link a las que llamó $catagory . Simplemente elimine todos los identificadores de categoría de su publicación actual de esa matriz excluded_terms . Asegúrese de definir una serie de categorías que no desea que se muestren como lo hizo en el ejemplo anterior.

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

el siguiente paso es encontrar todos los identificadores de categoría de tu publicación actual y colocarlos en una nueva 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
}

a continuación, debe eliminar los identificadores de categoría de la publicación actual de $catagory (< - la matriz que contiene los valores que se excluirán de las funciones previous_post_link y next_post_link ).

Suponiendo que la publicación tiene las categorías 6 y 7, estos identificadores de categoría se eliminarán 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 el código anterior en su declaración if y debería funcionar.

    
respondido por el newjonnydepony 21.11.2016 - 16:44

Lea otras preguntas en las etiquetas