Массив ключей WordPress метаданных - PullRequest
5 голосов
/ 13 мая 2011

Я использую функцию: http://www.farinspace.com/how-to-create-custom-wordpress-meta-box/ для создания некоторых пользовательских мета-блоков.

Мой WP_Query выглядит так:

            $args = array(
                'post_type' => 'testimonials',
                'post_status' => 'publish',
                'orderby' => checked((bool) $instance['testimonials_random'], true, false) ? 'rand' : 'id',
                'posts_per_page' => $testimonials_number,
                'paged' => get_query_var('page'),
                'meta_query' => array(
                    array(
                        'key' => '_my_meta["addtosidebar"]',
                        'value' => 'on',
                        'compare' => 'LIKE'
                    )
                )
            );
            $query = new WP_Query($args);

Флажок ввода addtosidebar выглядит следующим образом: <input type="checkbox" name="_my_meta[addtosidebar]" <?php checked((bool) $meta['addtosidebar'], true); ?> class="checkbox" />

У вас есть идеи, как мне получить доступ к ключу в meta_query?

Спасибо, Cip

Ответы [ 2 ]

4 голосов
/ 13 мая 2011

Я не думаю, что вы можете сделать это, так как в руководстве, которое вы связали с мета значениями, они хранятся в массиве, который затем сериализуется в одно поле базы данных.Таким образом, вы получите что-то подобное в базе данных: a:4:{s:12:"addtosidebar";s:2:"on";s:3:"foo";s:3:"bar";}.

Следующий мета-запрос может работать, но было бы лучше использовать отдельное настраиваемое поле.

'meta_query' => array(
  array(
    'key' => '_my_meta',
    'value' => 's:12:"addtosidebar";s:2:"on";',
    'compare' => 'LIKE'
  )
)
1 голос
/ 14 апреля 2013
it was like this: 'meta_query' => array( array( 'key' => '_my_meta', 'value' => 'addtosidebar', 'compare' => 'LIKE' ) ) – CIPPO Design

Это сработало для меня, я думаю, это должно быть добавлено в качестве ответа.Одна вещь, как заметил Ричард, запись в базе данных сериализуется.Таким образом, «LIKE» будет просто искать «значение» «addtosidebar» в этой строке.

Например, если у меня есть мета-массив, подобный этому:

Post 1:

$myMeta = array('medium' => 'video', 'sometext' => 'a beautiful video')

Post 2:

$myMeta = array ('medium' => 'image', 'sometext' => 'a beautiful image of a video button')

Это означает, чтоиспользование сравнения 'LIKE' для 'video' вернет оба, поскольку видео также найдено в значении 'sometext' во втором посте.Чтобы прекратить это, я должен был добавить кавычки, чтобы ограничить это:

$query->set( 'meta_query' , array(
                              array(
                                'key' => 'blogInfo',
                                'value' => '"video"',
                                'compare' => 'LIKE'
                            )
                            ));

Надеюсь, что это кому-то поможет, и что мне удастся разобраться.

ps: Извините, я не привет-профиль достаточно, чтобы просто прокомментировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...