Come si visualizzano gli archivi di un tipo di posta personalizzato per anno e mese?
Come si visualizzano gli archivi di un tipo di posta personalizzato per anno e mese?
Risposte:
Si, puoi. Tutto ciò che serve è creare un filtro in wp_get_archives();
modo che accetti il post_type
parametro:
function my_custom_post_type_archive_where($where,$args){
$post_type = isset($args['post_type']) ? $args['post_type'] : 'post';
$where = "WHERE post_type = '$post_type' AND post_status = 'publish'";
return $where;
}
quindi chiama questo:
add_filter( 'getarchives_where','my_custom_post_type_archive_where',10,2);
Ogni volta che si desidera visualizzare l'archivio per tipo di post personalizzato, basta passare gli arg post_type:
$args = array(
'post_type' => 'your_custom_post_type',
'type' => 'monthly',
'echo' => 0
);
echo '<ul>'.wp_get_archives($args).'</ul>';
/%category%/%year%/%monthnum%/%postname%/
. Quindi, potrebbe essere possibile utilizzare un hook simile a quello sopra, per modificare i collegamenti per iniziare /%category%/
anziché solo la data.
mysite.com/2013/04
ma questo porta a un 404. Il tipo di post personalizzato è disponibile su: il mysite.com/cats
che mi fa pensare che mysite.com/cats/2013/04
sarebbe quello che dovrebbe essere il link, ma questo si risolve anche in un 404. Come si fa a far funzionare i link di archivio?
No, la linea ufficiale degli sviluppatori di Wordpress era che i tipi di post personalizzati non erano destinati a svolgere il normale lavoro dei normali post e che se hai bisogno di archivi di date, ecc., Allora non stai facendo le cose correttamente, e stai meglio usando i formati di post ecc.
I tipi di post personalizzati sono destinati ad applicazioni web ecc., Mentre fare qualcosa come impostare un tipo di post personalizzato che funge da blog secondario o parallelo con un nome diverso, ad esempio blog vs notizie, con le stesse capacità, non è ciò che la funzionalità era inteso e significherebbe altri problemi tecnici derivanti dalla sua attuazione.
Se insisti ancora su questo, e semplicemente usare tassonomie personalizzate e formati di post non è abbastanza, potresti aggiungere regole di riscrittura in funzioni.php e reindirizzare archivi anno / mese in determinati URL alla pagina di archivio dei post, quindi controllare la personalizzazione pubblica la pagina di archivio se hai specificato le variabili nelle regole di riscrittura e carica un modello diverso, assicurandoti nelle regole di riscrittura di impostare i valori appropriati.
MODIFICA -> mentre questa risposta funziona ancora per <WP4.4, poiché il supporto 4.4 per i tipi di posta personalizzati è ora incluso inwp_get_archives()
C'è finalmente una soluzione semplice, veloce e facile per gli archivi basati sulla data dei tipi di messaggi personalizzati in WordPress! Questo è stato un problema di vecchia data che è stato registrato qui nel WP Core Trac.
Deve ancora essere risolto, ma uno dei collaboratori di Trac ha pubblicato un semplice plug-in in GitHub che ti permetterà di avere archivi basati sulla data per i CPT.
Dopo aver installato questo plug-in o aver aggiunto manualmente il codice per le tue funzioni, dovresti utilizzare gli archivi per CPT in quanto tali:
<?php wp_get_archives_cpt( 'post_type=custom_post_type' ); ?>
Nota che questa nuova funzione wp_get_archives_cpt
funziona allo stesso modo dello standard, wp_get_archives
quindi puoi usare qualsiasi argomento normale che accetta. Tuttavia, aggiunge semplicemente la possibilità di essere in grado di aggiungere un argomento del nome del tipo di post personalizzato.
Scarsa reputazione per aggiungere questo alla risposta di taiken.
Tuttavia, ho voluto aggiungere che la sua risposta ha funzionato per me, tuttavia i collegamenti erano nel formato "localhost / date / 2010". Mentre avevo bisogno del formato "localhost / postslug / 2010". Sono stato in grado di risolvere questo problema utilizzando una sostituzione di stringa sull'output di wp_get_archives.
Quindi, a seconda di come sono impostati i permalink, questo codice risolverà il problema 404 e reindirizzerà i collegamenti alla struttura permalink personalizzata del tipo di post:
$yearly_archive = wp_get_archives(array( 'type' => 'yearly', 'post_type' => '<your post type name>', 'echo' => '0') );
$blog_url = get_bloginfo('url');
echo str_replace(($blog_url . '/date'), ($blog_url . '<your post type slug>'),$yearly_archive);
Non posso aggiungere al post di Takien, quindi ecco cosa ho finito per fare:
functions.php
add_action('init', 'my_year_archive_rewrites');
function my_year_archive_rewrites() {
add_rewrite_rule('resource/news/([0-9]{4})/page/?([0-9]{1,})/?', 'index.php?post_type=news&year=$matches[1]&paged=$matches[2]', 'top');
add_rewrite_rule('resource/news/([0-9]{4})/?', 'index.php?post_type=news&year=$matches[1]', 'top');
}
add_filter('getarchives_where', 'my_custom_post_type_archive_where', 10, 2);
function my_custom_post_type_archive_where($where,$args){
$post_type = isset($args['post_type']) ? $args['post_type'] : 'post';
return "WHERE post_type = '$post_type' AND post_status = 'publish'";
}
add_filter('year_link', 'my_year_link');
function my_year_link($link) {
global $wp_rewrite;
if(true) { // however you determine what archive you want
$link = str_replace($wp_rewrite->front, '/resource/news/', $link);
}
return $link;
}
Chiamata a wp_get_archives ()
wp_get_archives(array('post_type'=>'news', 'type'=>'yearly'));