web-dev-qa-db-ja.com

post.phpのget_post_type

Post.phpページでpost_typeを取得するにはどうすればいいですか?

私はユーザーが新しい投稿タイプを作成できるようにするプラグインに取り組んでいます。それから新しい投稿タイプでは、メタボックスがいくつかのオプションで追加されます。追加されるメタボックスは、新しい投稿タイプの作成中に設定された特定のパラメータに基づいています。

だから私はpost_typeが何であるかをチェックする必要があり、それが特定のpost_typeであれば、特定のメタボックスが投稿編集ページに追加されます。

私はそれを使用して新しいページ(post-new.php)を追加するためにちょうどうまく働いています:

$ post_type = $ _GET ['post_type'];

しかし、これは新しく作成された投稿タイプ内の既存の投稿を編集するときにpost.phpページの投稿タイプを取得するようには見えません。

私も試してみました:

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

そして

$ post_type = $ post-> post_type;

何か案は?

編集する

以下のコメントからのコード例:

<?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); 
} 
?>

編集する

このコードはpost-new.phpファイルで機能します。

しかしpost.phpファイルにはありません。しかし、名前パラメータを手動で入力すると、post.phpファイルで機能します。

Post.phpページのメタボックスではget_post_type($post->ID);が無視されているので、投稿タイプの名前で投稿からデータを取得するのではなく、最新の投稿からデータを取得しています。名前パラメータ。

編集する

global $post;を使用した場合、post.phpページのWP_Queryからデータは取得されません。

global $post;がない場合、最新の投稿はWP_Queryから取得されます。

手動でnameパラメータを入力すると、post.phpページでうまく動作します。

コードは、そのまま、post-new.phpページで問題なく機能します。

Post.typeがどのように参照されているかを見るためにpost.phpページのソースコードをブラウズしてみましたが、運が悪かったです。 。投稿タイプを取得するために使用するものを設定する。

1
Jason Bahl

$postをグローバル化して投稿タイプを取得できないのはなぜですか?例えば.

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

このコードをどのような状況で配置しますか?メタボックスコールバックで、または何?

(また:なぜ$_GET dataを使っているのですか?)

1
Chip Bennett

ループをに変更したとき

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

の代わりに

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

すべてが働き始めました。

何らかの理由で、投稿タイプは「while」ループ内ではエコーされず、「foreach」ループ内でエコーされます。

0
Jason Bahl