Intereting Posts
Отображение дочерних страниц на родительской странице: 404 коротких сообщений об ошибках на странице Предупреждение об ошибке: Объявление описания_walker :: start_el после обновления PHP Содержание на основе местоположения Для чего WP генерирует миниатюры? показать 10 последних пользовательских типов сообщений, исключая одно (ие) из конкретной пользовательской таксономии Есть ли способ переопределить тег <title>, указанный в header.php? Какой плагин может выполнять горизонтальную прокрутку RSS-каналов в WordPress Как получить post_name при просмотре? Как избежать переопределения requirejs в плагине, когда другой плагин также использует requirejs Получение внутреннего сервера на страницах подпапок Как создать короткий код для отображения описания категории? Отображение пользовательских типов сообщений на странице архива с массивом Как показать разные подсайты на основе имени пользователя участника В прессе? Есть ли способ удалить или скрыть отдельные страницы на экране «Редактировать страницы»? Удалить родителя из пользовательского типа сообщения

Создание настраиваемых php-файлов в папке темы

Я разрабатываю тему электронной коммерции, которая требует страницы заказа. Я создал php-файл внутри папки темы с именем order-page.php и надеюсь получить доступ к этой странице из корневого url wordpress (example.com/order-page)

add_action('template_redirect', 'template_redirect'); function template_redirect(){ $basename = basename($_SERVER['QUERY_STRING']); echo $basename; if($basename=='order-page'){ loadCustomTemplate(TEMPLATEPATH."/$basename.php"); } } function loadCustomTemplate($template) { global $wp_query; if(!file_exists($template)){ return; } $wp_query->is_page = true; $wp_query->is_single = false; $wp_query->is_home = false; $wp_query->comments = false; // if we have a 404 status if ($wp_query->is_404) { // set status of 404 to false unset($wp_query->query["error"]); $wp_query->query_vars["error"]=""; $wp_query->is_404=false; } // change the header to 200 OK //header("HTTP/1.1 200 OK"); //load our template include($template); exit; } 

Проблема № 1 : с помощью функции, указанной выше, я могу использовать только example.com/?orderpage, чтобы получить то, что хочу. Если я использую example.com/order-page, я получаю url not found ошибку.

Проблема № 2 : когда у меня есть несколько параметров, эта функция больше не работает. Например, если у меня есть:

 example.com/?order-page&product_id=001&type=digital 

$basename вернет order-page&product_id=001&type=digital

Использование $query_array=explode('&',$basename) и получение $query_array[0] – одно из возможных решений. Есть лучший способ сделать это?

Вы должны взглянуть на страницу иерархии WordPress в документации. Здесь это важная часть: page- {slug} .php – Если slug-страница является последней новостью, WordPress будет использовать страницу-recent-news.php

http://codex.wordpress.org/Template_Hierarchy

Проблема № 1:

Вы можете создать настраиваемый php-файл для своей страницы, используя шаблон страницы

Шаблоны страниц

WordPress ищет файлы шаблонов в следующем порядке:

  1. Шаблон страницы. Если на странице установлен специальный шаблон, WordPress ищет этот файл и, если найден, использует его.
  2. page- {slug} .php – Если пользовательский шаблон не был назначен, WordPress ищет и использует специализированный шаблон, содержащий пул страницы.
  3. page- {id} .php. Если специализированный шаблон, содержащий пул страницы, не найден, WordPress ищет и использует специализированный шаблон с именем страницы.
  4. page.php. Если специализированный шаблон, содержащий идентификатор страницы, не найден, WordPress ищет и использует шаблон страницы по умолчанию для темы.
  5. index.php. Если какие-либо конкретные шаблоны страниц не назначены или не найдены, WordPress по умолчанию возвращается к использованию индексного файла темы для визуализации страниц.

В вашем сценарии ваш файл шаблона страницы будет page-order-page.php , WordPress затем загрузит этот файл, когда кто-то обратится (example.com/order-page).

Проблема № 2:

Для проблемы 2 вам нужно будет зарегистрировать переменные запроса, используя фильтр query_vars .

 function wpse169050_register_query_vars( $vars ) { $vars[] = 'product_id'; $vars[] = 'type'; return $vars; } add_filter( 'query_vars', 'wpse169050_register_query_vars' ); 

Тогда ваш URL-адрес заказа с переменными будет

 example.com/order-page/?product_id=001&type=digital 

Затем вы можете получить значение для обеих переменных, используя get_query_var в файле шаблона:

 $product_id = get_query_var('product_id'); $type = get_query_var('type');