WordPress как на ладони
wordpress jino

wp() WP 2.0

Устанавливает основной запрос (среду WordPress).

Что именно делает wp()?

  • устанавливает или переопределяет глобальные переменные: $wp_query, $wp_the_query;

  • устанавливает header заголовок (в том числе "ошибка 404");

  • создает запрос в базу данных, на основе переданных аргументов (параметр $query_vars), результатами запроса заполняет глобальные переменные;

  • устанавливает глобальные переменные, такие как: $query_string, $posts, $post, $request, $more и $single (для is_singular()), $authordata (для is_author()) и все переменные $wp_query:

    Array
    (
    [page] => 0
    [pagename] => s
    [error] => 
    [m] => 
    [p] => 0
    [post_parent] => 
    [subpost] => 
    [subpost_id] => 
    [attachment] => 
    [attachment_id] => 0
    [name] => s
    [static] => 
    [page_id] => 0
    [second] => 
    [minute] => 
    [hour] => 
    [day] => 0
    [monthnum] => 0
    [year] => 0
    [w] => 0
    [category_name] => 
    [tag] => 
    [cat] => 
    [tag_id] => 
    [author] => 
    [author_name] => 
    [feed] => 
    [tb] => 
    [paged] => 0
    [comments_popup] => 
    [meta_key] => 
    [meta_value] => 
    [preview] => 
    [s] => 
    [sentence] => 
    [fields] => 
    [menu_order] => 
    [category__in] => Array
    	(
    	)
    
    [category__not_in] => Array
    	(
    	)
    
    [category__and] => Array
    	(
    	)
    
    [post__in] => Array
    	(
    	)
    
    [post__not_in] => Array
    	(
    	)
    
    [tag__in] => Array
    	(
    	)
    
    [tag__not_in] => Array
    	(
    	)
    
    [tag__and] => Array
    	(
    	)
    
    [tag_slug__in] => Array
    	(
    	)
    
    [tag_slug__and] => Array
    	(
    	)
    
    [post_parent__in] => Array
    	(
    	)
    
    [post_parent__not_in] => Array
    	(
    	)
    
    [author__in] => Array
    	(
    	)
    
    [author__not_in] => Array
    	(
    	)
    
    [ignore_sticky_posts] => 
    [suppress_filters] => 
    [cache_results] => 1
    [update_post_term_cache] => 1
    [update_post_meta_cache] => 1
    [post_type] => 
    [posts_per_page] => 10
    [nopaging] => 
    [comments_per_page] => 10
    [no_found_rows] => 
    [order] => DESC
    )

Функция работает на основе класса WP{}

Для лучшего понимания, как работает эта функция прочитайте описание хука request

wp() можно использовать, чтобы полностью переписать основной запрос WordPress. Т.е. вызов функции с параметрами изменит множество глобальных переменных и $wp_query в том числе, а значит измениться основной цикл вывода.

Не рекомендую использовать функцию, если вы не уверены в том что делаете. Для изменения основного цикла есть query_posts(), после которого можно вернутся к оригинальному запросу, почистив изменения функцией wp_reset_query(). В случае с wp() сделать это уже не получится.

В конце работы функции срабатывает хук-событие wp.

Хуков нет.

Возвращает

Ничего не возвращает.

Использование

wp( $query_vars );
$query_vars(строка/массив)
Параметры запроса. Принимает все те же параметры что и WP_Query.
По умолчанию: Параметры по умолчанию

Примеры

#1 Демонстрация работы

Предположим, что у нас есть постоянная страница. В самом начале кода страницы вызовем функцию так:

<?php wp('author=1&orderby=title&order=ASC'); ?>

Далее идет стандартный вывод цикла.

В результате в цикле будут выведены посты автора с ID = 1, отсортированные по заголовку записи.

Также на этой странице будет срабатывать условный тег is_author(), а не is_single().

Код wp: wp-includes/functions.php VER 4.9.7

<?php
function wp( $query_vars = '' ) {
	global $wp, $wp_query, $wp_the_query;
	$wp->main( $query_vars );

	if ( !isset($wp_the_query) )
		$wp_the_query = $wp_query;
}

Cвязанные функции

Из метки: query (запрос)

Еще из раздела: Основной запрос WP

5 комментов
  • campusboy2856 cайт: www.youtube.com/c/wpplus

    Не знаю какая функция может сделать следующее. У нас есть рубрика и страница, которые доступны по одному и тому же адресу. Так было сделано умышлено, но мы рассчитывали, что при посещении этой страницы будет она главной так сказать (объект страницы, контент страницы и так далее), но отображается рубрика. Можно как то переписать запрос, чтобы по этому адресу открывалась страница, а не рубрика? smile

    Ответить2.2 года назад #
    • Kama5410

      А как рубрика без префикса cat доступна? Удаляется он что ли?

      В общем, в любом случае, нужно добавить правило-исключение в глобальную переменную $wp_rewrite, чтобы это правило было выше правила рубрик.

      Попробуй сделать так:

      add_action('init', function(){
      	add_rewrite_rule( '^(mypage)/?', 'index.php?pagename=$matches[1]', 'top' );
      	// если есть пагинация
      	//add_rewrite_rule( '^(mypage)/page/?([0-9]{1,})/?$', 'index.php?pagename=$matches[1]&paged=$matches[2]', 'top' );
      });

      Где mypage - ярлык нужной страницы.

      1
      Ответить2.2 года назад #
      • campusboy2856 cайт: www.youtube.com/c/wpplus

        А как рубрика без префикса cat доступна? Удаляется он что ли?

        Я всегда убираю его, не нравится он мне, урл только удлиняет.

        Что-то попробовал пример (засунул в фанкшн) и не сработало. Дело осложняет моя дубость в этом вопросе.

        Ответить2.2 года назад #
      • campusboy2856 cайт: www.youtube.com/c/wpplus

        В общем, с помощью хука wp я подменил данные от рубрики данными как в страницах (сравнил что выдает var_dump ($wp) там и там и сделал всё, чтобы стало идентичные данные в рубрике). И что? А ничего. Как была рубрика, так и осталась smile То есть перезаписывание такого запроса что-то нифига ни на что не влияет в принципе, что меня удивило.

        Ответить2.2 года назад #
        • Kama5410

          Там нужно изменить is_page = true и is_category = false и установить queried_object = get_post(ID). Но это не совсем правильно. По идее в правилах перезаписи надо это сделать, чтобы ВП сам потом все устанавливал. Очень странно что правила перезаписи не сработали.

          Потом еще момент, ты ЧПУ настройки сбросил после установки моего кода? Хотя вроде это не обязательно, но не факт...

          Странно что на категорию кидает он, когда запрос страницы идет, значит ЧПУ категории срабатывает раньше - я не вижу другого объяснения. Вот это надо изменить... Вообще ЧПУ страниц идет где-то в конце правил, но этот хук мой должен был все поправить по идее.

          Каким плагом вырубаешь префикс категорий? я может смоделирую ситуацию и гляну что там не так...

          Покажи мне переменную $GLOBALS['wp_rewrite'] на момент события wp_loaded

          1
          Ответить2.2 года назад #
Здравствуйте, !     Войти . Зарегистрироваться