Ето как да изтеглите всяка публикация, която искате с WP_Query

Ако сте създавали прости теми в миналото, най-вероятно е необходимостта да изтегляте публикации сами да не са възникнали. В крайна сметка WordPress зарежда най-новите 10 публикации на главната страница и правилните публикации в страниците с архив. Ами по-сложните сценарии? Какво ще стане, ако искате да видите карта на сортовете и искате да изброите всичките си публикации и страници, подредени по дата?


WP_Query е ваш приятел, той ви позволява да дърпате публикации от базата данни според вашите критерии. Можете да изтеглите всички публикации от една и съща категория, които съдържат и определени маркери. Можете да извлечете всички страници, създадени миналата година и публикации, които нямат представено изображение.

В тази публикация ще ви разгледам задълбочено как работи WP_Query – нека започнем!

Персонализиран цикъл

Ключът към добрата работа с персонализираните заявки е овладяването на аргументите, които можете да предадете на тях. Преди да разгледаме това, нека да създадем бързо "скелет" можем да използваме за изброяване на публикации. Цикълът на обикновена страница с архив ще изглежда така:

<?php if (have_posts ()): ?>
<?php докато (have_posts ()): the_post () ?>

<?php междувременно ?>
<?php друго: ?>

<?php endif ?>

Това работи отлично, защото преди да се зареди страницата, WordPress вече е намерил правилните публикации. Когато пишем персонализирано запитване, ще ни трябва персонализиран цикъл. Кодът е много подобен, тук става:

<?PHP
$ args = масив (
‘post_type’ => “Пост”,
‘post_status’ => “Бъдеще”
);
$ графік = нов WP_Query ($ args);

ако ($ по график)->have_posts ()):
?>
<?php докато (по график $)->have_posts ()): насрочено $->съобщението() ?>

<?php междувременно ?>
<?php друго: ?>

<?php endif ?>

Създаваме нова заявка за WordPress, използвайки класа WP_Query, като я предаваме параметри, за да определим типовете публикации, от които се нуждаем. След това извикваме методите have_posts () и the_post () на нашия планиран обект $.

Ако сте нов за обектно ориентирано програмиране и не разбирате защо, не се притеснявайте, пак можете лесно да използвате персонализирани заявки. Ще се съсредоточим върху масива $ args през публикацията, което ще бъде доста ясно.

Прости аргументи

Както споменах, основната "Тяло от знания" когато става въпрос за WP_Query се крие в аргументите му. Най- сборник от старинни ръкописи изброява всички тях, тук ще разгледаме най-полезните.

Някои аргументи са доста прости, като например параметъра tag или tag_id. Първият взема таг слуг, а по-късно идентификатор на таг. Можете също да разделите няколко елемента със запетаи или да използвате отрицателни идентификатори, за да посочите, че искате да изтеглите публикации, които правят не прикрепете този конкретен маркер.

$ args = масив (
‘post_type’ => “Пост”,
‘tag_id’ => ’22, 92,44, -21 “
);
$ our_posts = new WP_Query ($ args);

Фрагментът ще извлече статии, които имат прикачен към всеки от първите три маркера, но не и четвъртият. Въпреки че тази система е достатъчно мощна за прости нужди, обикновено използвам много по-гъвкавата таксономична заявка, която ще обсъдя малко по-късно.

Авторът, името на автора, котката, името на категорията, s (за думите за търсене), post_status, post_type са примери за някои по-прости полета. Обърнете внимание, че някои полета, като post_status, изискват да предадете масив от състояния, ако искате да използвате множество стойности.

$ args = масив (
‘post_type’ => масив („публикация“, „страница“),
‘post_status’ => масив („чернова“, „публикуване“),
‘котка’ => “музика, видео”
);
$ our_posts = new WP_Query ($ args);

Примерът по-горе извлича всички публикации, които са или страници, публикации; са публикувани или в състояние на чернова и имат определена категория музика или видеоклипове. Това може да се използва за показване на заглавия на всяко текущо или планирано съдържание, свързано с музика или видео.

