Sembra una domanda stupida. Ma non riesco a capirlo :(.
Devo visualizzare il pulsante a casa che va all'URL dell'archivio post_type personalizzato (archive- {post_type} .php). Come lo faccio?
Sembra una domanda stupida. Ma non riesco a capirlo :(.
Devo visualizzare il pulsante a casa che va all'URL dell'archivio post_type personalizzato (archive- {post_type} .php). Come lo faccio?
Risposte:
Ciao @Silent:
Si scopre che c'è una funzione in WordPress 3.1 che fa esattamente quello che vuoi e che ha il nome get_post_type_archive_link()
; ecco come lo chiameresti (assumendo un tipo di post personalizzato chiamato 'product'
):
<a href="<?php echo get_post_type_archive_link('product'); ?>">Products</a>
Di seguito è la mia risposta precedente prima di scoprire che WordPress aveva effettivamente una funzione integrata per questo caso d'uso.
A meno che non abbia trascurato qualcosa nel codice sorgente principale per WordPress 3.1, penso che tu stia cercando una funzione come quella get_archive_link()
che potresti chiamare in questo modo (assumendo un tipo di post personalizzato chiamato 'product'
):
<a href="<?php echo get_archive_link('product'); ?>">Products</a>
Ed ecco il codice sorgente che puoi inserire nel function.php
file del tuo tema o in un .php
file per un plugin che potresti scrivere:
if (!function_exists('get_archive_link')) {
function get_archive_link( $post_type ) {
global $wp_post_types;
$archive_link = false;
if (isset($wp_post_types[$post_type])) {
$wp_post_type = $wp_post_types[$post_type];
if ($wp_post_type->publicly_queryable)
if ($wp_post_type->has_archive && $wp_post_type->has_archive!==true)
$slug = $wp_post_type->has_archive;
else if (isset($wp_post_type->rewrite['slug']))
$slug = $wp_post_type->rewrite['slug'];
else
$slug = $post_type;
$archive_link = get_option( 'siteurl' ) . "/{$slug}/";
}
return apply_filters( 'archive_link', $archive_link, $post_type );
}
}
In realtà stavo lavorando su questa logica esatta durante il fine settimana, anche se non sono ancora sicuro al 100% dell'ordine della logica sia genericamente corretto in tutti i casi d'uso che WordPress potrebbe vedere, anche se probabilmente funzionerà per qualsiasi sito specifico.
Questa è anche un'ottima cosa da suggerire per essere aggiunta a WordPress tramite trac che penso che farò più tardi questa sera.
quando registri il tipo di post puoi passare una stringa come lumaca con il parametro "has_archive" e assicurarti di impostare anche la riscrittura su true o su un array ma non su false e quindi l'URL dell'archivio CPT sarà http://www.YOURDOMAIN.com / has_archive_slug per esempio
se si imposta ad esempio register_post_type:
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => 'product',
'capability_type' => 'post',
'has_archive' => 'products',
'hierarchical' => false,
'menu_position' => null,
'supports' => array('title','editor','author','thumbnail','excerpt','comments')
);
register_post_type('product',$args);
quindi il tuo unico URL è: http://www.YOURDOMAIN.com/product/postName e il tuo URL di archivio è: http://www.YOURDOMAIN.com/products/
has_archive
fosse un booleano, ma ora so che può essere data una stringa, quindi il mio tipo di post personalizzato recipe
può avere una lumaca plurale/recipes/
'rewrite'
accetta solo un valore booleano o array. Invece di quello 'rewrite' => 'product',
che hai elencato, dovrebbe essere invece 'rewrite' => array( 'slug' => 'product' ),
.
yoursite.com/type-slug
meno che non lo si imposti esplicitamente su qualcos'altro, ad es.yoursite.com/some-other-url
..