Link-uri către postarea următoare și precedentă DOAR în cadrul categoriei

20 feb. 2015, 13:08:06
Vizualizări: 32.4K
Voturi: 2

Folosesc funcția next post link din WordPress pentru a afișa link-uri de navigare către "următoarea postare din aceeași categorie" și totul funcționează bine... problema pe care o am este că atunci când sunt în "ultima" postare a unei categorii, link-ul "URMĂTOARE" apare oricum și face ceea ce nu vreau: face legătura către prima postare dintr-o categorie diferită. La fel se întâmplă și cu prima postare a unei categorii, când navighez în prima postare a unei categorii, link-ul "PRECEDENT" apare făcând legătura către postarea anterioară dintr-o altă categorie diferită... Aș dori ca în prima și ultima postare, aceste link-uri să nu fie afișate.

<div id="nav-above" class="navigation">
                    <div class="nav-previous"><?php previous_post_linknext_post_link( '%link', '<span class="meta-nav">' .     
    _x( '&#9668; Precedent', 'Link către postarea precedentă','category' ,TRUE ) . '</span>' ); ?></div>
                    <div class="nav-next"><?php next_post_link( '%link', '<span class="meta-nav">' . _x( 'Următorul &#9658; ', 'Link către postarea următoare', 'category',TRUE ) . '</span>' ); ?> </div>
                </div><!-- #nav-above -->

http://codex.wordpress.org/Function_Reference/next_post_link

1
Comentarii

posibil duplicat al următorul anterior aceeași categorie TRUE nu funcționează

Brad Dalton Brad Dalton
20 feb. 2015 18:40:57
Toate răspunsurile la întrebare 3
15

Puteți face acest lucru folosind previous_post_link() și next_post_link().

Aceste funcții vor crea linkurile pentru dvs. și ar trebui să puteți elimina toată logica pe care o utilizați pentru paginare.

Deoarece doriți să legați doar postări din aceeași categorie, ar trebui să utilizați funcțiile cu următorii parametri:

previous_post_link('&laquo; %link', '%title', true);
next_post_link('%link &raquo;', '%title', true);

Actualizare

Ca răspuns la întrebarea dvs. actualizată privind problema legăturilor anterioare/următoare atunci când sunt prima/ultima postare, consultați această linie din Codex pentru ambele funcții previous_post_link() și next_post_link() în legătură cu parametrul $in_same_term:

Indică dacă următoarea postare trebuie să se afle în același termen de taxonomie ca postarea curentă. Dacă este setat la 'true', vor fi afișate doar postări din termenul de taxonomie curent. Dacă postarea se află atât în categoria părinte, cât și în subcategorie, sau în mai mulți termeni, linkul către următoarea postare va duce la următoarea postare din oricare dintre acești termeni.

Ținând cont de acest lucru, bănuiesc că primele/ultimele postări pot fi asociate cu mai mult de o categorie? Dacă da, filtrul wp_get_object_terms ar putea ajuta.

În întrebarea dvs. originală (înainte de editare) căutați doar postări din prima categorie, așa că voi aplica aceeași logică aici:

<?php add_filter('wp_get_object_terms', 'my_custom_post_navigation', 4, 99); ?>
<div id="nav-above" class="navigation">
    <div class="nav-previous">
        <?php previous_post_link( '<span class="meta-nav"> %link </span>', _x( '&#9668; Previous', 'Legătură postare anterioară', 'category') , TRUE ); ?>
    </div>
    <div class="nav-previous">
        <?php next_post_link( '<span class="meta-nav"> %link </span>', _x( 'Next &#9658;', 'Legătură postare următoare', 'category') , TRUE ); ?>
    </div>
</div><!-- #nav-above -->
<?php remove_filter('wp_get_object_terms', 'my_custom_post_navigation', 99); ?>

Pe lângă codul de mai sus, ar trebui să adăugați acest cod în fișierul functions.php:

/**
 * Returnează doar prima categorie atunci când se afișează legăturile către postările anterioare/următoare
 */
function my_custom_post_navigation($terms, $object_ids, $taxonomies, $args){
    
    return array_slice($terms, 0, 1);
    
}
20 feb. 2015 14:01:57
Comentarii

Bună David, mulțumesc pentru răspuns. Am pus o întrebare nouă, formulată mai bine și aș dori să aud feedback-ul tău: http://wordpress.stackexchange.com/questions/178800/next-post-link-only-within-category

