Parece una pregunta estúpida. Pero, no puedo entenderlo :(.
Necesito mostrar el botón en casa que va a la URL del archivo personalizado post_type (archive- {post_type} .php). ¿Cómo puedo hacer eso?
Parece una pregunta estúpida. Pero, no puedo entenderlo :(.
Necesito mostrar el botón en casa que va a la URL del archivo personalizado post_type (archive- {post_type} .php). ¿Cómo puedo hacer eso?
Respuestas:
Hola @Silent:
Resulta que hay una función en WordPress 3.1 que hace exactamente lo que quieres y se llama get_post_type_archive_link()
; así es como lo llamarías (suponiendo un tipo de publicación personalizado llamado 'product'
):
<a href="<?php echo get_post_type_archive_link('product'); ?>">Products</a>
A continuación se muestra mi respuesta anterior antes de descubrir que WordPress tenía una función incorporada para este caso de uso.
A menos que haya pasado por alto algo en el código fuente principal de WordPress 3.1, creo que está buscando una función como la get_archive_link()
que podría llamar de esta manera (suponiendo un tipo de publicación personalizado llamado 'product'
):
<a href="<?php echo get_archive_link('product'); ?>">Products</a>
Y aquí está el código fuente que puede colocar en el function.php
archivo de su tema o en un .php
archivo para un complemento que podría estar escribiendo:
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 );
}
}
De hecho, estuve trabajando en esta lógica exacta durante el fin de semana, aunque todavía no estoy 100% seguro de que el orden de la lógica sea genéricamente correcto en todos los casos de uso que WordPress pueda ver, aunque probablemente funcionará para cualquier sitio específico.
Esto también es una gran cosa para sugerir que se agregue a WordPress a través de trac, lo que creo que haré más tarde esta noche.
cuando registre el tipo de publicación, puede pasar una cadena como babosa con el parámetro "has_archive" y asegurarse de que también establece reescribir en verdadero o en una matriz, pero no en falso, y luego su URL de archivo CPT sería http://www.YOURDOMAIN.com / has_archive_slug por ejemplo
si configura en su register_post_type, por ejemplo:
$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);
entonces su url única es: http://www.YOURDOMAIN.com/product/postName y su url de archivo es: http://www.YOURDOMAIN.com/products/
has_archive
era un booleano, pero ahora sé que se le puede dar una cadena, por lo que mi tipo de publicación personalizada singular recipe
puede tener una babosa plural/recipes/
'rewrite'
solo acepta un valor booleano o de matriz. En lugar de lo 'rewrite' => 'product',
que ha enumerado, debería serlo 'rewrite' => array( 'slug' => 'product' ),
.
yoursite.com/type-slug
menos que la establezca explícitamente en otra cosa, por ejemplo.yoursite.com/some-other-url
..