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

4

En mi sitio web tengo tres tipos de publicaciones personalizadas: scripts, escenas y complementos. Al visitar la página de archivo de un solo tipo de publicación (es decir, al ir a mysite.com/plugins), ve correctamente todas las publicaciones de ese tipo.

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

Probé 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, ya que estoy en una página de archivo, la publicación $ no es correcta.

P.S. Sé que puedo crear archive-plugins.php para el archivo de complementos. Desafortunadamente, he instalado un tema que, por lo que sé, me lo impide. Así que esta no es una opción.

    
pregunta pek 17.03.2013 - 20:02

4 respuestas

5

Hay varias formas de hacer esto. Poner:

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

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

$wp_query->query tendrá el componente post_type para los tipos de publicación personalizados. Eso no estará allí para los tipos de publicación post . get_queried_object devolverá un poco de datos para los tipos de publicación personalizados, pero nulo para el tipo de publicación post .

También hay algunas etiquetas de plantilla relacionadas que pueden ayudar. is_post_type_archive viene a la mente.

Entre ellos debe tener la información que necesita para armar la lógica que necesite. No está claro si pregunta cuál es el resultado final, por lo que realmente no puedo escribir mucho.

Ya que nombraste específicamente archive.php , eso es lo que probé. Es posible que necesites un código diferente para alguna otra plantilla, especialmente con get_queried_object que devuelve información muy diferente según el contexto.

    
respondido por el s_ha_dum 17.03.2013 - 20:36
1

Aquí está la función que deseas:

/**
 * Get the current archive post type name (e.g: post, page, product).
 *
 * @return String|Boolean  The archive post type name or false if not in an archive page.
 */
function get_archive_post_type() {
    return is_archive() ? get_queried_object()->name : false;
}
    
respondido por el Nabil Kadimi 07.12.2017 - 01:26
0

¡Ninguna otra opción agradable en lugar de crear plantillas!

O incluir un archivo de plantilla cuando se accede al archivo de tipo de publicación personalizado (según su URL).

Ver más enlaces para más información:

enlace

wordpress: cargue una plantilla basada en el URI

enlace

    
respondido por el revo 17.03.2013 - 20:57
0
die(var_dump(get_taxonomy(get_queried_object()->taxonomy)->object_type));

Creo que esa es la respuesta a tu pregunta.

¡¡Feliz codificación !!!

    
respondido por el Vũ Trọng Quang 21.10.2016 - 11:12

Lea otras preguntas en las etiquetas