Таксиномични запитвания

За прости неща използването на споменатите аргументи за извличане на публикации въз основа на категории или маркери е достатъчно, но какво става, ако имате персонализирана таксономия или трябва да комбинирате множество параметри? Отговорът се крие в аргумента tax_query, който сам по себе си е масив. Нека първо да разгледаме пример.

$ args = масив (
‘post_type’ => ‘Книга’,
‘tax_query’ => масив (
масив (
‘таксономия’ => “Жанр”,
‘поле’ => “Охлюв”,
‘условия’ => масив (‘scifi’, ‘трилър’),
‘оператор’ => ‘НЕ В’,
),
масив (
‘таксономия’ => “Автор”,
‘поле’ => ‘документ за самоличност’,
‘условия’ => масив (92, 883, 399),
),
‘отношение’ => ‘И’,
),
);
$ query = new WP_Query ($ args);

Тук извличаме някои публикации от нашия тип публикации в „книга“, добавяйки някои параметри на таксономия. Използвайки два масива, определени в tax_query, ние посочихме, че искаме да изтеглим книги, написани от 92, 883 или 399 на автора, които са не в жанра sci-fi или трилър. Параметърът за отношенията определя връзката между двата масива. В нашия случай става въпрос за връзки „и“, което означава, че и двете условия трябва да бъдат изпълнени.

Ако използвахме „или“, щяхме да извлечем книги, които или не са в категорията sci-fi или трилър или са написани от посочените трима автори. На обикновен английски език това означава: Искам да видя всичките си книги, с изключение на жанра sci-fi и трилър. Искам обаче да видя всички книги от Тери Пратчет, Дъглас Адамс и Стивън Кинг, независимо от жанра.

Мета заявки

Мета заявките са много подобни на таксономичните заявки по структура, но използват данни от мета таблицата след, за да филтрират публикациите. Кодът по-долу ще показва всички публикувани публикации, които имат представено изображение.

$ args = масив (
‘post_type’ => “Пост”,
‘meta_query’ => масив (
масив (
‘ключ’ => “_Thumbnail_id”,
‘стойност’ => ”,
‘сравнение’ => “! = ‘,
),
),
);
$ query = new WP_Query ($ args);

WordPress съхранява идентификационния номер на представеното изображение за публикация, използвайки полето _thumbnail_id. Така че, ако извлечем всички публикации, в които тази мета стойност не е празна, трябва да завършим с всички публикации, които имат представено изображение.

Тайната тук е да знаете как да използвате свойството за сравнение и типа. Можете да използвате множество стойности, които трябва да са познати от SQL: ‘=’, ‘! =’, ‘>’,’>= ’,„<‘,'<= ‘,’ LIKE ‘,’ NOT LIKE ‘,’ IN ‘,’ NOT IN ‘,’ MEDWEEN ‘,’ NOT BETWEEN ‘,’ EXISTS ‘(от WordPress 3.5 и по-нови версии) и’ NOT EXSTS ‘(от WordPress 3.5 и нагоре)

Свойството тип обикновено е важно, когато искате да сравните числа или дати. Възможните стойности са „NUMERIC“, „BINARY“, „CHAR“, „DATE“, „DATETIME“, „DECIMAL“, „SIGNED“, „TIME“, „UNSIGNED“. Имайте предвид, че използвате NUMERIC при сравняване на числа, в повечето други случаи трябва да сте добре.

Точно както при таксономичните заявки можете да подреждате множество изисквания и след това да използвате параметър отношение, за да определите връзката между тях.

$ args = масив (
‘post_type’ => “Пост”,
‘meta_query’ => масив (
‘отношение’ => ‘ИЛИ’,
масив (
‘ключ’ => “Настроение”,
‘стойност’ => масив („щастлив“, „страхотен“),
‘сравнение’ => “В”,
),
масив (
‘ключ’ => “Доход”,
‘стойност’ => 500,
‘сравнение’ => “>”,
‘type’ => “NUMERIC”
),
),
);
$ query = new WP_Query ($ args);