dmtnexer dmtnexer
20 feb. 2015 15:35:02

Nu ar trebui să postezi o întrebare nouă, deoarece este practic o extensie a acesteia. Dacă codul pe care l-am oferit nu este corect, putem discuta aici, în comentarii. Și dacă este necesar, poți edita întrebarea pentru a include informații actualizate.

David Gard David Gard
20 feb. 2015 15:38:28

Am actualizat întrebarea... mulțumesc pentru clarificarea modului corect de utilizare.

dmtnexer dmtnexer
20 feb. 2015 15:40:54

am șters postul duplicat...

dmtnexer dmtnexer
20 feb. 2015 15:47:20

@dmtnexer - Te rog verifică actualizarea mea.

David Gard David Gard
20 feb. 2015 15:58:38

postul afișat de funcție nu este în aceeași categorie cu postul vizualizat... folosesc tema twentyten... sunt foarte confuz. există vreo modalitate de a implementa în PHP o verificare dacă este ultimul post dintr-o categorie pentru a afișa un CSS care ascunde linkul "next".. și același lucru pentru linkul "previous"... sună cam hack-ish... idei? mulțumesc pentru ajutor, învăț multe.

dmtnexer dmtnexer
20 feb. 2015 16:05:28

@dmtnexer - Vezi cealaltă actualizare pe care am postat-o și spune-mi dacă te ajută. Comportamentul implicit este ca linkul să nu apară dacă nu există nimic de legat, așa că faptul că se creează un link sugerează că trebuie să existe o legătură între acele categorii. Într-o lume ideală, $in_same_term ar trebui să îți permită să transmiți un ID/slug de termen pentru a lega doar acela și să ne evite să folosim filtrele, dar din păcate nu funcționează așa.

David Gard David Gard
20 feb. 2015 16:20:36

Dragă David, FUNCȚIONEAZĂ!!!!! mulțumesc! Trebuie să înțeleg aceste filtre.. ai vreo sugestie unde pot găsi detalii despre acest tip de filtru?

dmtnexer dmtnexer
20 feb. 2015 16:37:24

@dmtnexer - Verifică pagina de referință pentru Filtre. Aceasta listează majoritatea filtrelor disponibile, iar dacă titlul este albastru înseamnă că există mai multe informații despre el (roșu înseamnă gol). Ar trebui să consulți și pagina de referință pentru Acțiuni și să te asiguri că înțelegi diferența dintre ele. Dacă nu ești sigur dacă o acțiune/filtru este disponibil, explorează fișierele de bază și uită-te la cod - doar ai grijă să nu modifici nucleul :)

David Gard David Gard
20 feb. 2015 16:41:31

@dmtnexer - Oh, și dacă ești mulțumit de răspunsul meu, te rog să-l marchezi ca atare.

David Gard David Gard
20 feb. 2015 16:42:34

Aș vrea să o fac, dar reputația mea este sub 15. Mulțumesc pentru sugestii, le voi lua în considerare!!

dmtnexer dmtnexer
20 feb. 2015 16:45:55

@dmtnexer - Aceea este votarea în sus. Ar fi cam inutil să ai un site de întrebări/răspunsuri în care nimeni nu ar putea accepta niciodată răspunsuri...

David Gard David Gard
20 feb. 2015 16:54:42

interfața utilizator ar trebui îmbunătățită, nu am putut găsi pictograma de acceptare până când am căutat pe google :) mulțumesc

dmtnexer dmtnexer
20 feb. 2015 18:45:37

LOL, nicio problemă, mă bucur că am putut ajuta.

David Gard David Gard
21 feb. 2015 20:35:33

Pentru cel care a dat downvote - de ce? Răspunsul este testat și funcționează, iar OP l-a acceptat ca răspuns. Te rog comentează de ce ai dat downvote la răspuns.

David Gard David Gard
21 feb. 2015 20:36:40
Arată celelalte 10 comentarii
0

