L'utilizzo di get_adjacent_post
, previous_post_link
e next_post_link
sembra solo riconoscere elementi appartenenti allo stesso tipo di post. Dato che ho 2 tipi di post personalizzati c'è un modo per collegare tra tutti i tipi di post precedenti e successivi?Imposta get_adjacent_post() per i tipi di post personalizzati
8
A
risposta
23
Sembra che questa domanda sia stata fatta in tutto il sito internet senza una risposta precisa. Così ho creato la mia funzione dall'originale get_adjacent_post
e personalizzata per chiunque altro ne avesse bisogno.
La funzione
Goccia questo nella vostra functions.php
/*
* Replacement for get_adjacent_post()
*
* This supports only the custom post types you identify and does not
* look at categories anymore. This allows you to go from one custom post type
* to another which was not possible with the default get_adjacent_post().
* Orig: wp-includes/link-template.php
*
* @param string $direction: Can be either 'prev' or 'next'
* @param multi $post_types: Can be a string or an array of strings
*/
function mod_get_adjacent_post($direction = 'prev', $post_types = 'post') {
global $post, $wpdb;
if(empty($post)) return NULL;
if(!$post_types) return NULL;
if(is_array($post_types)){
$txt = '';
for($i = 0; $i <= count($post_types) - 1; $i++){
$txt .= "'".$post_types[$i]."'";
if($i != count($post_types) - 1) $txt .= ', ';
}
$post_types = $txt;
}
$current_post_date = $post->post_date;
$join = '';
$in_same_cat = FALSE;
$excluded_categories = '';
$adjacent = $direction == 'prev' ? 'previous' : 'next';
$op = $direction == 'prev' ? '<' : '>';
$order = $direction == 'prev' ? 'DESC' : 'ASC';
$join = apply_filters("get_{$adjacent}_post_join", $join, $in_same_cat, $excluded_categories);
$where = apply_filters("get_{$adjacent}_post_where", $wpdb->prepare("WHERE p.post_date $op %s AND p.post_type IN({$post_types}) AND p.post_status = 'publish'", $current_post_date), $in_same_cat, $excluded_categories);
$sort = apply_filters("get_{$adjacent}_post_sort", "ORDER BY p.post_date $order LIMIT 1");
$query = "SELECT p.* FROM $wpdb->posts AS p $join $where $sort";
$query_key = 'adjacent_post_' . md5($query);
$result = wp_cache_get($query_key, 'counts');
if (false !== $result)
return $result;
$result = $wpdb->get_row("SELECT p.* FROM $wpdb->posts AS p $join $where $sort");
if (null === $result)
$result = '';
wp_cache_set($query_key, $result, 'counts');
return $result;
}
Uso
uso di base
// Custom post types can be array() or string
$post1 = mod_get_adjacent_post('prev', array('post', 'custom1', 'custom2'));
$post2 = mod_get_adjacent_post('next', 'custom2');
Per la creazione di prev/seguente link
<?php
$prev = mod_get_adjacent_post('prev', array('post', 'custom1', 'custom2'));
$next = mod_get_adjacent_post('next', array('post', 'custom1', 'custom2'));
?>
<?php if($prev) : ?>
<a href="<?php echo get_permalink($prev->ID)?>">« Go back in time</a>
<?php endif; ?>
<?php if($next) : ?>
<a href="<?php echo get_permalink($next->ID)?>">Next: <?php echo $next->post_title; ?> »</a>
<?php endif; ?>
È ancora possibile modificare il codice se si vuole ancora per includere le variabili $in_same_cat
e $excluded_categories
, ma se lo fai, allora vi consiglio di utilizzare get_adjacent_post
invece dato che è quello che serve.
Problemi correlati
- 1. come visualizzare i dati personalizzati da tipi di post personalizzati
- 2. Crea modello per i tipi di post personalizzati in Wordpress
- 3. Categorie di tipi di post personalizzati Wordpress
- 4. Tipi di post personalizzati e categorie
- 5. Categorie separate per i tipi di post
- 6. Estendere core.logic per i tipi personalizzati
- 7. Come visualizzare l'elenco dei tipi di post personalizzati di WordPress?
- 8. Wordpress Sticky Posts con tipi di post personalizzati
- 9. Tipo di tipi personalizzati di trasmissione per tipi di base
- 10. Google chrome supporta i tipi MIME personalizzati?
- 11. Tipi di dati personalizzati SQLITE?
- 12. WordPress Tipi di messaggi personalizzati genitore/figlio
- 13. NSCoder e tipi personalizzati
- 14. WP_Query - più tipi di post personalizzati e ordinamento per meta personalizzata
- 15. Come estendere std :: tr1 :: hash per i tipi personalizzati?
- 16. Definizione della conversione esplicita per i tipi personalizzati in Swift
- 17. Come gruppo per i tipi personalizzati con LINQ
- 18. Come implementare al meglio Equals per i tipi personalizzati?
- 19. Aggiungi tipi di reclamo personalizzati
- 20. Tipi personalizzati variabili Lua
- 21. tipi di messaggi Gathering personalizzati tramite tag
- 22. Puoi sovraccaricare Sum per aggiungere tipi personalizzati
- 23. Gerarchia di tipi di post personalizzati Wordpress e evidenziazione del menu (current_page_parent)
- 24. Come supportare più tipi personalizzati?
- 25. Haskell: Tipi personalizzati con condizioni
- 26. Django 1.8, Tipi di utenti multipli personalizzati
- 27. Best practice per la creazione di tipi di attestazione personalizzati
- 28. tipi di dati personalizzati in array NumPy
- 29. È possibile utilizzare i tipi personalizzati nella dichiarazione della porta?
- 30. Wordpress Tipi di post personalizzati non vengono visualizzati nel menu della barra laterale sinistra dell'amministratore
Molto ben fatto, grazie! Se da utilizzare su qualsiasi tipo di pagina, si può facilmente aggiungere un terzo (o addirittura, primo) parametro $ post per passare il tipo di post personalizzato direttamente alla funzione (non dimenticare di rimuovere il post $ globale quindi). – JosFabre
ha bisogno di un aggiornamento per gestire la variabile '$ post_type' stringa: if (is_array ($ post_types)) { $ txt = ''; for ($ i = 0; $ i <= count ($ post_types) - 1; $ i ++) { $ txt. = "'". $ Post_types [$ i]. "'"; if ($ i! = Count ($ post_types) - 1) $ txt. = ','; } $ post_types = $ txt; } else { \t $ post_types = "'" .trim ($ post_types, "'"). "'"; } – emc
come possiamo modificare il codice per lavorare per i post nella stessa categoria? – CyberJunkie