¿Cómo obtener el tipo de entrada personalizada desde una página de archivo?

17 mar 2013, 21:02:10
Vistas: 46.1K
Votos: 9

En mi sitio web tengo tres tipos de entradas personalizadas: scripts, escenas y plugins. Cuando se visita la página de archivo de un solo tipo de entrada (es decir, yendo a mistitio.com/plugins) se ven correctamente todas las entradas de ese tipo.

En archive.php, ¿cómo puedo averiguar qué tipo de entrada personalizada está viendo el usuario en este momento?

Intenté lo siguiente:

<?php 
    global $post; 
    $postTypeLabels = get_post_type_labels(get_post_type_object($post)); 
    echo var_export($postTypeLabels); 
?>

Pero estoy obteniendo esto:

Post name is stdClass::__set_state(
  array( 'name' => 'Posts', 
    'singular_name' => 'Post', 
    'add_new' => 'Add New', 
    'add_new_item' => 'Add New Post', 
    'edit_item' => 'Edit Post', 
    'new_item' => 'New Post', 
    'view_item' => 'View Post', 
    'search_items' => 'Search Posts', 
    'not_found' => 'No posts found.', 
    'not_found_in_trash' => 'No posts found in Trash.', 
    'parent_item_colon' => NULL, 
    'all_items' => 'All Posts', 
    'menu_name' => 'Posts', 
    'name_admin_bar' => NULL, 
  )
)

Supongo que, como estoy en una página de archivo, la variable $post no es correcta.

P.D. Sé que puedo crear archive-plugins.php para el archivo de plugins. Desafortunadamente, he instalado un tema que, hasta donde sé, impide hacer eso. Así que esta no es una opción.

0
Todas las respuestas a la pregunta 6
4
15

Existen varias formas de hacer esto. Coloca:

var_dump($wp_query->query,get_queried_object()); die;

En tu archivo archive.php y deberías ver dos de esas formas.

$wp_query->query tendrá un componente post_type para tipos de entrada personalizados. Eso no estará presente para tipos de entrada post. get_queried_object devolverá bastante información para tipos de entrada personalizados pero null para el tipo de entrada post.

También existen algunas etiquetas de plantilla relacionadas que podrían ayudar. is_post_type_archive viene a la mente.

Entre estas opciones, deberías tener la información que necesitas para construir la lógica que requieras. No está claro en tu pregunta cuál es el resultado final esperado, así que no puedo escribir mucho al respecto.

Dado que mencionaste específicamente archive.php, es en lo que he probado. Puedes necesitar código diferente para alguna otra plantilla, especialmente con get_queried_object que devuelve información muy diferente dependiendo del contexto.

17 mar 2013 21:36:10
Comentarios

get_query_object() era lo que estaba buscando. Básicamente quería obtener el nombre del tipo de contenido personalizado, pero preferí mantener la pregunta más abierta para cualquier otra persona. Gracias.

pek pek
18 mar 2013 01:18:27

Básicamente, esto es lo que hice para obtener el nombre del tipo de contenido personalizado en archive.php: $qObj = get_queried_object(); echo $qObj->labels->name;

pek pek
18 mar 2013 01:19:25

Para cualquiera que pase por aquí: ten cuidado al usar get_queried_object(). Si is_post_type_archive() es verdadero pero también estás usando filtrado basado en taxonomías, el término de taxonomía tendrá prioridad. En este caso, get_queried_object() devolverá un objeto de término de taxonomía en lugar de un objeto de tipo de contenido, incluso cuando is_post_type_archive() sea verdadero.

Mark Mark
3 sept 2015 18:14:32

get_queried_object() devolverá varios objetos diferentes dependiendo del contexto.

s_ha_dum s_ha_dum
3 sept 2015 18:26:42
0
10

Aquí está la función que necesitas:

/**
 * Obtiene el nombre del tipo de post actual en un archivo (ej: post, page, product).
 *
 * @return String|Boolean  El nombre del tipo de post del archivo o false si no está en una página de archivo.
 */
function get_archive_post_type() {
    return is_archive() ? get_queried_object()->name : false;
}
7 dic 2017 02:26:25
0

Veo esto en algunos comentarios de la respuesta aceptada, pero quería dejar este punto claro para otros que lean rápidamente estas respuestas: El objeto global $wp_query es más confiable para obtener el tipo de publicación del archivo. Específicamente desde $wp_query->query['post_type'].

Puedes usar get_queried_object() pero tiene advertencias. Principalmente si tienes otros parámetros de consulta como términos de taxonomía. En ese caso, get_queried_object() devolverá un objeto WP_Term en lugar del tipo de publicación que probablemente estás buscando.

Así que si el archivo tiene una consulta limpia para un tipo de publicación, entonces get_queried_object() funcionará. Pero para mayor confiabilidad usa el objeto global $wp_query.

Aquí hay una función que puedes usar en tu tema para esto:

/*
* PROPÓSITO: Si hay cero resultados (u otros parámetros) en la consulta del archivo, get_post_type() no es confiable para saber cuál es el tipo de publicación del archivo. Esta función obtiene el tipo de publicación del objeto global $wp_query.
* PARÁMETROS: n/a
* RETORNA: boolean / string - el slug del tipo de publicación desde $wp_query, o false si no se encuentra.
* NOTAS:
*/
function jp_get_archive_post_type(){
    $post_type = false;

    global $wp_query;
    if( isset($wp_query->query['post_type']) ){
        $post_type = $wp_query->query['post_type'];
    }

    return $post_type;
}
29 oct 2020 16:50:00
1
die(var_dump(get_taxonomy(get_queried_object()->taxonomy)->object_type));

Creo que esa es la respuesta a tu pregunta.

¡Feliz programación!

21 oct 2016 12:12:28
Comentarios

Devuelve NULL, incluso lo probé en una página de archivo. No es bueno.

WordPress Mechanic WordPress Mechanic
7 dic 2016 12:17:46
3

¿Por qué no simplemente usar get_query_var('post_type')?

https://developer.wordpress.org/reference/functions/get_query_var/

10 feb 2021 14:46:08
Comentarios

Intenta agregar un poco más de información en tus respuestas, esto es más bien un comentario.

Tony Djukic Tony Djukic
10 feb 2021 21:26:47

Bueno, no hay más información. La pregunta es: En archive.php, ¿cómo puedo saber qué tipo de entrada personalizada está viendo el usuario en este momento? Con get_query_var('post_type') obtienes qué tipo de entrada personalizada está viendo el usuario en este momento

GantangPedia GantangPedia
11 feb 2021 05:05:12

Honestamente, esta debería ser la respuesta aceptada

MikeeeG MikeeeG
11 oct 2024 14:07:04
0

¡No hay otra opción mejor que crear una plantilla!

O incluir un archivo de plantilla cuando se accede al archivo de ese tipo de entrada personalizada (según su URL).

Consulta los siguientes enlaces para más información:

http://codex.wordpress.org/Function_Reference/load_template

wordpress - cargar una plantilla basada en la URI

http://www.mihaivalentin.com/wordpress-tutorial-load-the-template-you-want-with-template_redirect/

17 mar 2013 21:57:29