Folosește un fișier template pentru un URL specific fără a crea o pagină
Mă întreb dacă este posibil să folosesc un fișier template pentru un URL specific fără a fi nevoit să creez o pagină pentru acel template.
Aceasta este problema mea simplificată:
Am creat o pagină în WordPress cu niște linkuri care trimit către un URL specific cu parametri în query string: (mysite.com/retail/?a=test&b=1234).
Vreau ca acel URL (retail) să folosească automat fișierul meu template template-retail.php pe care îl am în directorul temei copil, fără a trebui să creez o pagină numită "retail" și să selectez template-ul de acolo. În fișierul template-retail.php există doar conținut extern, nimic din WordPress.
Este posibil acest lucru?

Poți pur și simplu să te uiți la URL, să încarci fișierul și să ieși.
Aceasta poate fi realizată când WordPress a încărcat mediul său, de exemplu pe 'init'
.
add_action('init', function() {
$url_path = trim(parse_url(add_query_arg(array()), PHP_URL_PATH), '/');
if ( $url_path === 'retail' ) {
// încarcă fișierul dacă există
$load = locate_template('template-retail.php', true);
if ($load) {
exit(); // ieși doar dacă șablonul a fost găsit și încărcat
}
}
});
Reține că, făcând acest lucru, o pagină reală cu slug-ul "retail" nu poate fi niciodată utilizată.
Acest lucru este destul de simplu, dar și hardcodat, așa că dacă ai nevoie de acest lucru pentru o singură pagină, este în regulă. Dacă trebuie să controlezi mai multe URL-uri, aruncă o privire la soluția propusă în acest răspuns.

Mulțumesc pentru răspuns. Nu reușesc să fac codul de mai sus să funcționeze. Această condiție nu este niciodată adevărată: "if ( $url_path === 'retail' ) {" Variabila $url_path este un șir cu valoarea: "http://example.com/retail"

Încearcă să folosești var_dump($url_path);
și vezi cum arată, apoi ajustează codul. Acea valoare depinde de adresa URL reală. De exemplu, pentru un URL personalizat al paginii de start, sau pentru WordPress instalat într-un subfolder, poate fi diferită. @Keat

Mulțumesc pentru răspuns și îmi cer scuze pentru întârziere.
Am folosit această soluție și funcționează perfect.
$url_path = trim(parse_url(add_query_arg(array()), PHP_URL_PATH), '/');
$templatename = 'retail';
$pos = strpos($url_path, $templatename);
if ($pos !== false) {

Salut, tocmai am încercat acest lucru și a încărcat șablonul meu fără probleme, dar am observat că câteva alte elemente din pagină nu funcționează, de exemplu am un echo do_shortcode()
în header dar nu funcționează și shortcode-ul real este afișat - are asta legătură cu faptul că WordPress nu inițializează acestea odată ce șablonul s-a încărcat din cauza exit()
?

Acțiunea init
nu este potrivită pentru ceea ce încerci să realizezi. Ar trebui să folosești filtrul template_include
în schimb. Poți combina acest lucru cu get_query_var
pentru a prelua parametrii din URL și a verifica ce șablon trebuie încărcat. Iată link-urile:
- https://developer.wordpress.org/reference/hooks/template_include/
- https://developer.wordpress.org/reference/functions/get_query_var/
Cod:
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;
}

Modul WordPress de a face acest lucru este prin utilizarea page-templates
. https://developer.wordpress.org/themes/template-files-section/page-template-files/
Ai nevoie doar de un cod pentru șablonul WordPress. În tema ta WordPress poți crea un șablon de pagină și să îl redenumești în
page-id.php
Această pagină specifică va prelua automat șablonul și îl va folosi.
De exemplu, dacă pagina ta are ID-ul 5874, vei denumi șablonul page-5784.php
De asemenea, poți denumi șablonul în funcție de slug-ul paginii. De exemplu, dacă slug-ul paginii este hello-world
, atunci numele șablonului va fi page-hello-world.php
Vezi și: - https://developer.wordpress.org/files/2014/10/template-hierarchy.png

@shivanand-sharma aceasta este o metodă perfectă și mai curată (https://developer.wordpress.org/themes/template-files-section/page-template-files/) pentru a crea orice pagină ca oricare alta în WordPress, iar dacă doriți să ascundeți pagina, folosesc un plugin simplu și eficient 'https://wordpress.org/plugins/exclude-pages/'.
Trebuie să spun că aveam nevoie de un URL pentru a face POST sau GET către propria pagină și a salva niște date de sesiune 'WC()->session', iar această soluție rezolvă această problemă și altele, deoarece puteți avea o structură de cod PHP personalizat care include tot 'require('wp-load') etc' din întregul WordPress, WooCommerce etc pentru a lucra prin intermediul mysite.com/index.php/MYPAGINĂ .....
Trebuie doar să :
Primul pas: Creați un fișier în locația temei ca șablon al noii pagini, de exemplu 'wp-content/themes/mytheme/customtemplate.php' (Comentariul este important pentru ca 'Template Name' să fie observat de WordPress) :
<?php /* Template Name: NumeOricare */
echo 'Salut Lume';echo '</br>';
var_dump(WC()->session);
var_dump($_POST);
var_dump($_GET);
?>
Al doilea pas: Creați o pagină în WordPress în mod normal prin 'wp-admin' > Pagini (De exemplu un nume ca MYPAGINĂ, sau puteți modifica slug-ul după preferință) și desigur legați șablonul anterior ca șablon al acestei pagini care are numele 'NumeOricare' în secțiunea de atribute ale șablonului.
Deci, haideți să deschidem noua pagină 'mysite.com/index.php/MYPAGINĂ' și veți vedea.
Salut Lume
object(WC_Session_Handler)#880 .....................
Extra: Haideți să creăm funcții JavaScript sau jQuery în coș, finalizare comandă, sau orice vă puteți imagina în interiorul tag-urilor 'script' HTML și să includem cod ca acesta:
var data = { action : actionName, dataA : etcA, dataB : etcB}
$.ajax({
type: 'post',
url: 'index.php/MYPAGINĂ',
data: data,
success: function( response ) {
},
complete: function() {
}
});
