Как я могу показывать сообщения, только если meta_value не пусто
-
-
Какую версию WordPress вы используете?Which version of WordPress are you using?
- 0
- 2011-03-02
- MikeSchinkel
-
@MikeSchinkel - Извини,Майк,не видел этого - это 3.1.@MikeSchinkel - Sorry Mike, didn't see this — It's 3.1.
- 0
- 2011-03-02
- robalan
-
WP 3.5 устраняет эту проблему и позволяет использовать другой метод сравнения.WP 3.5 fixes this problem and lets you use a different compare method
- 0
- 2017-12-06
- Erenor Paz
-
7 ответ
- голосов
-
- 2011-03-02
Привет,@Rob:
Причина,по которой вы не можете понять,как это сделать,заключается в том,что это невозможно,по крайней мере,без обращения к SQL.Попробуйте добавить в файл
functions.php
вашей темы следующее:add_filter('posts_where','yoursite_posts_where',10,2); function yoursite_posts_where($where,$query) { global $wpdb; $new_where = " TRIM(IFNULL({$wpdb->postmeta}.meta_value,''))<>'' "; if (empty($where)) $where = $new_where; else $where = "{$where} AND {$new_where}"; return $where; }
Если у вас есть настраиваемые поля
'featured_image'
с пустыми значениями,в приведенном выше примере они будут отфильтрованы.Если ваша проблема связана с чем-то другим,нам нужно будет посмотреть,как выглядят ваши данные,чтобы решить ее.Одна вещь,которая мне любопытна;как вы получили пустые значения для
'featured_image'
?Пользовательский интерфейс администратора в WordPress 3.1 делает все возможное,чтобы вы не вводили пустые значения. Надеюсь,это поможет.Hi @Rob:
The reason you can't figure out how to do it is because it's not possible, at least not without resorting to SQL. Try adding the following to your theme's
functions.php
file:add_filter('posts_where','yoursite_posts_where',10,2); function yoursite_posts_where($where,$query) { global $wpdb; $new_where = " TRIM(IFNULL({$wpdb->postmeta}.meta_value,''))<>'' "; if (empty($where)) $where = $new_where; else $where = "{$where} AND {$new_where}"; return $where; }
If you have custom
'featured_image'
fields with empty values the above will filter them out. If you problem is something else, we'll have to see what your data looks like to solve it.One thing I'm curious about; how did you get empty values for
'featured_image'
? The admin UI in WordPress 3.1 does its best to keep you from entering empty values. Hope this helps.-
Слава богу ... так это не только мы.Полагаю,это полезно знать.Спасибо,@MikeSchinkel - Они действительно должны поместить это в кодекс ... Жду объяснений.Благодаря!!Thank god... so it's not just us. That's good to know, I suppose. Thank you @MikeSchinkel - They really ought to put that in the codex... Looking forward to the explanation. Thanks!!
- 0
- 2011-03-02
- robalan
-
@Rob - Итак,я отказался от своих знаний о версии 3.0,а теперь я тестирую его в версии 3.1,и,похоже,это работает.У меня есть два сообщения и одно с настраиваемым полем «Feature_image»,и ваш запрос работает нормально.Что ты находишь?Есть ли вероятность,что ваш запрос загружает сообщения,у которых есть настраиваемое поле `Feature_image`,но где значение этого поля пусто?@Rob - So I was going off my 3.0 knowledge and now I'm testing it in 3.1 and it does seem to work. I have two posts and one with a `featured_image` custom field and your query works fine. What are you finding? Is there a chance your query is loading posts that do have a `featured_image` custom field but where the value for that field is empty?
- 0
- 2011-03-02
- MikeSchinkel
-
@MikeSchinkel - Без шуток?Да,это именно то,что он делает - в каждом посте есть поле Feature_image,просто они не все настроены.В любом случае он загружает все сообщения.@MikeSchinkel - No kidding? Yes, that's exactly what it's doing — every post has the featured_image field, they're just not all set. It's loading up all posts anyway.
- 0
- 2011-03-02
- robalan
-
@Rob - См. Мой обновленный ответ.@Rob - See my updated answer.
- 0
- 2011-03-02
- MikeSchinkel
-
@MikeSchinkel - Спасибо!Кажется,он работает отлично,после установкиpost_type в запросе.Пустые значения являются целенаправленными - не в каждом посте есть это рекомендуемое изображение (и я знаю о миниатюре поста,это просто не лучший вариант для этого сайта).Спасибо!@MikeSchinkel - Thank you! It seems to be working perfectly, after setting the post_type in the query also. The empty values are purposeful — not every post has this featured image (and I know about the post thumbnail, it's just not a good option for this site). Thanks so much!
- 0
- 2011-03-02
- robalan
-
@MikeSchinkel - я исправлюсь - он работает с запросами,которые я хотел,но вызывает 404 везде.Отдельные страницы сообщений,архивы ...: o \ Есть идеи?@MikeSchinkel - I stand corrected - it works on the queries that I wanted it to, but it's causing 404's everywhere else. Single post pages, archives... :o\ Any ideas?
- 0
- 2011-03-02
- robalan
-
В примере кода в вашем вопросе выше попробуйте поместить вызов `add_filter ()` непосредственно перед вызовом `WP_Query ()`,затем поместите `remove_filter ('posts_where','yoursite_posts_where');` непосредственно перед вызовом `wp_reset_query () `.In the code sample in your question above, try putting the `add_filter()` call just before your `WP_Query()` call, then put `remove_filter('posts_where','yoursite_posts_where');` just before you call `wp_reset_query()`.
- 0
- 2011-03-02
- Dougal Campbell
-
Этот код проверяет ВСЕ настраиваемые поля,чтобы убедиться,что ЛЮБОЕ из них пусто?Что,если я хочу,чтобы запрос проверял только одно специальное поле и проверял,пусто ли оно независимо от других?That code checks ALL custom fields to see if ANY of them are empty? What if I want the query to only check for one special field and see if that is empty no matter what the other ones are?
- 0
- 2011-05-31
- Jens Törnell
-
- 2011-03-04
Похоже,это работает для получения значения в запросе,хотя не уверен,дает ли он правильные результаты ..
'meta_query' => array( array( 'key' => 'some_key', 'value' => array(''), 'compare' => 'NOT IN' ) )
Не успел создать поля для проверки результатов,но я наблюдал за запросами,с которыми работал сегодня,и заметил,что
NOT IN
с радостью принимает пустой массив.This seems to work for getting the value into the query, not sure about whether it pulls valid results though..
'meta_query' => array( array( 'key' => 'some_key', 'value' => array(''), 'compare' => 'NOT IN' ) )
Not had time to create fields to test the results, but i've been watching queries i've worked with today and noticed
NOT IN
will happily take an empty array.-
Я знаю,что это старый ответ,но для тех,кто пробует этот подход,он работает с '' compare '=>' NOT LIKE '' вместо 'NOT IN'I know this is an old answer, but for those trying this apparoach, it works with `'compare' => 'NOT LIKE'` instead of `'NOT IN`'
- 0
- 2012-07-11
- handsofaten
-
Наверняка эффективнее использовать!=Вместо не в или не нравится.То же,что http://wordpress.stackexchange.com/a/10286/32863 (то есть о мета-ключах,но тот же принцип)Surely more efficient to use != instead of not in or not like. Same as http://wordpress.stackexchange.com/a/10286/32863 (that is about meta keys, but same principle)
- 3
- 2015-09-09
- Adam
-
Еще более чистое решение: как уже сказал Адам.Использовать: `'значение'=> '', 'compare'=> '!=' 'Even cleaner solution: like Adam stated already. Is to use: `'value' => '', 'compare' => '!=' `
- 5
- 2018-04-20
- Martijn van Hoof
-
Если вам нужно убедиться,что это не пустой массив ... 'value'=> array ('',array (),serialize (array ())),'compare'=> 'NOT IN' 'If you need to check to make sure it's not an empty array... `'value' => array('', array(), serialize(array())), 'compare' => 'NOT IN'`
- 0
- 2018-08-14
- StephanieQ
-
- 2017-12-06
Это старый вопрос,но похоже,что Wordpress исправил эту "недостающую функцию": теперь,согласно Wordpress Codex можно проверить на наличие (или отсутствие) мета-ключа,как это
'meta_query' => array( array( 'key' => 'featured_image', 'compare' => 'EXISTS', //or "NOT EXISTS", for non-existance of this key ) )
Это доступно в WP>=3.5.
This is an old question, but it seems Wordpress has fixed this "missing feature": now, according to Wordpress Codex is possible to check for existence (or non-existence) of the meta key, like this
'meta_query' => array( array( 'key' => 'featured_image', 'compare' => 'EXISTS', //or "NOT EXISTS", for non-existance of this key ) )
This is available as of WP >= 3.5.
-
EXISTS покажет пустые значения,которые нам не нужны.Насколько я знаю,лучшим решением будет 'value'=> '','compare'=> '!=' '.`EXISTS` will show empty values which is not what we're after here. The best solution is `'value' => '', 'compare' => '!=' ` as far as my testing goes.
- 0
- 2019-08-09
- Ben
-
@Ben Это именно то,что пытался OP,но,похоже,безуспешно.Я добавил свое решение,чтобы убедиться,что люди,проходящие через поиск метода получения сообщений на основе наличияmeta_key,могут его найти.Поскольку значением мета может быть «что-то»,«пустое» или «нулевое» (в случае,если мета не существует),вероятно,лучшим решением было бы объединить две опции с отношением «И».@Ben That's exactly what the OP tried, but without any success, it seems. I added my solution to make sure people passing by searching for a method to retrieve posts based on existence of meta_key could find it. Since the value of a meta can be "something", "empty" or "null" (in case the meta doesn't exist), probably the best solution would be to merge the two options with an "AND" relation
- 2
- 2019-08-09
- Erenor Paz
-
- 2018-01-10
Этот запрос сработал для меня.Очень похоже на сравнение в ответеt31os от 2011 года,но поскольку мета ключ/значение представляет собой простую текстовую строку,это не обязательно должен быть массивmeta_query.
$args = array( 'posts_per_page' => 5,//replaced 'showposts' in version 2.1 'meta_key' => 'featured_image', 'meta_value' => array(''), 'meta_compare' => 'NOT IN' );
По какой-либо причине использование 'meta_value'=> '' и 'meta_compare'=> '!=' или 'meta_compare'=> 'НЕLIKE ' по-прежнему извлекал для меня все сообщения,но,вероятно,это как-то связано с тем фактом,что я создал свое мета-значение с помощью плагина Advanced Custom Fields (ACF).
This is the query that worked for me. Very similar to the comparison in t31os's answer from 2011, but because the meta key/value is just a simple textstring, it doesn't need to be a meta_query array.
$args = array( 'posts_per_page' => 5,//replaced 'showposts' in version 2.1 'meta_key' => 'featured_image', 'meta_value' => array(''), 'meta_compare' => 'NOT IN' );
For whatever reason, using 'meta_value' => '' and 'meta_compare' => '!=' or 'meta_compare' => 'NOT LIKE' still pulled all posts for me, but it probably has something to do with the fact that I created my meta value using the Advanced Custom Fields (ACF) plugin.
-
- 2011-03-03
Это исправлено в WP 3.2-alpha:
This is fixed in WP 3.2-alpha:
-
- 2014-01-24
Я что-то упускаю?
<?php $args = array( 'post_type' => 'post', 'posts_per_page' => -1, 'meta_key' => "featured_image" ); $the_query = new WP_Query( $args ); ?>
Разве это не поможет?
Am i missing something?
<?php $args = array( 'post_type' => 'post', 'posts_per_page' => -1, 'meta_key' => "featured_image" ); $the_query = new WP_Query( $args ); ?>
Won't that do it?
-
Изменить: из кодекса: `` $ query=new WP_Query ('meta_key=Feature_image'); `` посмотрите здесь: http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_ParametersEdit: from the codex: ```$query = new WP_Query( 'meta_key=featured_image' );``` look here:http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters
- 0
- 2014-01-24
- Infinity Media
-
Во-первых,вы всегда можете [отредактировать] вопрос или ответ вместо добавления комментария.Во-вторых: не ** злоупотребляйте ** ответами вместо комментариев.First, you can always [edit] a question or answer instead of adding a comment. Second: Don't **misuse** answers instead of comments.
- 0
- 2014-01-25
- kaiser
-
Если у вас есть новый вопрос,задайте его,нажав кнопку [Задать вопрос] (http://wordpress.stackexchange.com/questions/ask).Включите ссылку на этот вопрос,если она помогает понять контекст.If you have a new question, please ask it by clicking the [Ask Question](http://wordpress.stackexchange.com/questions/ask) button. Include a link to this question if it helps provide context.
- 0
- 2014-01-25
- kaiser
-
@kaiser - мне кажется,он отвечал.Он не спрашивает,действителен ли его код,но я полагаю,что он саркастически отвечает на вопрос тем,что,по его мнению,будет работать.@kaiser - seems to me like he was answering. He's not asking if his code is valid, but I suppose sort of sarcastically answering the question with what he believes will work.
- 0
- 2016-09-05
- Nathan
-
@Nathan Это то,для чего нужны комментарии.@Nathan This is what comments are for.
- 0
- 2016-09-05
- kaiser
-
@kaiser,Комментарии для выкладывания ответов и кода?Как разместить код в комментарии?@kaiser, Comments are for posting answers and code? How do you post code in a comment?
- 0
- 2016-09-05
- Nathan
-
@ Натан,я имел в виду саркастическую часть ответа.Код должен быть ответом - включая некоторые пояснения.@Nathan I was referring to the sarcastic part of the answer. The code should be an answer – including some explanation.
- 0
- 2016-09-05
- kaiser
-
В WordPress была ошибка,но теперь она исправлена.Это правильный способ сделать это.There was a bug in WordPress but now it's fixed. This is the correct way to do it.
- 0
- 2016-12-04
- Ryan Taylor
-
Три человека уже пытались решить эту проблему,и мы приближаемся к нулю. Я хочу отображать только сообщения,у которых есть значение вmeta_key 'Feature_image'.
Итак ... если "Feature_image" не пусто,покажите сообщение. Вот код:
Мы испробовали буквально все возможные комбинации,устаревшие параметрыmeta_ *,query_posts,get_posts вместо WP_Query ... Ничего. Распечатал оператор выбора,поле мета-значения не отображается. Он существует - для сообщений (для каждого сообщения) и существует в базе данных.
Сейчас мы просмотрели все публикации по этой теме,в том числе следующие:
query_posts и показывать результаты только в том случае,если настраиваемое поле не пусто
http://scribu.net/wordpress/advanced-metadata-queries.html а>
Zilch. Пожалуйста,помогите ...