web-dev-qa-db-fra.com

get_post_type sur post.php

Comment puis-je obtenir le post_type sur la page post.php?

Je travaille sur un plugin qui permet aux utilisateurs de créer un nouveau type de message. Ensuite, dans le nouveau type de message, une méta-boîte sera ajoutée avec quelques options. La méta-boîte à ajouter dépend de certains paramètres définis lors de la création du nouveau type de publication.

Donc, je dois vérifier ce qu'est le post_type, et s'il s'agit d'un certain post_type, une certaine méta-boîte sera ajoutée à la page de post-edit.

Je l'ai fonctionne très bien pour ajouter une nouvelle page (post-new.php) en utilisant:

$ post_type = $ _GET ['post_type'];

Mais cela ne semble pas avoir le type de publication sur la page post.php lors de la modification d'une publication existante dans le type de publication nouvellement créé.

J'ai aussi essayé:

$ post_type = get_post_type ($ post-> ID);

et

$ post_type = $ post-> post_type;

Des idées?

Modifier

Exemple de code de commentaire ci-dessous:

<?php 
$post_type = get_post_type($post->ID); 
$custom_query = new WP_Query(array( 'post_type' => 'custom-types', 'name' => ''.$post_type.'', 'posts_per_page' => 1 )); 
// STARTS THE LOOP 
while ($custom_query->have_posts()){ 
    $custom_query->the_post(); 
    // GETS POST META VARIABLES 
    global $post; 
    $title = get_the_title(); 
    $option_a = get_post_meta($post->ID, '_option_a', true); 
    $option_b = get_post_meta($post->ID, '_option_b', true); 
} 
?>

Modifier

Ce code fonctionne sur le fichier post-new.php:

Mais pas sur le fichier post.php. Cependant, lorsque je remplis le paramètre name manuellement, cela fonctionne sur le fichier post.php.

La get_post_type($post->ID); est ignorée dans les boîtes de méta de la page post.php. Ainsi, au lieu d'extraire des données de l'article avec le nom du type d'article, il s'agit simplement d'extraire des données de l'article le plus récent, comme si j'avais exécuté la requête sans le Nom du paramètre du tout.

Modifier

Lorsque j'utilise global $post;, aucune donnée n'est extraite de WP_Query sur la page post.php.

Sans global $post;, la publication la plus récente est extraite de WP_Query.

Lorsque je saisis manuellement le paramètre name, cela fonctionne correctement sur la page post.php.

Le code, tel quel, fonctionne bien sur la page post-new.php.

J'ai essayé de parcourir le code source de la page post.php pour voir comment post_type y est référencé, mais sans succès. . . Déterminer quoi utiliser pour obtenir le type de message.

1
Jason Bahl

Pourquoi ne pas simplement globaliser $post et ensuite obtenir le type de message? par exemple.

<?php
global $post;
$post_type = get_post_type( $post->ID );
?>

Dans quel contexte placez-vous ce code? Dans un rappel de métabox, ou quoi?

(Aussi: pourquoi utilisez-vous les données $_GET?)

1
Chip Bennett

Quand j'ai changé la boucle en

<?php 
foreach ($custom_query as $custom) {
?>

Au lieu de

<?php 
while ($defaulttheme_query->have_posts()){
    $defaulttheme_query->the_post();    
?>

Tout a commencé à fonctionner.

Pour une raison quelconque, le type de publication ne sera pas répercuté dans la boucle "while" mais dans la boucle "foreach".

0
Jason Bahl