web-dev-qa-db-ja.com

ショートコード内のカスタム投稿タイプループ

なぜこれがうまくいかないのか、私は本当に迷います。

カスタム投稿タイプ+分類法に関するクエリを表示するためにショートコードを使用しています。これはそのセグメントです。

        // - arguments -
        $args = array(
            'post_type' => 'customposttypename',
            'taxonomyname' => 'alpha',
            'post_status' => 'publish',
        );

        // - query -
        $my_query = null;
        $my_query = new WP_query($args);
        while ($my_query->have_posts()) : $my_query->the_post();

        // - variables -
        $custom = get_post_custom($post->ID);

...そして変数は動き続けます。ただし、ループを実行すると、デフォルトの投稿コンテンツ(タイトル、コンテンツなど)はすべて表示されますが、カスタム投稿タイプのコンテンツは表示されず、上の最後の行(145行目)で停止します。すなわち$custom = get_post_custom($post->ID);は私に次のエラーを出しています..

通知:未定義の変数:145行目のC:\ xampplite ...\functions.phpに投稿してください

Notice:行145のC:\ xampplite ...\functions.phpで、オブジェクト以外のプロパティを取得しようとしています

それからここにそれは私にタイトル、内容、等を普通に示しています(ただカスタムポストタイプの内容はありません)

「私は間違っていますか?

ありがとうございました!

1
Noel Tock

Notice:非オブジェクトのプロパティを取得しようとしています

$postはあなたの関数の中にスコープがないことを暗示するでしょう。ここでの簡単な解決策の1つは、$postをグローバル化して範囲を確保し、効果的にエラーを修正することです。

ただし、クエリを作成するか、ループを実行してthe_postメソッドを呼び出すと、WordPress テンプレートタグ にアクセスできます。

そうではなく、グローバルステートメントを使用して、get_the_ID()を呼び出すことができます。これには、もちろん、指定された投稿のID(つまり、ループのその繰り返しに対する現在の投稿)を含める必要があります。

読むようにあなたの問題の行を更新してください..

$custom = get_post_custom( get_the_ID() );

そしてそれは問題を解決するでしょう、もちろん関数の中で$postスコープを与えることはうまくいくであろうことに注意すること、それはただ詩的に見えないでしょう!..;)

質問者へのちょっとした質問、あなたがget_post_customを呼び出すときに何を探していますか、あなたはいくつかの特定のメタキーをチェックしていますか、あるいはあなたが見つけたすべてのメタアイテムをループしますか?そこに改善の余地があるかもしれません(興味があるなら)。

3
t31os