it-roy-ru.com

Могу ли я запросить пользовательские метаданные через WP_Query

Хорошо, мой вопрос немного сложен, поэтому я постараюсь дать общее объяснение, а затем вдаваться в подробности.

Я использую WordPress 3.4.2 и использую WCK Post Type Creator и WCK Custom Fields Creator для создания своего пользовательского типа записи и пользовательских полей.

Я пытаюсь запросить сообщения из пользовательского типа сообщения "business", к которому прикреплено специальное поле "special". Моя проблема в том, что я хотел бы быть более конкретным и получать только определенный тип специальных (который устанавливается в плагине Custom Fields Creator), но я не знаю, смогу ли я сделать это, используя аргумент meta_query для WP_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' должно проверять на значения с аргументом meta_query для WP_Query.

Если я печатаю $ special в foreach ($ specials как $ 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
        )
)

Так что я не знаю, как добраться до [type-of-special] ключа, чтобы проверить его значение через 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