¿Cómo descubro el slug de tipo de publicación personalizado cuando estoy en una página de archivo?
Por ejemplo, si /products/
dispara la archive-products.php
plantilla, ¿cómo (pragmáticamente) obtengo el mensaje tipo slug?
Gracias
custom-post-types
archives
custom-post-type-archives
Ben Everard
fuente
fuente
get_queried_object()
obtendría la misma información en menos movimientos.$posttype = get_query_var('post_type');
... He agregado una alternativa integral.Estoy usando esto fuera del bucle en la plantilla archive.php para obtener en qué archivo de publicación personalizada estoy.
Es una combinación de los métodos que tanto @toscho como @Rarst recomiendan:
Actualización: @majick señaló que esto solo funciona si ha configurado la babosa de reescritura para su CPT. Reescribir slug es opcional cuando se registra un CPT y el valor predeterminado es post_type si no está configurado.
fuente
Notice: Undefined property: stdClass::$rewrite in ***\wp-content\themes\marks-remarks\archive.php on line 4
Las respuestas se vuelven confusas. Y tal vez yo también, pero la pregunta principal es:
Si se refiere a la página de destino del archivo de tipo de publicación , y cuando
is_post_type_archive()
regresetrue
, desea la babosa que responde al archivo de visualización actual :- FIN DE RESPONDER LA PREGUNTA -
Explicación:
No puede confiar en la babosa registrada . Wordpress tampoco lo es. Por ejemplo, cuando se llama a
get_post_type_archive_link()
Wordpress, se comprueban las reglas de reescritura actuales para su instalación .Donde quiera que esté, dentro o fuera del bucle, archivo actual o publicación individual, invierta el
get_post_type_archive_link()
mecanismo. (Permalinks habilitados).Consideraciones:
Como se mencionó aquí, los tipos de publicación en la consulta actual pueden ser un
array
. Puede seguir adelante con sus intensiones con el filtro del tipo de publicación que busca, por ejemplo:o
Otro punto de vista:
El ejemplo de Woocommerce está registrado con el objeto de tipo de publicación 'productos' pero en realidad usa el nombre de la regla reescrita (tienda):
fuente
Debe tenerse en cuenta que si
has_archive
se establece en verdadero al registrar el Tipo de publicación personalizada, el archivo de tipo de publicación/cptslug/
se reescribirá internamente?post_type=cptslug
. Entonces esto también significaríais_post_type_archive()
que volverá a ser cierto.Desafortunadamente, cuando el slug de reescritura registrado es diferente al tipo de publicación, en realidad no está obteniendo el
post_type
. p.ej. si su tipo de publicación fuemyplugin_cars
y su slug de reescritura fuecars
y necesita obtenerlomyplugin_cars
, incluso esto (para evitar errores si el objeto consultado actual no es un tipo de publicación personalizado) aún fallará:Pero como
is_post_type_archive
es cierto, esto es más confiable:Pero espera, hay más ... resulta que con un poco de prueba tampoco es tan simple ... ¿y si estás en una página de archivo de taxonomía con múltiples tipos de publicaciones en la taxonomía ...? ¿O asignar etiquetas de publicación a un tipo de publicación personalizado que no sea la publicación? ¿O estás en una página de archivo de autor? Fecha de archivo de la página? ... o incluso tener un complejo
tax_query
ometa_query
paraWP_Query
?La única respuesta confiable (sin probar cada caso de archivo posible) es hacer un bucle de las publicaciones reales en la consulta ... Aquí está la función completa que se me ocurrió para trabajar tanto en páginas singulares como de archivo, y permitiéndole pasar opcionalmente un objeto de consulta personalizado (u objeto de publicación / ID de publicación para publicaciones singulares):
Esto devolverá de forma confiable (¿dije eso?) Una matriz de tipos de publicación si hay más de una presente, o una cadena con el tipo de publicación única si solo hay un tipo. Todo lo que necesitas hacer es:
Ejemplo de uso (solo por diversión):
Para ver el efecto, cambie el tipo de publicación personalizada en el código
post
y agregue unthumbtype-post
atributo de clase a las imágenes en miniatura de su publicación ...fuente
Puedes usar este código:
usa $ posttype_slug var lo que necesites
fuente
$queried_object->query_var['post_type'];
para que esto funcione ...?post_type=post
me quede vacío. comparar conget_query_var('post_type');
Puedes usar este código y este código funciona para mí,
fuente
fuente