2016-03-16 1 views
9

Hier ist mein Setup.Wordpress next_post_link/previous_post_link nicht in der gleichen Kategorie bleiben

single.php

<?php 

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

Single-my-category.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; ?> 

Das ist, was ich verfolgt haben - http://codex.wordpress.org/Function_Reference/next_post_link

Ich bin nicht ganz sicher, was ich bin Ich mache hier einen Fehler, weil der previous_post_link mich aus irgendeinem Grund zu einem Post in einer anderen Kategorie führt, obwohl der Parameter in_same_term der Funktion auf true gesetzt ist.

Irgendwelche Ideen?

Danke.

+0

Dies geschieht, weil Sie mehrere Kategorien zu Ihrem Beitrag haben und wp geht nur auf das, was die erste in der Post ist (erraten). Überprüfen Sie [diesen Link hier] (http://wordpress.mcdspot.com/2010/06/02/stay-in-category/). Auch [diese Antwort] (http://stackoverflow.com/a/3005646/629127) könnte hilfreich sein. –

+0

Der Beitrag ist nur 1 Kategorie zugeordnet –

+0

Sie können versuchen, die Paginierung Link unter der Schleife – StreetCoder

Antwort

-1

Sie können diesen Code in Ihre Vorlagendatei einfügen.

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

Jetzt Code unten in function.php hinzufügen

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

, wenn Sie mehr Option müssen auf Next/Prev Link Check this link

+1

Dies sind Customizr spezifische Hooks. Nicht WordPress, das wird nicht funktionieren. –

+0

Stackoverflows abgelaufen Bounty Auswahlverfahren gab das Kopfgeld auf diese Antwort. Diese "Lösung" funktioniert nicht. Vielen Dank. –

2

Bearbeiten Sie Ihre Code-Blöcke, wie folgend. Sie haben '.php' nicht in die 5. Zeile Ihrer single.php-Datei geschrieben. Vorheriger/Nächster Beitrag wird nur für die Beiträge der Kategorie angezeigt, die Sie innerhalb der if Anweisung von single.php (hier Kategorie 'php') angeben. Für das folgende Beispiel habe ich ein Verzeichnis 'template-parts' erstellt und zwei PHP-Dateien ("single-my-category.php" und "single-generic.php") in diesem Verzeichnis erstellt.

single.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'); 
    } 
?> 

Single-my-category.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; ?> 
+0

Hallo, vielen Dank für die Antwort, aber das ist tatsächlich ein Fehler meinerseits. Ich habe die Frage reduziert, um es für jeden einfacher zu machen, zu sehen, was ich getan habe, und ich habe aus Versehen ".php" ausgelassen. Im Code hat es tatsächlich '.php' am Ende des Vorlagennamens. Ich werde das jetzt in meiner Frage bearbeiten. –

+1

@AndrewMatthew Ich denke, Sie haben hier sehr wichtige Informationen weggelassen. Dein Code funktioniert einwandfrei, also unterbricht etwas anderes, das nicht gepostet wurde, deinen Code –

+0

'next_post_link()' & 'previous_post_link()' nimm fünf Parameter. Viertens ist $ exclude_terms und Fünfter ist $ Taxonomie (Standardwert ist 'Kategorie'). Könnten Sie versuchen, zwei weitere Parameter für beide Funktionen hinzuzufügen? 4. wird '' und 5. wird 'Kategorie' sein. [Referenz] (https://developer.wordpress.org/reference/functions/next_post_link/) –

1

auch den Kategorienamen in einzelne Seite angeben .. da Single-categoryname.php wird Sie nicht korrigieren sollten versuchen, mit Taxonomie-taxonomy_name.php OR

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

-1

Wenn in_same_term nicht für Sie funktioniert, könnte Ihr Abfrageobjekt die Post-Daten nicht halten.

es zu versuchen -

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