Link al post precedente e successivo SOLO all'interno della categoria
Sto usando la funzione next post link di WP per mostrare i link di navigazione al "post successivo nella stessa categoria" e funziona bene... il problema che ho è che quando sono nell'ultimo post di una categoria, il link "SUCCESSIVO" appare comunque e fa quello che non voglio: collega al primo post di una categoria diversa. Lo stesso vale per il primo post di una categoria, quando si naviga nel primo post di una categoria il link "PRECEDENTE" appare collegandosi al post precedente di un'altra categoria diversa... Vorrei che nel primo e nell'ultimo post, questi link non vengano mostrati.
<div id="nav-above" class="navigation">
<div class="nav-previous"><?php previous_post_linknext_post_link( '%link', '<span class="meta-nav">' .
_x( '◄ Precedente', 'Link post precedente','category' ,TRUE ) . '</span>' ); ?></div>
<div class="nav-next"><?php next_post_link( '%link', '<span class="meta-nav">' . _x( 'Successivo ► ', 'Link post successivo', 'category',TRUE ) . '</span>' ); ?> </div>
</div><!-- #nav-above -->
http://codex.wordpress.org/Function_Reference/next_post_link

Puoi farlo utilizzando previous_post_link()
e next_post_link()
.
Queste funzioni creeranno i link per te, e dovresti essere in grado di eliminare tutta la logica che stai usando per l'impaginazione.
Poiché desideri collegarti solo ai post nella stessa categoria, dovresti usare le funzioni con i seguenti parametri:
previous_post_link('« %link', '%title', true);
next_post_link('%link »', '%title', true);
Aggiornamento
In risposta alla tua domanda aggiornata riguardante il problema dei link precedenti/successivi quando sono il primo/ultimo post, consulta questa riga dal Codex sia di previous_post_link()
che di next_post_link()
in relazione al parametro $in_same_term
:
Indica se il prossimo post deve essere all'interno dello stesso termine tassonomico del post corrente. Se impostato su 'true', verranno visualizzati solo i post del termine tassonomico corrente. Se il post è sia nella categoria genitore che nella sottocategoria, o in più termini, il link al post successivo porterà al prossimo post in uno qualsiasi di quei termini.
Con questo in mente, sospetto che i tuoi primi/ultimi post possano essere associati a più di una categoria? Se è così, il filtro wp_get_object_terms
potrebbe essere d'aiuto.
Nella tua domanda originale (pre-modifica) stavi cercando solo i post nella primissima categoria, quindi applicherò quella logica qui:
<?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( '◄ Precedente', 'Link post precedente', 'category') , TRUE ); ?>
</div>
<div class="nav-previous">
<?php next_post_link( '<span class="meta-nav"> %link </span>', _x( 'Successivo ►', 'Link post successivo', 'category') , TRUE ); ?>
</div>
</div><!-- #nav-above -->
<?php remove_filter('wp_get_object_terms', 'my_custom_post_navigation', 99); ?>
Oltre a quanto sopra, dovresti inserire questo nel tuo file functions.php:
/**
* Restituisce solo la prima categoria quando si generano i link ai post precedenti/successivi
*/
function my_custom_post_navigation($terms, $object_ids, $taxonomies, $args){
return array_slice($terms, 0, 1);
}

Ciao David, grazie per la tua risposta. Ho formulato una nuova domanda in modo più chiaro, mi piacerebbe sentire il tuo feedback: http://wordpress.stackexchange.com/questions/178800/next-post-link-only-within-category

Non dovresti creare una nuova domanda, poiché è sostanzialmente un'estensione di questa. Se il codice che ho fornito non è corretto, possiamo discuterne qui, nei commenti. E se necessario, puoi modificare la tua domanda per includere informazioni aggiornate.

ho aggiornato la domanda... grazie per aver chiarito come usare correttamente questo strumento.

il post mostrato dalla funzione non è nella stessa categoria del post visualizzato... sto usando il tema twentyten... sono davvero confuso. c'è un modo per fare con PHP per verificare se è l'ultimo post di una categoria per far echo di un CSS che nasconde il link successivo... e lo stesso con il link precedente... sembra un po' un hack... qualche idea? grazie per il tuo aiuto, sto imparando molto.

@dmtnexer - Vedi l'altro aggiornamento che ho postato e fammi sapere se ti aiuta. Il comportamento predefinito è che il link non venga mostrato se non c'è nulla a cui collegarsi, quindi il fatto che ci sia un collegamento suggerisce che deve esserci qualche connessione tra quelle categorie. In un mondo ideale $in_same_term
ti permetterebbe di passare un ID/slug del termine per collegarti solo a quello e evitare di dover usare i filtri, ma purtroppo non è così.

