WordPress next_post_link/anterior_post_link no permanece en la misma categoría

6 minutos de lectura

avatar de usuario
Andrés Mateo

Aquí está mi configuración.

soltero.php

<?php

    if ( in_category( 'my-category' ) ) {
        include( TEMPLATEPATH.'/single-my-category.php' );
    }
    else {
        include( TEMPLATEPATH.'/single-generic.php' );
    }
?>

sola-mi-categoria.php

<?php

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

<?php echo the_title(); ?>

<div class="pagination">
    <div class="container">
        <div class="row">
            <div class="next col-xs-6 col-sm-6 col-md-6 col-lg-6">
                <?php next_post_link( '%link', '<img src="' . get_template_directory_uri() . '/img/cs-left.png" /> PREVIOUS', true ); ?>
            </div>

            <div class="previous col-xs-6 col-sm-6 col-md-6 col-lg-6">
                <?php previous_post_link( '%link', 'NEXT <img src="' . get_template_directory_uri() . '/img/cs-right.png" />', true ); ?>
            </div>
        </div>
    </div>
</div>

<?php endwhile; endif; ?>

Esto es lo que he seguido – http://codex.wordpress.org/Function_Reference/next_post_link

No estoy muy seguro de lo que estoy haciendo mal aquí, ya que, por alguna razón, el enlace de la publicación anterior me lleva a una publicación en una categoría diferente, aunque el parámetro in_same_term de la función está establecido en verdadero.

¿Algunas ideas?

Gracias.

  • Esto sucede porque tiene varias categorías en su publicación y wp solo va a lo que sea el primero en la publicación (supongo). Controlar este enlace aquí. También esta respuesta podría ser útil.

    – dingo_d

    1 de abril de 2016 a las 11:04


  • La publicación solo está asignada a 1 categoría

    – Andrés Mateo

    01/04/2016 a las 13:34

  • puede probar el enlace de paginación debajo del bucle

    – StreetCoder

    03/04/2016 a las 12:47

  • ¿Estás seguro de que esta publicación está asignada a solo 1 categoría? ¿Es posible que todavía esté asignado a Sin categoría? También es una categoría y tiene el ID más bajo de la base de datos.

    – dev_masta

    4 de abril de 2016 a las 3:28

  • Además, espero que no esté usando un complemento de caché.

    – dev_masta

    4 de abril de 2016 a las 3:32

Edite sus bloques de código de la siguiente manera. No ha puesto ‘.php’ en la quinta línea de su archivo single.php. La publicación anterior/siguiente se mostrará solo para las publicaciones de la categoría que especifique dentro if declaración de single.php (aquí categoría ‘php’). Para el siguiente ejemplo, creé un directorio ‘template-parts’ y creé dos archivos php (“single-my-category.php” y “single-generic.php”) dentro de ese directorio.

soltero.php

<?php
    $the_query = new WP_Query( $post );

    if (in_category('php')) {
        include( 'template-parts/single-my-category.php' );
    } else {
        include( 'template-parts/single-generic.php' );
    }
?>

sola-mi-categoria.php

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

<?php the_title(); ?>

<div class="pagination">
    <div class="container">
        <div class="row">
            <div class="next col-xs-6 col-sm-6 col-md-6 col-lg-6">
                <?php next_post_link( '%link', '<img src="' . get_template_directory_uri() . '/img/cs-left.png" /> PREVIOUS', true ); ?>
            </div>

            <div class="previous col-xs-6 col-sm-6 col-md-6 col-lg-6">
                <?php previous_post_link( '%link', 'NEXT <img src="' . get_template_directory_uri() . '/img/cs-right.png" />', true ); ?>
            </div>
        </div>
    </div>
</div>

