Використовуйте файл шаблону для конкретного URL-адреси без створення сторінки


14

Цікаво, чи можливо використовувати файл шаблону для конкретного URL-адреси без створення сторінки для цього шаблону.

Це моя спрощена проблема:

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

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

Чи можливо це?


1
Вам потрібно створити перенаправлення HTAccess на файл, а потім обробити його запит.
Howdy_McGee

У мене немає доступу до файлу .htaccess у цьому випадку. Чи є інший спосіб?
Кіт

є плагіни, які можуть надати вам доступ до подібних речей, в будь-якому випадку вам потрібно буде завантажити спеціальний файл на сервер, щоб він щось вдарив.
Howdy_McGee

4
Не впевнений у всіх подробицях вашого проекту, але першими, що спадають на думку, є template_redirectабо кінцева точка
s_ha_dum

Відповіді:


16

Ви можете просто переглянути 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-адрес, перегляньте рішення, запропоноване в цій відповіді .


Дякую за вашу відповідь. Я не можу змусити вищезазначений код працювати. Це ніколи не відповідає дійсності: "if ($ url_path === 'роздріб") {"$ url_path є рядок зі значенням:" example.com/retail "
Кіт

Спробуйте var_dump($url_path);побачити, як це виглядає, і відрегулюйте код. Це значення залежить від вашої реальної URL-адреси. Наприклад, для власної домашньої URL-адреси або WP, встановленої в підпапках, можуть бути різними. @Keat
gmazzap

1
Дякую за відповідь і вибачте за пізню відповідь. Я використав це рішення, і воно працює ідеально. $url_path = trim(parse_url(add_query_arg(array()), PHP_URL_PATH), '/'); $templatename = 'retail'; $pos = strpos($url_path, $templatename); if ($pos !== false) {
Кіт

5

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;
}

2

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


0

@ shivanand-sharma - це ідеальний і більш чистий метод ( https://developer.wordpress.org/themes/template-files-section/page-template-files/ ) для створення будь-якої сторінки, як і будь-яка інша у wordpress, і якщо ви хочете щоб приховати вашу сторінку, я просто використовую простий та ефективний плагін ' https://wordpress.org/plugins/exclude-pages/ '

Треба сказати, що мені була потрібна URL-адреса, щоб зробити POST або GET на мою власну сторінку та зберегти деякі дані сеансу 'WC () -> session', і це вирішує цю та інші проблеми, тому що ви можете мати основу звичайних php-код, включаючи всі "вимагати ('wp-load') тощо" усього 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() {
    }
});
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.