Dacă aveți nevoie să restricționați legătura către articolul anterior sau următor pentru o taxonomie personalizată sau term, tip de postare personalizat, câmp personalizat sau format, atunci ar trebui să încercați Ambrosite Next/Previous Post Link Plus. Acest plugin creează două noi etichete de șablon — next_post_link_plus și previous_post_link_plus — care sunt versiuni îmbunătățite ale etichetelor de șablon WordPress standard next_post_link și previous_post_link.

  • Sortați legăturile către articolele anterioare/următoare după alte coloane decât post_date (de ex. alfabetic).
  • Sortați legăturile anterioare/următoare după câmpuri personalizate (sunt acceptate atât sortări pe șiruri de caractere, cât și pe numere întregi).
  • Compatibilitate completă cu WordPress 3.3, inclusiv suport pentru tipuri de postări personalizate, taxonomii personalizate și formate de postare.
  • Revenirea la prima postare dacă nu există o postare următoare (și invers). Obțineți prima/ultima postare, în loc de postarea anterioară/următoare (pentru legături de navigare First|Previous|Next|Last).
  • Afișați miniaturi ale postărilor alături de legături (WordPress 2.9 sau mai nou).
  • Trunchiați titlurile legăturilor la orice lungime și afișați text personalizat în tooltip.
  • Afișați titlul, data, autorul, categoria și valoarea meta a legăturilor anterioare/următoare.
  • Specificați un format de dată personalizat pentru variabila %date.
  • Restricționați legăturile anterioare/următoare la aceeași categorie, taxonomie, format, autor, valoare de câmp personalizat, listă de ID-uri de postări personalizate sau listă de categorii personalizate.
  • Excludeți categorii, taxonomii personalizate, formate de postare sau ID-uri individuale de postări.
  • Trei metode de excludere a categoriilor pentru un control mai mare asupra fluxului de navigare.
  • Returnați mai multe legături anterioare/următoare (de ex. următoarele N legături, într-o listă HTML).
  • Returnați ID-ul, titlul, data, atributul href sau obiectul postării pentru legăturile anterioare/următoare, în loc să le afișați pe ecran.
  • Returnați false dacă nu se găsește nicio legătură anterioară/următoare, astfel încât temele să poată afișa text alternativ condițional.
  • Funcționează cu Post Types Order și alte plugin-uri populare de reordonare a postărilor.
21 apr. 2017 01:02:17
0

Copiază pagina single.php din tema Părinte și lipește-o în directorul temei Child (Copil). Deschide fișierul single.php din directorul temei Child și adaugă următorul cod la sfârșitul fișierului [înainte de get_footer(); ]

<?php
$post_id = $post->ID; // Obține ID-ul postului curent
$cat = get_the_category(); 
$current_cat_id = $cat[0]->cat_ID; // Obține ID-ul categoriei curente

$args = array('category'=>$current_cat_id,'orderby'=>'post_date','order'=> 'DESC');
$posts = get_posts($args);
// Obține ID-urile posturilor returnate de funcția get_posts
$ids = array();
foreach ($posts as $thepost) {
    $ids[] = $thepost->ID;
}
// Obține și afișează link-urile pentru Postul Anterior și Următor din aceeași Categorie
$index = array_search($post->ID, $ids);
$prev_post = $ids[$index+1];
$next_post = $ids[$index-1];
?>

<?php if (!empty($prev_post)){ ?> <a class="previous-post" rel="prev" href="<?php echo get_permalink($prev_post) ?>"> <span class="meta-icon"><i class="fa fa-angle-left fa-lg"></i></span> Anterior</a> <?php } ?>

<?php if (!empty($next_post)){ ?> <a class="next-post" rel="next" href="<?php echo get_permalink($next_post) ?>">Următor <span class="meta-icon"><i class="fa fa-angle-right fa-lg"></i></span> </a> <?php } ?>

După ce ai adăugat acest cod, lipește următorul cod în fișierul Style.css al temei Child pentru a stiliza link-urile:

a.previous-post, a.next-post {
    color: #fff;
    background-color: #4498e7;
    text-align: center;
    height: 34px;
    line-height: 34px;
    font-size: 14px;
    border: 1px solid;
    padding: 0 20px;
    margin-bottom: 30px;
    text-transform: uppercase;
    border-radius: 4px;
    font-weight: bold;
}

a.previous-post:hover, a.next-post:hover {
    color: #4498e7;
    background-color: #fff;
}

a.previous-post {
    float: left !important;
}

a.next-post {
    float: right !important;
}

Spune-mi care sunt rezultatele :)

8 iul. 2017 14:40:26