it-swarm.com.de

Verwenden Sie eine Vorlagendatei für eine bestimmte URL, ohne eine Seite zu erstellen

Ich frage mich, ob es möglich ist, eine Vorlagendatei für eine bestimmte URL zu verwenden, ohne eine Seite für diese Vorlage erstellen zu müssen.

Das ist mein vereinfachtes Problem:

Ich habe eine Seite in WP mit einem Linkinhalt erstellt, der auf eine bestimmte URL mit nachfolgenden Formulardaten verweist: (mysite.com/retail/?a=test&b=1234) .

Ich möchte, dass diese URL (Einzelhandel) automatisch meine Vorlagendatei template-retail.php verwendet, die ich im untergeordneten Themenverzeichnis habe, ohne dass eine Seite mit dem Namen "Einzelhandel" erstellt und die Vorlagenseite von dort aus ausgewählt werden muss. Die Datei template-retail.php enthält nur externen Inhalt, nichts von Wordpress.

Ist das möglich?

11
Keat

Sie können sich nur die URL ansehen, die Datei laden und beenden.

Dies kann erfolgen, wenn WordPress seine Umgebung geladen hat, z. am '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
     }
  }
});

Beachten Sie, dass eine real -Seite mit dem Zusatz "retail" niemals verwendet werden kann.

Dies ist ziemlich einfach, aber auch hartcodiert. Wenn Sie dies für eine einzelne Seite benötigen, ist dies in Ordnung. Wenn Sie mehr URLs kontrollieren möchten, schauen Sie sich die in diese Antwort vorgeschlagene Lösung an.

12
gmazzap

Die Aktion init ist für das, was Sie erreichen möchten, nicht geeignet. Sie sollten stattdessen den Filter template_include verwenden. Sie können dies mit get_query_var kombinieren, um die URL-Parameter abzurufen und zu überprüfen, welche Vorlage geladen werden muss. Hier sind die Links:

Code:

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

Der WordPress-Weg dazu ist mit page-templates. https://developer.wordpress.org/themes/template-files-section/page-template-files/

Sie benötigen nur einen Code für die WordPress-Vorlage. In Ihrem WordPress-Theme können Sie eine Seitenvorlage erstellen und in umbenennen

page-id.php

Diese bestimmte Seite nimmt sie automatisch auf und verwendet die Vorlage.

Wenn Ihre Seite beispielsweise eine ID von 5874 hat, geben Sie der Vorlage den Namen page-5784.php.

Sie können die Vorlage auch basierend auf dem Seiten-Slug benennen. Lautet der Seitensprung beispielsweise "hello-world", lautet der Vorlagenname "page-hello-world.php".

Siehe auch: - https://developer.wordpress.org/files/2014/10/template-hierarchy.png

1

@ Shivanand-Sharma Dies ist die perfekte und sauberere Methode ( https://developer.wordpress.org/themes/template-files-section/page-template-files/ ), um eine Seite wie jede andere in WordPress zu erstellen. und wenn du deine Seite verstecken willst, benutze ich einfach das einfache und effektive Plugin ' https://wordpress.org/plugins/exclude-pages/ '

Ich muss sagen, dass ich eine URL brauchte, umPOSToderGETauf meine eigene Seite zu stellen und einige Sitzungsdaten 'WC () -> session' zu speichern, und dies behebt dieses und andere Probleme, weil Sie ein Backbone von benutzerdefiniertem PHP-Code haben können, einschließlich aller 'require (' wp-load ') etc' des gesamten Wordpress, Woocommerce etc um damit zu arbeiten, mysite.com/index.php/MYPAGE .....

Sie müssen nur:

Erstens: Erstellen Sie eine Datei in Ihrem Themenverzeichnis als Vorlage für die neue Seite, etwa 'wp-content/themes/mytheme/customtemplate.php' (Kommentar ist wichtig, damit der 'Vorlagenname' beachtet werden kann von Wordpress):

<?php /* Template Name: WhateverName */ 
echo 'Hello World';echo '</br>';
var_dump(WC()->session); 
var_dump($_POST);
var_dump($_GET);
?>

Zweitens: Erstelle eine Seite bei WordPress normalerweise über 'wp-admin'> Seiten (sagen wir einen Namen wieMYPAGE, oder du kannst den Slug ändern, was immer du willst) und aus Verlinken Sie natürlich die vorherige Vorlage als Vorlage für diese Seite. Der Name lautet 'WhateverName' im Abschnitt mit den Vorlagenattributen.

Öffnen wir also die neue Seite 'mysite.com/index.php/MYPAGE' und wir werden sehen.

Hello World
object(WC_Session_Handler)#880 .....................

Extras: Lassen Sie uns Javascript- oder jquery-Funktionen im Einkaufswagen erstellen, alles, was Sie sich in HTML-Tags für Skripte vorstellen können, auschecken und Code wie diesen einfügen:

var data = { action : actionName, dataA : etcA, dataB : etcB}
$.ajax({
    type:     'post',
    url:      'index.php/MYPAGE',
    data:     data,
    success:  function( response ) {
    },
    complete: function() {
    }
});
0
Jose Velandia