<?php endwhile; endif; ?>

  • Hola, gracias por la respuesta, pero esto es en realidad un error de mi parte. Recorté la pregunta para que sea más fácil para todos ver lo que hice y accidentalmente omití ‘.php’ del final. En el código, en realidad tiene ‘.php’ al final del nombre de la plantilla. Editaré esto en mi pregunta ahora.

    – Andrés Mateo

    4 de abril de 2016 a las 8:48

  • @AndrewMatthew Creo que ha dejado de lado información muy importante aquí. Su código funciona perfectamente bien, por lo que algo más no publicado está rompiendo su código

    – Pieter Goosen

    04/04/2016 a las 10:41

  • next_post_link() & previous_post_link() tomar cinco parámetros. El cuarto es $excluded_terms y el quinto es $taxonomy (el valor predeterminado es ‘categoría’). ¿Podría intentar agregar dos parámetros más a ambas funciones? El 4º será ” y el 5º será ‘categoría’. Referencia

    – Sajib Biswas

    04/04/2016 a las 18:35


Especifique también el nombre de la categoría en una sola página … dado que single-categoryname.php no es correcto, debe intentar usar taxonomy-taxonomy_name.php O

<?php query_posts('category_name=CATEGORYNAME&showposts=5');
while (have_posts()) : the_post();
  // do whatever you want
?>
<?php endwhile;?>
<div class="pagination">
<div class="container">
    <div class="row">
        <div class="next col-xs-6 col-sm-6 col-md-6 col-lg-6">
            <?php next_post_link( '%link', '<img src="' . get_template_directory_uri() . '/img/cs-left.png" /> PREVIOUS', true ); ?>
        </div>

        <div class="previous col-xs-6 col-sm-6 col-md-6 col-lg-6">
            <?php previous_post_link( '%link', 'NEXT <img src="' . get_template_directory_uri() . '/img/cs-right.png" />', true ); ?>
        </div>
    </div>
</div>

Si en_mismo_término no funciona para usted, es posible que su objeto de consulta no retenga los datos de la publicación.

Darle una oportunidad –

global $the_query;
$the_query = new WP_Query( $post );

global $the_query;
if ( $the_query->have_posts() ) : while ($the_query->have_posts() ) : the_post(); ?>

<?php the_title(); ?>

<div class="pagination">
    <div class="container">
        <div class="row">
            <div class="next col-xs-6 col-sm-6 col-md-6 col-lg-6">
                <?php next_post_link( '%link', '<img src="' . get_template_directory_uri() . '/img/cs-left.png" /> PREVIOUS', true ); ?>
            </div>

            <div class="previous col-xs-6 col-sm-6 col-md-6 col-lg-6">
                <?php previous_post_link( '%link', 'NEXT <img src="' . get_template_directory_uri() . '/img/cs-right.png" />', true ); ?>
            </div>
        </div>
    </div>
</div>

<?php endwhile; endif; ?>

avatar de usuario
Mukesh Panchal

¿Puedes agregar este código en tu archivo de plantilla.

<ul class="pager">
  <?php if ( get_previous_post() != null ) : ?>
    <li class="previous">
      <span class="nav-previous">
        <?php 
          $singular_nav_previous_text = apply_filters( 'tc_singular_nav_previous_text', _x( '&larr;' , 'Previous post link' , 'customizr' ) );
          previous_post_link( '%link' , '<span class="meta-nav">' . $singular_nav_previous_text . '</span> %title' ); 
        ?>
      </span>
    </li>
  <?php endif; ?>
  <?php if ( get_next_post() != null ) : ?>
    <li class="next">
      <span class="nav-next">
        <?php
          $singular_nav_next_text = apply_filters( 'tc_singular_nav_next_text', _x( '&rarr;' , 'Next post link' , 'customizr' ) );
          next_post_link( '%link' , '%title <span class="meta-nav">' . $singular_nav_next_text . '</span>' ); 
          ?>
      </span>
    </li>
  <?php endif; ?>
</ul>

Ahora agregue el siguiente código en función.php

add_filter('tc_previous_single_post_link_args', 'navigate_in_same_taxonomy');
add_filter('tc_next_single_post_link_args', 'navigate_in_same_taxonomy');
function navigate_in_same_taxonomy( $args ){
  $args['in_same_term'] = true;
  return $args;
}

si necesita más opciones en el enlace Siguiente/Anterior, verifique este enlace

¿Ha sido útil esta solución?