Cela semble être une question stupide. Mais, je ne peux pas le comprendre :(.
J'ai besoin d'afficher un bouton à la maison qui va à l'URL d'archive de post_type personnalisé (archive- {post_type} .php). Comment je fais ça?
Cela semble être une question stupide. Mais, je ne peux pas le comprendre :(.
J'ai besoin d'afficher un bouton à la maison qui va à l'URL d'archive de post_type personnalisé (archive- {post_type} .php). Comment je fais ça?
Réponses:
Salut @ Silent:
Il s'avère qu'il y a une fonction dans WordPress 3.1 qui fait exactement ce que vous voulez et elle est nommée get_post_type_archive_link()
; voici comment vous l'appeleriez (en supposant un type de publication personnalisé nommé 'product'
):
<a href="<?php echo get_post_type_archive_link('product'); ?>">Products</a>
Ci-dessous est ma réponse précédente avant de découvrir que WordPress avait en effet une fonction intégrée pour ce cas d'utilisation.
À moins d'avoir oublié quelque chose dans le code source principal de WordPress 3.1, je pense que vous recherchez une fonction comme celle get_archive_link()
que vous pourriez appeler comme ceci (en supposant un type de publication personnalisé nommé 'product'
):
<a href="<?php echo get_archive_link('product'); ?>">Products</a>
Et voici le code source que vous pouvez placer dans le function.php
fichier de votre thème ou dans un .php
fichier pour un plugin que vous pourriez écrire:
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 );
}
}
Je travaillais en fait sur cette logique exacte au cours du week-end, bien que je ne sois pas encore sûr à 100% que l'ordre de la logique est générique dans tous les cas d'utilisation que WordPress pourrait voir, bien qu'il fonctionnera probablement pour n'importe quel site spécifique.
C'est aussi une bonne chose à suggérer d'être ajouté à WordPress via trac, ce que je pense que je ferai plus tard ce soir.
lorsque vous enregistrez le type de publication, vous pouvez passer une chaîne en tant que slug avec le paramètre "has_archive" et assurez-vous que vous définissez également la réécriture sur true ou un tableau mais pas false, puis l'URL de votre archive CPT serait http://www.YOURDOMAIN.com / has_archive_slug par exemple
si vous définissez par exemple votre 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);
alors votre URL unique est: http://www.YOURDOMAIN.com/product/postName et votre URL d'archive est: http://www.YOURDOMAIN.com/products/
has_archive
c'était un booléen, mais maintenant je sais qu'on peut lui donner une chaîne, donc mon type de message personnalisé recipe
peut avoir un slug pluriel/recipes/
'rewrite'
n'accepte qu'une valeur booléenne ou tableau. Plutôt que celui que 'rewrite' => 'product',
vous avez énuméré, il devrait plutôt l'être 'rewrite' => array( 'slug' => 'product' ),
.
yoursite.com/type-slug
sauf si vous la définissez explicitement sur autre chose, par exemple.yoursite.com/some-other-url
..