SlideShare a Scribd company logo
1 of 68
Download to read offline
Всё, что нужно знать о WP_Query
Сергей Бирюков
WordCamp Russia 2014
Обо мне
Сергей Бирюков
● Разработчик ядра WordPress
http://core.trac.wordpress.org
● Локализатор WP в России
http://ru.wordpress.org
http://sergeybiryukov.ru
@flash_usb
Что мы знаем о WP_Query?
Условные теги
is_author(), is_category(), is_home() и т. д.
Кто сталкивался с query_posts()?
Способы получения записей
● query_posts()
● new WP_Query()
● get_posts()
Цикл WordPress
while ( have_posts() ) :
the_post();
endwhile;
Вторичный цикл
$query = new WP_Query( … );
while ( $query->have_posts() ) :
$query->the_post();
endwhile;
Массив записей
$result = get_posts( … );
foreach ( $result as $post_obj ) {
...
}
Что мы не знаем?
У каждого объекта запроса есть методы
is_author() — то же самое, что $wp_query->is_author().
function is_author() {
global $wp_query;
return $wp_query->is_author();
}
Обычный цикл
while ( have_posts() ) :
the_post();
if ( is_author() )
echo 'Страница автора';
endwhile;
Обычный цикл
while ( have_posts() ) :
the_post();
if ( $wp_query->is_author() )
echo 'Страница автора';
endwhile;
Вторичный цикл
$query = new WP_Query( … );
while ( $query->have_posts() ) :
$query->the_post();
if ( $query->is_author() )
echo 'Страница автора.';
endwhile;
Вторичный цикл
$query = new WP_Query( … );
while ( $query->have_posts() ) :
$query->the_post();
if ( $query->is_author() )
echo 'Страница автора.';
endwhile;
Вторичный цикл
$query = new WP_Query( … );
while ( $query->have_posts() ) :
$query->the_post();
if ( $query->is_author() )
echo 'Страница автора.';
endwhile;
Если мы создаём новый объект:
$my_query = new WP_Query( $query );
то можем вызывать его методы:
while ( $my_query->have_posts() ) :
$my_query->the_post();
endwhile;
wp_reset_postdata();
● Зачем нужны wp_reset_postdata() и wp_reset_query()?
● Что насчёт query_posts()?
● Как изменить запрос?
● Как изменить основной запрос?
Что такое основной запрос,
и почему это важно?
wp-blog-header.php
// Загружаем окружение WordPress
require './wp-load.php';
// Определяем, какие файлы шаблонов подключить
require WPINC . '/template-loader.php';
Что происходит при загрузке?
$wp_the_query = new WP_Query();
$wp_query =& $wp_the_query;
Немного о ссылках в PHP
$a = 4;
$b =& $a;
$b = 2;
var_dump( $a ); // int(2)
$a = 6;
var_dump( $b ); // int(6)
● Основной запрос хранится в $wp_the_query.
● Его копия хранится в $wp_query.
wp-blog-header.php
// Загружаем окружение WordPress
require './wp-load.php';
// Определяем, какие файлы шаблонов подключить
require WPINC . '/template-loader.php';
wp-blog-header.php
// Загружаем окружение WordPress
require './wp-load.php';
// Всё происходит здесь
wp();
// Определяем, какие файлы шаблонов подключить
require WPINC . '/template-loader.php';
Что делает вызов wp()?
function wp( $query_vars = '' ) {
global $wp;
$wp->main( $query_vars );
}
Что это было?!
При загрузке
$wp = new WP();
Есть функция wp() и класс WP.
class WP {
…
function main() {
$this->init();
$this->parse_request();
$this->send_headers();
$this->query_posts();
$this->handle_404();
$this->register_globals();
...
class WP {
…
function main() {
$this->init();
$this->parse_request();
$this->send_headers();
$this->query_posts();
$this->handle_404();
$this->register_globals();
...
WP::parse_request()
● Разбирает URL с помощью WP_Rewrite
● Задаёт переменные запроса для WP_Query
WP::query_posts() {
global $wp_the_query;
$wp_the_query->query( $this->query_vars );
}
SELECT SQL_CALC_FOUND_ROWS
wp_posts.*
FROM wp_posts
WHERE 1=1
AND wp_posts.post_type = 'post'
AND wp_posts.post_status = 'publish'
ORDER BY wp_posts.post_date DESC
LIMIT 0, 10
wp-blog-header.php
// Загружаем окружение WordPress
require './wp-load.php';
// Определяем, какие записи нужны, затем запрашиваем их
wp();
// Загружаем тему оформления
require WPINC . '/template-loader.php';
Когда загружается тема оформления,
мы уже получили записи.
Тогда зачем делать так?
query_posts( 'author=-5' );
get_header();
while ( have_posts() ) :
the_post();
endwhile;
get_footer();
Получается в два раза больше запросов!
● Первый, который WordPress сделал по умолчанию.
● Второй, который мы будем использовать.
* В общем случае WP_Query выполняет
не один запрос, а четыре.
1. Получаем записи:
SELECT
SQL_CALC_FOUND_ROWS …
FROM wp_posts LIMIT 0, 10
2. Сколько найдено записей?
SELECT FOUND_ROWS()
3. Получаем метаданные для этих записей.
4. Получаем элементы таксономий для этих записей.
(Эти запросы можно выборочно отключить...)
$my_query = new WP_Query( array(
'no_found_rows' => true,
'update_post_meta_cache' => false,
'update_post_term_cache' => false,
) );
Запрос неиспользуемых данных
снижает производительность.
Другие проблемы query_posts()
Не работает постраничная навигация
Параметры навигации WordPress вычисляет
для основного запроса, а не дополнительного.
query_posts( array(
'author' => -5,
'posts_per_page' => 25,
) );
Этот код проблематичен.
Переопределяются глобальные переменные
Это может нарушить работу виджетов, комментариев и т.д.
query_posts() — это плохо
Согласимся?
Действие pre_get_posts
class WP_Query {
…
function get_posts() {
$this->parse_query();
// Ура!
do_action_ref_array( 'pre_get_posts', array( &$this ) );
…
function alter_my_home_query( $query ) {
if ( $query->is_home() )
$query->set( 'author', '-5' );
}
add_action( 'pre_get_posts', 'alter_my_home_query' );
Здесь начинаются сложности.
'pre_get_posts' выполняется
для каждого запроса
● get_posts()
● new WP_Query
● Виджет последних записей, установленный клиентом без
вашего ведома.
● И т.д.
Как изменить только основной запрос?
Триумфальное возвращение $wp_the_query
Метод WP_Query::is_main_query()
class WP_Query {
…
function is_main_query() {
global $wp_the_query;
return $wp_the_query === $this;
}
…
Только главный запрос!
function alter_my_home_query( $query ) {
if ( $query->is_home() && $query->is_main_query() )
$query->set( 'author', '-5' );
}
add_action( 'pre_get_posts', 'alter_my_home_query' );
function alter_my_home_query( $query ) {
if ( is_admin() || ! $query->is_main_query() )
return;
if ( $query->is_home() )
$query->set( 'author', '-5' );
}
add_action( 'pre_get_posts', 'alter_my_home_query' );
Как работает WP_Query::is_main_query()?
● $wp_the_query никогда не меняется и всегда содержит
основной запрос.
● В $wp_query хранится ссылка на $wp_the_query, если
только не используется query_posts().
● Не путать с функцией is_main_query().
query_posts( 'author=-5' );
while ( have_posts() ) :
the_post();
endwhile;
wp_reset_query();
query_posts( 'author=-5' );
while ( have_posts() ) :
the_post();
endwhile;
wp_reset_query();
function query_posts( $query ) {
// Убираем ссылку на $wp_the_query
unset( $wp_query );
$wp_query =& new WP_Query( $query );
return $wp_query;
}
query_posts( 'author=-5' );
while ( have_posts() ) :
the_post();
endwhile;
wp_reset_query();
function wp_reset_query() {
// Восстанавливаем ссылку на $wp_the_query
unset( $wp_query );
$wp_query =& $wp_the_query;
// Восстанавливаем глобальные переменные
wp_reset_postdata();
}
● Вызываете the_post()?
wp_reset_query() восстановит $wp_query и глобальные
переменные.
● Вызываете $my_query->the_post()?
wp_reset_postdata() восстановит глобальные переменные.
Как быть с шаблонами страниц?
/* Template: My Template */
query_posts( $query_string . '&author=-5&posts_per_page=25' );
get_header();
while ( have_posts() ) :
the_post();
endwhile;
function alter_my_template( $query ) {
if ( ! $query->is_main_query() )
return;
if ( ! is_page_template( 'my-template.php' ) )
return;
$query->set( 'author', '-5' );
$query->set( 'posts_per_page', 25 );
}
add_action( 'pre_get_posts', 'alter_my_template' );
Выводы
● У каждого объекта WP_Query есть методы,
соответствующие глобальным условным тегам.
● Глобальные условные теги используют $wp_query —
основной или текущий запрос.
● $wp_query — это основной запрос, если не используется
query_posts(). Восстанавливайте его с помощью
wp_reset_query().
В заключение
● 'pre_get_posts' — мощный и гибкий инструмент (при
правильном использовании).
● Всегда проверяйте с помощью $query->is_main_query(), что
меняете именно основной запрос.
http://sergeybiryukov.ru
@flash_usb
Спасибо! Вопросы?

More Related Content

What's hot

TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС2ГИС Технологии
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов2ГИС Технологии
 
инструкция по оптимизации сайтов на Drupal херени даниэл
инструкция по оптимизации сайтов на Drupal херени даниэлинструкция по оптимизации сайтов на Drupal херени даниэл
инструкция по оптимизации сайтов на Drupal херени даниэлPVasili
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьCodeFest
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн2ГИС Технологии
 
Behat-trick: как мы внедряли BDD на наших проектах
Behat-trick: как мы внедряли BDD на наших проектахBehat-trick: как мы внедряли BDD на наших проектах
Behat-trick: как мы внедряли BDD на наших проектахSQALab
 
Codeception UATestingDays
Codeception UATestingDaysCodeception UATestingDays
Codeception UATestingDaysdavertmik
 
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)Ontico
 
django cheBit'11
django cheBit'11django cheBit'11
django cheBit'11dva
 
09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворкиRoman Brovko
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Ontico
 
М. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionМ. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionAlbina Tiupa
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
 
Drupal и мобильные устройства комелин константин
Drupal и мобильные устройства комелин константинDrupal и мобильные устройства комелин константин
Drupal и мобильные устройства комелин константинdrupalconf
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)Ontico
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныCodeFest
 

What's hot (20)

TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
 
инструкция по оптимизации сайтов на Drupal херени даниэл
инструкция по оптимизации сайтов на Drupal херени даниэлинструкция по оптимизации сайтов на Drupal херени даниэл
инструкция по оптимизации сайтов на Drupal херени даниэл
 
Суперсилы Chrome developer tools
Суперсилы Chrome developer toolsСуперсилы Chrome developer tools
Суперсилы Chrome developer tools
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
 
Behat-trick: как мы внедряли BDD на наших проектах
Behat-trick: как мы внедряли BDD на наших проектахBehat-trick: как мы внедряли BDD на наших проектах
Behat-trick: как мы внедряли BDD на наших проектах
 
Wordpress theme
Wordpress themeWordpress theme
Wordpress theme
 
Codeception UATestingDays
Codeception UATestingDaysCodeception UATestingDays
Codeception UATestingDays
 
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
 
django cheBit'11
django cheBit'11django cheBit'11
django cheBit'11
 
09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
 
Kranonit s16 (python). dmitry furzenko
Kranonit s16 (python). dmitry furzenkoKranonit s16 (python). dmitry furzenko
Kranonit s16 (python). dmitry furzenko
 
М. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionМ. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с Codeception
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
Drupal и мобильные устройства комелин константин
Drupal и мобильные устройства комелин константинDrupal и мобильные устройства комелин константин
Drupal и мобильные устройства комелин константин
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
 

Viewers also liked

Моделирование контента в WordPress
Моделирование контента в WordPressМоделирование контента в WordPress
Моделирование контента в WordPressAnna Ladoshkina
 
Практическая доступность с WordPress
Практическая доступность с WordPressПрактическая доступность с WordPress
Практическая доступность с WordPressAnna Ladoshkina
 
Composer и разработка сайтов на WordPress
Composer и разработка сайтов на WordPressComposer и разработка сайтов на WordPress
Composer и разработка сайтов на WordPressAnna Ladoshkina
 
Managing a Local WordPress Community, WordCamp Europe 2016
Managing a Local WordPress Community, WordCamp Europe 2016Managing a Local WordPress Community, WordCamp Europe 2016
Managing a Local WordPress Community, WordCamp Europe 2016Sergey Biryukov
 
Ведение бизнеса на основе WordPress
Ведение бизнеса на основе WordPressВедение бизнеса на основе WordPress
Ведение бизнеса на основе WordPressAndrey Ovsyannikov
 
Using Composer to create manageable WordPress websites
Using Composer to create manageable WordPress websitesUsing Composer to create manageable WordPress websites
Using Composer to create manageable WordPress websitesAnna Ladoshkina
 
i18n for Plugin and Theme Developers, WordCamp Milano 2016
i18n for Plugin and Theme Developers, WordCamp Milano 2016i18n for Plugin and Theme Developers, WordCamp Milano 2016
i18n for Plugin and Theme Developers, WordCamp Milano 2016Sergey Biryukov
 

Viewers also liked (7)

Моделирование контента в WordPress
Моделирование контента в WordPressМоделирование контента в WordPress
Моделирование контента в WordPress
 
Практическая доступность с WordPress
Практическая доступность с WordPressПрактическая доступность с WordPress
Практическая доступность с WordPress
 
Composer и разработка сайтов на WordPress
Composer и разработка сайтов на WordPressComposer и разработка сайтов на WordPress
Composer и разработка сайтов на WordPress
 
Managing a Local WordPress Community, WordCamp Europe 2016
Managing a Local WordPress Community, WordCamp Europe 2016Managing a Local WordPress Community, WordCamp Europe 2016
Managing a Local WordPress Community, WordCamp Europe 2016
 
Ведение бизнеса на основе WordPress
Ведение бизнеса на основе WordPressВедение бизнеса на основе WordPress
Ведение бизнеса на основе WordPress
 
Using Composer to create manageable WordPress websites
Using Composer to create manageable WordPress websitesUsing Composer to create manageable WordPress websites
Using Composer to create manageable WordPress websites
 
i18n for Plugin and Theme Developers, WordCamp Milano 2016
i18n for Plugin and Theme Developers, WordCamp Milano 2016i18n for Plugin and Theme Developers, WordCamp Milano 2016
i18n for Plugin and Theme Developers, WordCamp Milano 2016
 

Similar to Everything You Need to Know About WP_Query, WordCamp Russia 2014

WordPress auto-install: просто о сложном
WordPress auto-install: просто о сложномWordPress auto-install: просто о сложном
WordPress auto-install: просто о сложномVladimir Samoletov
 
WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...
WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...
WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...WordCamp Kyiv
 
Страх и ненависть в исходном коде
Страх и ненависть в исходном кодеСтрах и ненависть в исходном коде
Страх и ненависть в исходном кодеKolya Korobochkin
 
PHP Tricks
PHP TricksPHP Tricks
PHP TricksBlackFan
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииPaul Klimov
 
Yii: миграции и инсталляции
Yii: миграции и инсталляцииYii: миграции и инсталляции
Yii: миграции и инсталляцииPaul Klimov
 
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3 phpclub
 
Первые шаги после установки WordPress
Первые шаги после установки WordPressПервые шаги после установки WordPress
Первые шаги после установки WordPressDarja Kruzhkova
 
TestGuy - эмулируем вашего тестировщика
TestGuy - эмулируем вашего тестировщикаTestGuy - эмулируем вашего тестировщика
TestGuy - эмулируем вашего тестировщикаdavertmik
 
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoPycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoIlya Shalyapin
 
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...it-people
 
Разработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconruРазработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconruJetStyle
 
Yii2
Yii2Yii2
Yii2Noveo
 
Magento code debugging
Magento code debuggingMagento code debugging
Magento code debuggingaheadWorks
 
Meet Magento Belarus debug Pavel Novitsky (rus)
Meet Magento Belarus debug Pavel Novitsky (rus)Meet Magento Belarus debug Pavel Novitsky (rus)
Meet Magento Belarus debug Pavel Novitsky (rus)Pavel Novitsky
 
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...Viktor Likin
 
Основые безопасности WordPress
Основые безопасности WordPressОсновые безопасности WordPress
Основые безопасности WordPressKonstantin Kovshenin
 

Similar to Everything You Need to Know About WP_Query, WordCamp Russia 2014 (20)

WordPress auto-install: просто о сложном
WordPress auto-install: просто о сложномWordPress auto-install: просто о сложном
WordPress auto-install: просто о сложном
 
WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...
WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...
WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...
 
Страх и ненависть в исходном коде
Страх и ненависть в исходном кодеСтрах и ненависть в исходном коде
Страх и ненависть в исходном коде
 
PHP Tricks
PHP TricksPHP Tricks
PHP Tricks
 
Yserver
YserverYserver
Yserver
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляции
 
Yii: миграции и инсталляции
Yii: миграции и инсталляцииYii: миграции и инсталляции
Yii: миграции и инсталляции
 
Crazy owl yii1=> yii2
Crazy owl yii1=> yii2Crazy owl yii1=> yii2
Crazy owl yii1=> yii2
 
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3
 
Первые шаги после установки WordPress
Первые шаги после установки WordPressПервые шаги после установки WordPress
Первые шаги после установки WordPress
 
TestGuy - эмулируем вашего тестировщика
TestGuy - эмулируем вашего тестировщикаTestGuy - эмулируем вашего тестировщика
TestGuy - эмулируем вашего тестировщика
 
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoPycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и Django
 
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
 
Разработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconruРазработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconru
 
Yii2
Yii2Yii2
Yii2
 
Magento code debugging
Magento code debuggingMagento code debugging
Magento code debugging
 
Meet Magento Belarus debug Pavel Novitsky (rus)
Meet Magento Belarus debug Pavel Novitsky (rus)Meet Magento Belarus debug Pavel Novitsky (rus)
Meet Magento Belarus debug Pavel Novitsky (rus)
 
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
 
Основые безопасности WordPress
Основые безопасности WordPressОсновые безопасности WordPress
Основые безопасности WordPress
 
Парсер: что? зачем? как?
Парсер: что? зачем? как?Парсер: что? зачем? как?
Парсер: что? зачем? как?
 

Everything You Need to Know About WP_Query, WordCamp Russia 2014