Примерът по-горе би показал публикации от хипотетичен дневник, където се е случило нещо добро. Или се почувствах щастлив или страхотен или спечелих повече от 500 долара през този ден.

Параметри на датата

Датите могат да станат малко сложни, но са много гъвкави. Най- WP_Query документация има много примери, ако се нуждаете от повече информация.

Извличането на публикации от определено време е доста лесно. Можете да използвате годината, monthnum, w (седмица от годината), ден и няколко други параметри, за да укажете час. Кодът по-долу ще извлече всички публикации от март 2013 г..

$ args = масив (
‘post_type’ => “Пост”,
‘година’ => 2013,
‘месец’ => 3
);
$ query = new WP_Query ($ args);

Ако искате да влезете в по-сложни времеви диапазони, ще трябва да използвате date_query. Това ви позволява да указвате произволни диапазони доста лесно, като използвате познат формат на масив. Следващият пример – любезното съдействие на Codex – показва как можете да изтегляте публикации, писани между 9:00 до 17:00 в делничните дни.

$ args = масив (
‘post_type’ => “Пост”,
‘date_query’ => масив (
масив (
‘час’ => 9,
‘сравнение’ => “>= ‘,
),
масив (
‘час’ => 17,
‘сравнение’ => “<= ‘,
),
масив (
‘dayofweek’ => масив (2, 6),
‘сравнение’ => “Между”,
),
),
);
$ query = new WP_Query ($ args);

Резултати за подреждане

Редът, в който се представя списък, е също толкова важен, колкото и елементите в него. За щастие WordPress ни предлага параметрите на поръчката и поръчката. Параметърът на поръчката е доста лесен, можете да използвате ASC или DESC, за да поръчате възходящ или низходящ.

Параметърът order_by може да приеме няколко стойности: „няма“, „ИД“, „автор“, „заглавие“, „име“, „тип“, „дата“, „модифициран“, „родител“, „rand“ , ‘comment_count’, ‘menu_order’, ‘meta_value’, ‘meta_value_num’, ‘post__in’. Подреждането чрез meta_value може да бъде особено полезно. В този случай не забравяйте да посочите и полето meta_key.

$ args = масив (
‘post_type’ => “Рисунка”,
‘meta_query’ => масив (
масив (
‘ключ’ => ‘цена’,
‘стойност’ => 50000,
‘сравнение’ => “>”,
‘type’ => “NUMERIC”
),
),
‘order_by’ => “Meta_value_num”,
‘meta_key’ => ‘цена’
);
$ query = new WP_Query ($ args);

Този пример извлича картини, които са на стойност над 50 000 долара, и ги нарежда да се увеличават по цена. Обърнете внимание, че тъй като цената се съхранява като число, използвах meta_value_num, за да поръчам резултатите, за разлика от meta_value, която ще бъде използвана за низове.

Друга поръчка, която си струва да се спомене, е post__in. Този post__in е параметър сам по себе си, той ви позволява да укажете масив от идентификатори за публикация, които да изтеглите. По подразбиране WordPress поръчва публикации по дата, поръчката, която сте посочили в post__in, не се запазва. Ако използвате и post__in като поръчка по стойност, WordPress ще запази поръчката.

$ args = масив (
‘post_type’ => “Пост”,
‘post__in’ => масив (23, 441, 12, 322, 34, 33),
‘order_by’ => “Post__in”,
);
$ query = new WP_Query ($ args);

Обобщавайки

Надявам се, че от това въведение в WP_Query става ясно, че това наистина е мощен клас. Тя ви позволява да извличате публикации, използвайки вашите собствени критерии по WP стандарт. Обърнете внимание на него документация за повече информация и някои страхотни свойства и методи, които този клас предлага за манипулиране на заявката и цикъла.

WP_Query е част от това, което прави WordPress страхотна обща CMS – способността за извличане на обекти от базата данни по модулен и адаптивен начин.

Ако имате въпроси, уведомете ни в коментарите!

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map