Используйте файл шаблона для определенного URL-адреса без создания страницы
Интересно, можно ли использовать файл шаблона для определенного URL-адреса без необходимости создавать страницу для этого шаблона.
Это моя упрощенная проблема:
Я создал страницу в WP с некоторым содержимым ссылки, которое указывает на определенный URL-адрес с некоторыми данными конечной формы: (mysite.com/retail/?a=test&b=1234 ).
Я хочу, чтобы этот URL (розничный) автоматически использовал мой файл шаблона template-retail.php что у меня есть в каталоге дочерних тем, без необходимости создавать страницу с именем "розничная торговля" и выбирать страницу шаблона оттуда. Существует только внешнее содержание в template-retail.php файл, ничего из самого Wordpress.
Возможно ли это?
4 answers
Вы можете просто посмотреть URL, загрузить файл и выйти.
Это можно сделать, когда WordPress загрузил свою среду, например, на 'init'
.
add_action('init', function() {
$url_path = trim(parse_url(add_query_arg(array()), PHP_URL_PATH), '/');
if ( $url_path === 'retail' ) {
// load the file if exists
$load = locate_template('template-retail.php', true);
if ($load) {
exit(); // just exit if template was found and loaded
}
}
});
Обратите внимание, что при этом реальная страница с надписью "розничная торговля" никогда не может быть использована.
Это довольно просто, но также жестко запрограммировано, так что, если вам это нужно для одной страницы, все в порядке. Если вам нужно контролировать больше URL-адресов, ознакомьтесь с решением, предложенным в этом ответе.
Действие init
не подходит для того, чего вы пытаетесь достичь. Вместо этого вы должны использовать фильтр template_include
. Вы бы объединили это с get_query_var
, чтобы получить параметры URL-адреса, чтобы проверить, какой шаблон необходимо загрузить. Вот ссылки:
- https://codex.wordpress.org/Plugin_API/Filter_Reference/template_include
- https://codex.wordpress.org/Function_Reference/get_query_var
Код:
add_filter( 'template_include', 'portfolio_page_template', 99 );
function portfolio_page_template( $template ) {
if ( is_page( 'portfolio' ) ) {
$new_template = locate_template( array( 'portfolio-page-template.php' ) );
if ( '' != $new_template ) {
return $new_template ;
}
}
return $template;
}
WordPress-способ сделать это с помощью page-templates
. https://developer.wordpress.org/themes/template-files-section/page-template-files/
Вам нужен только код для шаблона WordPress. В вашей теме WordPress вы можете создать шаблон страницы и переименовать его в
page-id.php
Эта конкретная страница автоматически выберет ее и будет использовать шаблон.
Например, если ваша страница имеет идентификатор 5874, вы назовете шаблон как page-5784.php
Вы также можете назовите шаблон на основе слага страницы. Например, если пуля страницы hello-world
, то имя шаблона будет page-hello-world.php
Также см.: - https://developer.wordpress.org/files/2014/10/template-hierarchy.png
@шивананд-шарма это идеальный и более чистый метод (https://developer.wordpress.org/themes/template-files-section/page-template-files /) чтобы создать любую страницу, как и любую другую в wordpress, и если вы хотите скрыть свою страницу, я просто использую простой и эффективный плагин 'https://wordpress.org/plugins/exclude-pages/'
Я должен сказать, что мне нужен был URL-адрес, чтобы ОПУБЛИКОВАТЬ или ПЕРЕЙТИ на мою собственную страницу и сохранить некоторые данные сеанса "WC()->сеанс", и это решает эту и другие проблемы, потому что у вас может быть основа пользовательского кода php, включая все "требующие ("wp-загрузка") и т. Д." Всего wordpress, woocommerce и т. Д. Для работы через, mysite.com/index.php/MYPAGE .....
Вам просто нужно:
Во-первых: Создайте файл внутри расположения вашей темы в качестве шаблона новой страницы, что-то вроде 'wp-content/themes/mytheme/customtemplate.php " (Комментарий важен, поэтому "Имя шаблона" может быть наблюдаемый Wordpress):
<?php /* Template Name: WhateverName */
echo 'Hello World';echo '</br>';
var_dump(WC()->session);
var_dump($_POST);
var_dump($_GET);
?>
Во-вторых: Создайте страницу в wordpress обычно через "wp-admin"> Страницы (скажем, имя, например MYPAGE, или вы можете изменить название, как хотите) и, конечно, свяжите предыдущий шаблон с шаблоном этой страницы, который называется "Какое имя" в разделе атрибутов шаблона.
Итак, давайте откроем новую страницу 'mysite.com/index.php/MYPAGE " и ты будешь видеть.
Hello World
object(WC_Session_Handler)#880 .....................
Дополнительно: Давайте создадим функции javascript или jquery в корзине, оформлении заказа, все, что вы можете себе представить внутри HTML-тегов "скрипт", и включим код, подобный этому:
var data = { action : actionName, dataA : etcA, dataB : etcB}
$.ajax({
type: 'post',
url: 'index.php/MYPAGE',
data: data,
success: function( response ) {
},
complete: function() {
}
});