Почему query_posts () не помечен как устаревший?
-
-
Это отличный вопрос!Для тех,кто сталкивается с этим,кто не знает,почему вы не должны использовать query_posts (),[здесь] (http://wordpress.stackexchange.com/questions/50761/when-to-use-wp-query-query-posts-and-pre-get-posts) и [здесь] (http://wordpress.stackexchange.com/questions/1753/when-should-you-use-wp-query-vs-query-posts-vs-get-posts/) - это несколько хороших вопросов и ответов для начинающих.That is a great question! For others coming across this who don't know why you shouldn't use query_posts(), [here](http://wordpress.stackexchange.com/questions/50761/when-to-use-wp-query-query-posts-and-pre-get-posts) and [here](http://wordpress.stackexchange.com/questions/1753/when-should-you-use-wp-query-vs-query-posts-vs-get-posts/) are some good primer Q&A's on it.
- 2
- 2016-05-18
- Tim Malone
-
2 ответ
- голосов
-
- 2016-05-18
Я только что создал новую заявку на отслеживание, заявку № 36874 ,чтобы предложить отказ от
query_posts()
. Будет ли это принято,- вопрос хороший.Настоящая большая проблема с
query_posts()
в том,что он по-прежнему широко используется плагинами и темами,даже несмотря на то,что были действительно хорошие статьи о том,почему вы должны НИКОГДА используйте это. Я думаю,что самый эпичный пост на WPSE следующий:устаревание!==удаление ,поэтому отказ от использования
query_posts()
не остановит его использование некачественными разработчиками и людьми в целом,которые не знают WordPress и используют некачественные качественные учебные пособия в качестве рекомендаций. В качестве доказательства,сколько вопросов мы еще получаем,когда люди используютcaller_get_posts
вWP_Query
? Он устарел уже много лет.Устаревшие функции и аргументы могут быть удалены в любое время,когда разработчики ядра сочтут нужным,но,скорее всего,этого никогда не произойдет с
query_posts()
,поскольку это нарушит работу миллионов сайтов. Так что да,мы,вероятно,никогда не увидим полного удаленияquery_posts()
,что может привести к тому,что он,скорее всего,никогда не станет устаревшим.Это отправная точка,но следует помнить,что отказ от поддержки чего-либо в WordPress не останавливает его использование.
ОБНОВЛЕНИЕ 19 мая 2016 г.
Поданный мною тикет закрыт и помечен как дубликат тикета 4-летней давности ,который был закрыт как wontfix и снова открыт. и по-прежнему остаются открытыми и нерешенными.
Кажется,что основные разработчики цепляются за это старое верное маленькое зло. Всем интересно,вот дубликат билета 4-летней давности
I have just created a new trac ticket, ticket #36874, to propose the deprecation of
query_posts()
. Whether or not it will be accepted remains a good question.The real big issue with
query_posts()
is, it is still widely used by plugins and themes, even though there have been really good writings on the subject of why you should NEVER EVER use it. I think the most epic post here on WPSE is the following one:deprecation !== removal, so deprecating
query_posts()
will not stop its usage by poor quality devs and people in general who do not know WordPress and who use poor quality tutorials as guidelines. Just as some proof, how many questions do we still get here where people usecaller_get_posts
inWP_Query
? It has been deprecated for many years now.Deprecated functions and arguments can however be removed at any time the core devs see fit, but this will most probably never happen with
query_posts()
as this will break millions of sites. So yes, we will probably never see the total removal ofquery_posts()
- which might lead to the fact that it will most probably never get deprecated.This is a starting point though, but one has to remember, deprecating something in WordPress does not stop its use.
UPDATE 19 May 2016
The ticket I raised is now closed and marked as duplicate to a 4 year old ticket, which was closed as wontfix and was reopened and still remain open and unresolved.
Seems the core developers are hanging on to this old faithful little evil. Everyone interested, here is the duplicate 4year old ticket
-
Почему закрыли тикет https://core.trac.wordpress.org/ticket/36874?Пожалуйста,@PieterGoosen,можете ли вы включить ссылку на эту ветку в свой тикет https://core.trac.wordpress.org/ticket/36874,так как этот вопрос относится к тикету 1: 1Why they closed the ticket https://core.trac.wordpress.org/ticket/36874? Please @PieterGoosen can you include the link to this thread in your ticket https://core.trac.wordpress.org/ticket/36874 since this question relates to the ticket 1:1
- 0
- 2016-05-19
- prosti
-
@prosti Похоже,он был отмечен как повторяющийся,поскольку эта проблема уже поднималась ... ** 4 года назад ** [найдено здесь] (https://core.trac.wordpress.org/ticket/19631).@prosti Looks like it was marked as duplicate as this issue has already been brought up... **4 years ago** [found here](https://core.trac.wordpress.org/ticket/19631).
- 0
- 2016-05-19
- Howdy_McGee
-
- 2016-05-19
[немного напыщенно]
Основная философия заключается в том,что ничто не является устаревшим. Уведомление об устаревании,хотя его приятно иметь,просто проигнорируют,если в какой-то момент функция не будет удалена. Есть много людей,которые не работают с
WP_DEBUG
и не заметят уведомления,если не будет фактической поломки.Рука OTOH,эта функция похожа на инструкцию
goto
. Лично я никогда (для меньшего,чем ожидалось) определения не использовалgoto
,но я могу понять аргументы,указывающие на некоторую ситуацию,в которой по умолчанию это не зло. То же самое и сquery_posts
,это простой способ настроить все глобальные переменные,необходимые для создания простого цикла,и может быть полезен в контексте ajax или rest-api. Я бы никогда не использовал его в этих контекстах,но я вижу,что здесь это скорее вопрос стиля кодирования,чем функция,которая сама по себе является злом.Если углубиться,основная проблема заключается в том,что глобальные переменные нужно устанавливать вообще. Это основная проблема,а не та функция,которая помогает их настроить.
[somewhat rant]
It is the standing core philosophy at this point that nothing is truly deprecated. Deprecation notice, while it is a nice to have, is just going to be ignored if the function will not actually be dropped at some point. There are many people that do not develop with
WP_DEBUG
on and will not notice the notice if there will not be an actual breakage.OTOH hand, this function is like
goto
statement. Personally I never (for smaller definition then expected) usedgoto
but I can understand the arguments pointing to some situation in which it is not evil by default. Same goes withquery_posts
, it is a simple way to set up all the globals required to make a simple loop, and can be useful in ajax or rest-api context. I would never use it in those contexts as well, but I can see that there, it is more of an issue of style of coding then a function being evil by itself.Going a little deeper, the main problem is that globals need to be set at all. That is the main problem not the one function that helps setting them.
-
И для сравнения,действительно,query_posts медленнее,чем вторичный запрос (читай: не основной запрос).And for the comparison, is really `query_posts` slower than a secondary query (read: not the main query).
- 0
- 2016-05-19
- prosti
-
@prosti,поскольку он просто устанавливает и запускает wp_query,насколько он может быть медленнее?конечно,есть некоторые накладные расходы,но мы,вероятно,говорим здесь о миллисекундах.Это,конечно,предполагает,что вы используете его там,где WP по умолчанию не предоставляет запрос.В тех местах,где это плохо,не сам `query_posts`,а бесполезный запрос,сделанный при загрузке WP@prosti, as it just sets and runs a wp_query, how much slower can it be? sure there is some overhead but we probably talking miliseconds here. This of course assumes you use it in places where WP do not provide a query by default. In places where it does it is bad, not the `query_posts`itself but the useless query that was done when WP was loading
- 0
- 2016-05-19
- Mark Kaplun
Технически говоря,существует две функции
query_posts()
.Одинquery_posts()
на самом деле являетсяWP_Query::query_posts()
,а другой находится в глобальном пространстве.Просим здравомыслия:
Еслиglobal
query_posts()
- это «зло»,почему он не устарел?Или почему не помечено как
_doing_it_wong
.