Cela semble une question stupide. Mais, je ne peux pas le comprendre :(.
J'ai besoin d'afficher le bouton à la maison qui va à l'URL d'archive personnalisée de post_type (archive- {post_type} .php). Comment je fais ça?
Bonjour @Silent:
Il se trouve qu'il existe une fonction dans WordPress 3.1 qui fait exactement ce que vous voulez et qui s'appelle get_post_type_archive_link()
; voici comment vous l'appelleriez (en supposant un type d'article personnalisé nommé 'product'
):
<a href="<?php echo get_post_type_archive_link('product'); ?>">Products</a>
Voici ma réponse précédente avant de découvrir que WordPress possédait bien une fonction intégrée pour ce cas d'utilisation.
Sauf si j'ai oublié quelque chose dans le code source principal de WordPress 3.1, je pense que vous recherchez une fonction telle que get_archive_link()
que vous pourriez appeler comme ceci (en supposant un type d'article personnalisé nommé 'product'
):
<a href="<?php echo get_archive_link('product'); ?>">Products</a>
Et voici le code source que vous pouvez placer dans le fichier function.php
de votre thème ou dans un fichier .php
pour un plug-in que vous écrivez peut-être:
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 );
}
}
En fait, je travaillais sur cette logique exacte ce week-end, même si je ne suis pas encore sûr à 100% que l'ordre de la logique est génériquement correct dans tous les cas d'utilisation que WordPress pourrait voir, bien que cela fonctionnera probablement pour un site spécifique.
C’est aussi une bonne chose de suggérer d’être ajouté à WordPress viatrac, ce que je pense faire plus tard dans la soirée.
lorsque vous enregistrez le type de publication, vous pouvez passer une chaîne slug avec le paramètre "has_archive" et vous assurer de définir également rewrite sur true ou sur un tableau, mais pas sur false, puis l'URL de votre archive CPT serait http: //www.YOURDOMAIN. .com/has_archive_slug par exemple
si vous définissez dans votre register_post_type par exemple:
$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 l'URL de votre archive est: http://www.YOURDOMAIN.com/products/