web-dev-qa-db-fra.com

Comment obtenir le type de message personnalisé à partir d'une page d'archive?

Sur mon site Web, j'ai trois types de messages personnalisés: scripts, scènes et plugins. Lorsque vous visitez la page d’archive d’un seul type de message (c’est-à-dire en allant sur mysite.com/plugins), vous voyez correctement tous les messages de ce type.

Dans archive.php, comment puis-je savoir quel type de message personnalisé est actuellement examiné par l'utilisateur?

J'ai essayé ce qui suit:

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

Mais j'obtiens le ceci:

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

Je suppose que, puisque je suis dans une page d’archive, le $ post n’est pas correct.

P.S. Je sais que je peux créer archive-plugins.php pour l'archive des plugins. Malheureusement, j'ai installé un thème qui, autant que je sache, l'empêche un peu. Donc, ce n'est pas une option.

4
pek

Il y a plusieurs façons de le faire. Mettre:

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

Dans votre archive.php et vous devriez voir deux de ces façons.

$wp_query->query aura le composant post_type pour les types d'articles personnalisés. Ce ne sera pas là pour les types de poste post. get_queried_object renverra pas mal de données pour les types de publication personnalisés, mais NULL pour le type de publication post.

Il y a aussi des balises de modèles connexes qui pourraient aider. _ { is_post_type_archive vient à l'esprit.

Entre ceux-ci, vous devriez avoir les informations dont vous avez besoin pour mettre en place toute la logique dont vous avez besoin. La question que vous posez n’est pas claire de ce que le résultat final est supposé être, alors je ne peux pas vraiment écrire beaucoup.

Puisque vous avez spécifiquement nommé archive.php, c’est ce que j’ai testé. Vous aurez peut-être besoin d’un code différent pour un autre modèle, en particulier avec get_queried_object qui renvoie des informations très différentes en fonction du contexte.

7
s_ha_dum

Voici la fonction que vous voulez:

/**
 * 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;
}
1
Nabil Kadimi
die(var_dump(get_taxonomy(get_queried_object()->taxonomy)->object_type));

Je pense que c'est la réponse à votre question.

Bonne codage !!!

0
Vũ Trọng Quang

Aucune autre option intéressante plutôt que la fabrication de modèles!

Ou Y compris un fichier de modèle lors de l'accès à cette archive de type publication personnalisée (en fonction de son URL).

Voir les liens supplémentaires pour plus d'informations:

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

wordpress - charge un modèle basé sur l'URI

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

0
revo