2011-11-10 3 views
3

なんらかの理由で、WP_Queryに投稿のカスタムフィールド値を返すことができません。投稿のサムネイルはget_the_post_thumbnail($post->ID, array(50,50))で取得できますが、get_post_meta($post->ID, $key, true)を使用してカスタムフィールドデータを取得することはできません。WordPress WP_Queryはカスタムフィールドのポストメタを返すことができますか?

私が何をしようとしているの機能縮小版:

<?php 
    $keys = array('Show Date','Birth Year','Origin'); 

    echo '<table>'; 
    echo '<tr><th>Title</th>'; 
    foreach($keys as $key) { 
     echo '<th>' . $key . '<th>'; 
    } 
    echo '</tr>'; 

    $myquery = new WP_Query('post_type=post'); 
    if($myquery->have_posts()) : while($myquery->have_posts()) : $myquery->the_post(); 

     $title = get_the_title(); 
     echo '<tr><td>' . $title . '</td>'; 

     $values = array(); 
     foreach($keys as $key) { 
      $values[] = get_post_meta($post->ID, $key, true); 
     } 
     foreach($values as $value) { 
      echo '<td>'; 
      echo $value; 
      echo '</td>'; 
     } 
     echo '</tr>'; 

    endwhile; endif; 

    echo '</table>'; 
?> 

も利用できるここに:でも、削除されたすべての非本質的なコードと
http://pastebin.com/at8S2THs

、私はこの仕事をすることはできません。クエリーにmeta_keymeta_valueのようなパラメータを使用して結果を絞り込むことができますが、指定したキーが存在する場合はすべての値を各ポストに表示したいだけです。

任意の助けをいただければ幸いです...

** SOLUTION FOUND **ただ、ループの開始後global $post;を追加するために必要な

。解決策を提供するWPサポートフォーラムの@Kimikazeに感謝します!

答えて

0

私がワードプレスで必要とするデータが見つからない場合は、グローバル$ポストオブジェクトを画面に印刷すると、データがページに表示されているかどうかがわかります。

Global $post; 
echo "<pre>"; 
print_r($post); 
echo "</pre>"; 

すべてのヘルパーメソッドまたは「フック」は、通常、この(または別の)グローバルオブジェクトとやりとりするだけです。あなたが探しているデータのための$ポスト(と多分あなたの$値の配列)でこの出力を確認し、それがあります場合は、直接それにちょうどrefferは、例えば記事のタイトル

$post->title 

別のような思考、get_post_meta()の3番目のパラメータは、trueに設定されている場合は単一の文字列を返します。falseに設定されている場合はどうなりますか?

+0

あなたのお返事ありがとうございます。 $ postオブジェクトを印刷すると、疑わしいものが確認されたので便利でした。カスタムフィールドデータがWP_Queryによって返されていません。私はカスタムMySQLクエリを構築する必要があります...あなたの質問に答えるために、3番目のパラメータがfalseに設定されても、何も返されません。各カスタムフィールドにはいずれにしても1つの値しか含まれていないので、そこに配列は必要ありません。 –

+0

もう1つのカップルの考え:画面に$ postを印刷するときに、ページの異なる領域で行ってみると、欠落しているデータだけを抜き出して、 $ postの内容は新しいクエリ結果で上書きされました。 また、カスタムクエリを書き込むために、setup_postdata()メソッドと組み合わせて$ wpdbオブジェクトについての人の意見をチェックしてください。 – DeviousBlue

0

私は、あなたがメタキーとして使用している値と関係があると推測しています。 get_post_meta()でデータを取得するには、meta_keyの値が大文字またはスペースを処理しないため、おそらく 'show_date'、 'birth_year'、および 'origin'の実際のmeta_key値を渡したいと思うでしょう。あなたは$キー配列を設定しているそれらの値に変更してみてください:

$keys = array('show_date','birth_year','origin'); 

問題が解決しない場合は、それが実際のmeta_key値を確認する(wp_postmetaテーブルの)データベースをチェックインする価値があるかもしれません。

+0

いい考えですが、ダイスはありません。 lowercase_underscore形式を使用しても違いはありません。メタデータは間違いなく存在します。実際には、 '$ artist_birth = get_post_meta($ post-> ID、 'Birth Year'、true)のようなコードを使って、1つのポストページテンプレートで呼び出すことができます。 –

+0

データベースにメタデータを追加してpastebinからコードを実行すると、期待される結果が得られます(つまり、一連のメタデータが表示されます)。メタデータを追加するコードを貼り付けることができますか?また、WP内で実行されているこのコードはどこにインストールされていますか? – brandwaffle

+0

このプラグインをひどく試してみてください。http://mynewsitepreview.com/plugins/sorttablepost_v4.0beta.zip - このプラグインの最新バージョンにカスタムフィールドのサポートを追加しようとしています。 –

関連する問題