Caro David, FUNZIONA!!!!! grazie! Devo capire questi filtri.. hai qualche suggerimento su dove posso trovare dettagli su questo tipo di filtri?

@dmtnexer - Dai un'occhiata alla pagina di riferimento dei Filtri. Elenca la maggior parte dei filtri disponibili e se il titolo è blu significa che ci sono ulteriori informazioni al riguardo (rosso significa vuoto). Dovresti anche controllare la pagina di riferimento delle Azioni e assicurarti di capire la differenza tra entrambe. Se non sei sicuro se un'azione/filtro è disponibile, esplora i file core e guarda il codice - fai solo attenzione a non modificare il core :)

@dmtnexer - Oh, e se sei soddisfatto della mia risposta per favore segnalalo.

Mi piacerebbe, ma la mia reputazione è sotto i 15 grazie per i suggerimenti li esaminerò!!

@dmtnexer - Quello è il voto positivo. Sarebbe piuttosto inutile avere un sito di domande/risposte in cui nessuno possa mai accettare risposte...

l'interfaccia utente potrebbe essere migliorata, non riuscivo a trovare l'icona di accettazione finché non l'ho cercata su Google :) grazie

Se hai bisogno di limitare i link ai post precedenti o successivi per una specifica tassonomia personalizzata, termine, tipologia di post personalizzato, campo personalizzato o formato, allora dovresti provare Ambrosite Next/Previous Post Link Plus. Questo plugin crea due nuovi tag template — next_post_link_plus e previous_post_link_plus — che sono versioni avanzate dei tag template di WordPress next_post_link e previous_post_link.
- Ordina i link ai post successivi/precedenti in base a colonne diverse da post_date (ad esempio in ordine alfabetico).
- Ordina i link successivi/precedenti in base a campi personalizzati (sono supportati sia ordinamenti per stringhe che per numeri interi).
- Completa compatibilità con WordPress 3.3, incluso il supporto per tipologie di post personalizzate, tassonomie personalizzate e formati di post.
- Ritorna al primo post se non c'è un post successivo (e viceversa). Recupera il primo/ultimo post, invece del post precedente/successivo (per link di navigazione Primo|Precedente|Successivo|Ultimo).
- Visualizza le miniature dei post accanto ai link (WordPress 2.9 o superiore).
- Tronca i titoli dei link a qualsiasi lunghezza e mostra testo personalizzato nel tooltip.
- Visualizza il titolo, la data, l'autore, la categoria e il valore meta dei link successivi/precedenti.
- Specifica un formato di data personalizzato per la variabile %date.
- Limita i link successivi/precedenti alla stessa categoria, tassonomia, formato, autore, valore di campo personalizzato, lista di ID post personalizzati o lista di categorie personalizzate.
- Escludi categorie, tassonomie personalizzate, formati di post o ID post individuali.
- Tre metodi di esclusione delle categorie per un maggiore controllo sul flusso di navigazione.
- Restituisce più link successivi/precedenti (ad esempio i prossimi N link, in una lista HTML).
- Restituisce l'ID, il titolo, la data, l'attributo href o l'oggetto post dei link successivi/precedenti, invece di visualizzarli direttamente.
- Restituisce false se non viene trovato alcun link successivo/precedente, in modo che i temi possano visualizzare testo alternativo in modo condizionale.
- Funziona con Post Types Order e altri popolari plugin per il riordino dei post.

Copia la pagina single.php dal tuo tema genitore e incollala nella directory del tuo Child-theme. Apri il file single.php dalla directory del child-theme e aggiungi il seguente codice alla fine del file [prima di get_footer(); ]
<?php
$post_id = $post->ID; // Ottieni l'ID del post corrente
$cat = get_the_category();
$current_cat_id = $cat[0]->cat_ID; // Ottieni l'ID della categoria corrente
$args = array('category'=>$current_cat_id,'orderby'=>'post_date','order'=> 'DESC');
$posts = get_posts($args);
// Ottieni gli ID dei post recuperati dalla funzione get_posts
$ids = array();
foreach ($posts as $thepost) {
$ids[] = $thepost->ID;
}
// Ottieni e mostra il link al post precedente e successivo nella stessa categoria
$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> Precedente</a> <?php } ?>
<?php if (!empty($next_post)){ ?> <a class="next-post" rel="next" href="<?php echo get_permalink($next_post) ?>">Successivo <span class="meta-icon"><i class="fa fa-angle-right fa-lg"></i></span> </a> <?php } ?>
Dopo aver aggiunto questo codice, incolla il seguente codice nel file Style.css del tuo child-theme per stilizzare i link:
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;
}
Fammi sapere i risultati :)
