Como obter o tipo de postagem personalizado de uma página de arquivo?

4

No meu site eu tenho três tipos de post personalizado: scripts, cenas e plugins. Ao visitar a página de arquivo de um único tipo de postagem (ou seja, acessando mysite.com/plugins), você verá corretamente todas as postagens desse tipo.

Em archive.php, como posso descobrir qual tipo de postagem personalizada o usuário está vendo agora?

Eu tentei o seguinte:

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

Mas estou recebendo o seguinte:

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, 
  )
)

Suponho que, como estou em uma página de arquivo, o $ post não está correto.

P.S. Eu sei que posso criar o arquivo-plugins.php para o arquivo de plugins. Infelizmente, eu instalei um tema que, até onde eu sei, meio que impede isso. Então isso não é uma opção.

    
por pek 17.03.2013 / 20:02

4 respostas

5

Existem várias maneiras de fazer isso. Coloque:

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

No seu archive.php , você verá duas dessas maneiras.

$wp_query->query terá o componente post_type para tipos de postagem personalizados. Isso não estará disponível para post post types. get_queried_object retornará um pouco de dados para tipos de postagem personalizados, mas nulos para post tipo de postagem.

Existem também algumas tags de modelos relacionados que podem ajudar. is_post_type_archive vem à mente.

Entre os que você deve ter as informações que você precisa para montar qualquer lógica que você precisa. Não está claro a partir de sua pergunta qual deve ser o resultado final, então não posso escrever muito.

Desde que você especificamente nomeou archive.php , foi isso que eu testei. Você pode precisar de código diferente para algum outro modelo, especialmente com get_queried_object que retorna informações muito diferentes dependendo do contexto.

    
por s_ha_dum 17.03.2013 / 20:36
1

Aqui está a função que você quer:

/**
 * 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;
}
    
por Nabil Kadimi 07.12.2017 / 01:26
0

Nenhuma outra boa opção em vez de criação de modelos!

Ou Incluindo um arquivo de modelo quando esse arquivo de tipo de postagem personalizado (de acordo com seu URL) é acessado.

Veja mais links para mais informações:

enlace

wordpress - carrega um template baseado no URI

enlace

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

Eu acho que essa é a resposta para sua pergunta.

Codificação feliz !!!

    
por Vũ Trọng Quang 21.10.2016 / 11:12