web-dev-qa-db-ja.com

WP_Queryを介してカスタムメタデータをクエリできますか

わかりました、私の質問は少し複雑なので、私は一般的な説明をして、その後詳細に入ります。

私はWordPress 3.4.2を実行しています、そして私は私のカスタム投稿タイプとカスタムフィールドを作成するためにWCKポストタイプクリエーターとWCKカスタムフィールドクリエーターを使用しています。

カスタムフィールド「special」がアタッチされているカスタム投稿タイプ「business」からの投稿をクエリしようとしています。私の問題は、より具体的にして、特定のタイプの特別なもの(Custom Fields Creatorプラグインで設定される)だけを取得したいということですが、WP_Queryのmeta_query引数を使用してこれを実行できるかどうか/方法がわかりません。

今持っているものは投稿タイプから投稿を取得しますが、その後get_post_meta()を使用してカスタムフィールドを見つけ、必要なテストを実行する必要があります。これが私が今持っているものです:

<?php   
$args = array(
    'post_type' => 'business',
    'meta_query'  => array(
                array(
                    'key' => 'specials'
                )
            )

    );
$loop = new WP_Query( $args );

while ( $loop->have_posts() ) : $loop->the_post(); 

$specials = get_post_meta( $post->ID, 'specials'); 

//Loop through array    of specials
foreach( $specials as $special){

    //Loop through each special
    foreach($special as $individual){

    //Check to see is there is a drink special
    if ($individual ['type-of-special'] == 'Drink' ) { 
        //Do stuff          

    }//indivdual
    }//special
} //specials

endwhile; ?>

ですから、ここで私がしていることは、投稿を取得してから、投稿ごとに「specials」メタデータを取得し、さまざまな配列をループ処理してそれがどんな種類のspecialであるかを確認します。私のWP_queryでより具体的にする方法はありますか?そのため、私は特定のタイプの特別な投稿のみを返しますか?

私が遭遇しているように思われる問題は、 'specials'カスタムフィールドがWP_Queryのためのmeta_query引数で値をチェックしなければならない多次元配列に十分に掘り下げる方法がわからないということです。

$ specialをforeachに($ specialを$ specialとして)出力すると、次のようになります。

Array
(
    [0] => Array
        (
            [type-of-special] => Drink
            [name-of-special] => Pumpkin Latte
            [price] => 2.00
            [day-of-the-week] => Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
        )
)

だから私はmeta_queryを通してその値をチェックするために[特殊なタイプ]キーに到達する方法を知りません。

私はこれがたくさんの情報であることを知っています、そして、私は本当にどんなフィードバックでも感謝して、この問題を解決するのを助けます。あなたが何かに関するより多くの情報や説明を必要とするならば、私に知らせてください。再度、感謝します!

6
yoxalld

通常はmeta_valueを指定するだけです(例:

 $args = array(
     'post_type' => 'business',
     'meta_query'  => array(
            array(
                'key' => 'specials',
                'value' => 'these are not the specials you are looking for - Obi Wan Kenobi'
            )
        )

);

ただし、あなたの投稿メタは実際にはデータ構造、つまり直列化されたPHP配列/オブジェクトなので、不可能です。

もっと読むことができます:

http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters

10
Tom J Nowell