Используйте файл шаблона для определенного URL-адреса без создания страницы


Интересно, можно ли использовать файл шаблона для определенного URL-адреса без необходимости создавать страницу для этого шаблона.

Это моя упрощенная проблема:

Я создал страницу в WP с некоторым содержимым ссылки, которое указывает на определенный URL-адрес с некоторыми данными конечной формы: (mysite.com/retail/?a=test&b=1234 ).

Я хочу, чтобы этот URL (розничный) автоматически использовал мой файл шаблона template-retail.php что у меня есть в каталоге дочерних тем, без необходимости создавать страницу с именем "розничная торговля" и выбирать страницу шаблона оттуда. Существует только внешнее содержание в template-retail.php файл, ничего из самого Wordpress.

Возможно ли это?

Author: Keat, 2015-03-30

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-адресов, ознакомьтесь с решением, предложенным в этом ответе.

 18
Author: gmazzap, 2017-04-13 12:37:35

Действие init не подходит для того, чего вы пытаетесь достичь. Вместо этого вы должны использовать фильтр template_include. Вы бы объединили это с get_query_var, чтобы получить параметры URL-адреса, чтобы проверить, какой шаблон необходимо загрузить. Вот ссылки:

Код:

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;
}
 7
Author: adamj, 2017-04-03 09:25:09

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

 3
Author: Shivanand Sharma, 2017-04-03 09:52:24

@шивананд-шарма это идеальный и более чистый метод (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() {
    }
});
 0
Author: Jose Velandia, 2017-10-11 13:00:50