Wie kann ich WordPress eine PHP-Seite hinzufügen?

263

Ich möchte eine benutzerdefinierte Seite für mein WordPress-Blog erstellen, die meinen PHP-Code darin ausführt und gleichzeitig Teil des gesamten CSS / Themas / Designs der Website bleibt.

Der PHP-Code verwendet APIs von Drittanbietern (daher muss ich andere PHP-Dateien einschließen).

Wie schaffe ich das?

NB: Ich habe keine spezielle Notwendigkeit, mit der WordPress-API zu interagieren. Abgesehen von bestimmten anderen PHP-Bibliotheken muss ich keine weiteren Abhängigkeiten im PHP-Code haben, den ich in eine WordPress-Seite aufnehmen möchte. Offensichtlich wäre jede Lösung, bei der die WordPress-API nicht erlernt werden musste, die beste.

Rutherford
quelle
Sie können diese Plugins verwenden: wordpress.org/extend/plugins/exec-php oder wordpress.org/extend/plugins/php-code-widget Hoffe, es wird helfen!
Michaël

Antworten:

400

Sie müssen nicht mit der API interagieren oder ein Plugin verwenden.

Duplizieren Sie zuerst post.phpoder page.phpin Ihrem Themenordner (unter /wp-content/themes/themename/).

Benennen Sie die neue Datei um in templatename.php(wobei der Vorlagenname das ist, was Sie als neue Vorlage bezeichnen möchten). Geben Sie oben in der neuen Datei Folgendes ein, um Ihre neue Vorlage zur Liste der verfügbaren Vorlagen hinzuzufügen:

<?php
/*
Template Name: Name of Template
*/
?>

Sie können diese Datei (mit PHP) ändern, um andere Dateien oder was auch immer Sie benötigen einzuschließen.

Erstellen Sie dann eine neue Seite in Ihrem WordPress-Blog. Auf dem Seitenbearbeitungsbildschirm wird rechts im Widget " Attribute" eine Dropdown-Liste " Vorlage" angezeigt . Wählen Sie Ihre neue Vorlage aus und veröffentlichen Sie die Seite.

Ihre neue Seite verwendet den in definierten PHP-Code templatename.php

Quelle: Erstellen benutzerdefinierter Seitenvorlagen für den globalen Gebrauch

Adam Hopkinson
quelle
20
Die Vorlagenoption war erst verfügbar, als ich die Datei mit dem Kommentar darin erstellt habe. Dann erschien die Vorlagenoption. Schön - ich wollte Shortcodes verwenden, aber das ist viel einfacher.
Dave Hilditch
1
Gibt es einen Nachteil bei der Verwendung eines Plugins für die Veröffentlichung von PHP?
Suhail Gupta
1
Eine Seite ist eine Seite, wenn der Browser sie als http-Anfrage ansieht - also ja.
Adam Hopkinson
3
@ DamianGreen die Frage nicht nach einem vollautomatischen Weg fragt, und zeigt in der Tat eine Präferenz für die Vermeidung der WP API
Adam Hopkinson
3
Diese Antwort fühlt sich falsch an, weil die vorhandenen Themenelemente nicht wiederverwendet, sondern kopiert werden (Absatz 2). Wenn das Thema von einem Drittanbieter bereitgestellt wird, erhält es möglicherweise Themenaktualisierungen, die nicht zu einer benutzerdefinierten Vorlage weitergeleitet werden. Darüber hinaus wird das Ändern des Erscheinungsbilds Ihrer Website komplexer. Das Ändern des Themas erfordert eine Neuerstellung der benutzerdefinierten Seite. Wäre ein Plugin aus diesen beiden Gründen nicht besser? So wie ich die Frage gelesen habe, möchte das OP zusätzliche Funktionen hinzufügen, nicht zusätzliche Themenelemente "Verwendung von APIs von Drittanbietern"
Philip Couling
29

Wenn Sie Ihre eigene .php-Datei erstellen und mit WordPress ohne 404-Header interagieren und Ihre aktuelle Permalink-Struktur beibehalten möchten, ist für diese eine Seite keine Vorlagendatei erforderlich .

Ich habe festgestellt, dass dieser Ansatz in Ihrer .php-Datei am besten funktioniert:

<?php
    require_once(dirname(__FILE__) . '/wp-config.php');
    $wp->init();
    $wp->parse_request();
    $wp->query_posts();
    $wp->register_globals();
    $wp->send_headers();

    // Your WordPress functions here...
    echo site_url();
?>

Danach können Sie einfach alle WordPress-Funktionen ausführen. Dies setzt auch voraus, dass sich Ihre .php-Datei im Stammverzeichnis Ihrer WordPress-Site befindet, auf der sich Ihre wp-config.phpDatei befindet.

Für mich ist dies eine unbezahlbare Entdeckung, da ich sie require_once(dirname(__FILE__) . '/wp-blog-header.php');am längsten verwendet habe, da WordPress Ihnen sogar sagt, dass dies der Ansatz ist, den Sie zum Integrieren von WordPress-Funktionen verwenden sollten, außer dass er 404 Header verursacht, was seltsam ist, dass sie es wünschen würden Sie diesen Ansatz zu verwenden. Integration von WordPress in Ihre Website

Ich weiß, dass viele Leute diese Frage beantwortet haben, und sie hat bereits eine akzeptierte Antwort, aber hier ist ein guter Ansatz für eine .php-Datei im Stammverzeichnis Ihrer WordPress-Site (oder technisch überall, wo Sie auf Ihrer Site wollen), die Sie durchsuchen können zu und laden ohne 404 Header!


Update: Es gibt eine Möglichkeit, wp-blog-header.phpohne 404-Header zu verwenden . Dies erfordert jedoch, dass Sie die Header manuell hinzufügen. So etwas funktioniert im Stammverzeichnis Ihrer WordPress-Installation:

<?php
    require_once(dirname(__FILE__) . '/wp-blog-header.php');
    header("HTTP/1.1 200 OK");
    header("Status: 200 All rosy");

    // Your WordPress functions here...
    echo site_url();
?>

Nur um Sie alle darüber auf dem Laufenden zu halten, wird für diesen Ansatz etwas weniger Code benötigt, aber es liegt an Ihnen, welchen Sie verwenden.

Solomon Closson
quelle
1
Es treten jedoch 404-Header auf, und selbst die Wordpress-Multisite-Datei in wp-activate.phpmuss den 404-Header deaktivieren, indem sie $wp_query->is_404 = falsebeim Aktivieren neuer Multisites require( dirname( __FILE__ ) . '/wp-blog-header.php' );oben auf dieser Seite festgelegt wird.
Solomon Closson
2
Ich verstehe nicht, wie Sie das Problem nicht neu erstellen können. Es ist sehr einfach neu zu erstellen. Installieren Sie einfach Wordpress, und erstellen Sie dann eine .php-Datei. Verwenden Sie dazu den wp-blog-header.phpunter codex.wordpress.org/Integrating_WordPress_with_Your_Website definierten Ansatz . Den Header 404 finden Sie in den Tools Ihres Browser-Inspektors.
Solomon Closson
1
Hier ist eine Webseite, die dieses Problem auch dokumentiert, falls Sie es während Ihrer intensiven Recherche zu diesem Problem verpasst haben: cooltrainer.org/…
Solomon Closson
1
Das Header-Problem tritt in den neuesten Versionen von WordPress auf, genau das habe ich in meinem ersten Kommentar vorgeschlagen. Vorsichtig mit Worten wie "scheitert nie". :)
DrewT
1
Dies ist eine sehr unangemessene Herangehensweise an ein Problem. Auf diesem Weg erstellen Sie eine Lösung, die nur funktioniert, solange WP den Bootstrap nicht ändert. Sie sollten die verfügbaren Haken nutzen, um (leicht) zu erreichen, was dies versucht.
Lawrence Johnson
13

Wenn Sie wie ich sind, möchten Sie manchmal in der Lage sein, WordPress-Funktionen auf einer Seite zu referenzieren, die im CMS nicht vorhanden ist. Auf diese Weise bleibt es backend-spezifisch und kann vom Client nicht versehentlich gelöscht werden.

Dies ist eigentlich einfach, indem Sie die wp-blog-header.phpDatei mit PHP einbinden require().

Hier ist ein Beispiel, das eine Abfragezeichenfolge verwendet, um Facebook Open Graph (OG) -Daten für jeden Beitrag zu generieren .

Nehmen wir das Beispiel einer Verbindung , wie , http://example.com/yourfilename.php?1wo 1ist die ID eines Post wir OG Daten für generieren möchten:

Der Inhalt yourfilename.phpbefindet sich nun im WordPress-Stammverzeichnis:

<?php
    require( dirname( __FILE__ ) . '/wp-blog-header.php' );

    $uri = $_SERVER['REQUEST_URI'];
    $pieces = explode("?", $uri);
    $post_id = intval( $pieces[1] );

    // og:title
    $title = get_the_title($post_id);

    // og:description
    $post = get_post($post_id);
    $descr = $post->post_excerpt;

    // og:image
    $img_data_array = get_attached_media('image', $post_id);
    $img_src = null;
    $img_count = 0;

    foreach ( $img_data_array as $img_data ) {
        if ( $img_count > 0 ) {
            break;
        } else {
            ++$img_count;
            $img_src = $img_data->guid;
        }
    } // end og:image

?>
<!DOCTYPE HTML>
<html>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=yes" />
<meta property="og:title" content="<?php echo $title; ?>" />
<meta property="og:description" content="<?php echo $descr; ?>" />
<meta property="og:locale" content="en_US" />
<meta property="og:type" content="website" />
<meta property="og:url" content="<?php echo site_url().'/your_redirect_path'.$post_id; ?>" />
<meta property="og:image" content="<?php echo $img_src; ?>" />
<meta property="og:site_name" content="Your Title" />
</html>

Da haben Sie es: Generierte Freigabemodelle für jeden Beitrag unter Verwendung des tatsächlichen Bildes, Auszugs und Titels des Beitrags!

Wir hätten eine spezielle Vorlage erstellen und die Permalink-Struktur bearbeiten können, um dies zu tun. Da diese jedoch nur für eine Seite benötigt wird und der Client sie nicht aus dem CMS löschen soll, schien dies die sauberere Option zu sein.


EDIT 2017: Bitte beachten Sie, dass dieser Ansatz jetzt veraltet ist

Informationen zu WordPress-Installationen ab 2016 finden Sie unter Wie kann ich WordPress eine PHP-Seite hinzufügen? Weitere Parameter müssen vor der Ausgabe Ihrer Seitendaten an den Browser berücksichtigt werden.

DrewT
quelle
9

Das Erstellen der Vorlagenseite ist die richtige Antwort. Fügen Sie dies einfach zu der Seite hinzu, die Sie im Themenordner erstellt haben:

<?php
    /*
    Template Name: mytemplate
    */
?>

Um diesen Code auszuführen, müssen Sie "mytemplate" als Vorlage für die Seite im Backend auswählen .

Unter diesem Link finden Sie die korrekten Details https://developer.wordpress.org/themes/template-files-section/page-template-files/ .

Peter Mortensen
quelle
5

Eine Antwort wurde nicht behandelt, wenn Sie eine PHP-Seite außerhalb des WordPress-Themas hinzufügen müssen. Das ist der Weg.

Sie müssen wp-load.php einschließen.

<?php require_once('wp-load.php'); ?>

Dann können Sie jede WordPress-Funktion auf dieser Seite verwenden.

Ich bin die dümmste Person
quelle
Diese Idee war sehr nützlich für mich. require_once('wp-load.php');
Schauen
1

Erstellen Sie eine Seite, nennen Sie sie my-page.php und speichern Sie sie in Ihrem Themenverzeichnis. Bearbeiten Sie nun diese PHP-Datei und schreiben Sie die folgende Zeile oben auf die Seite

<?php /* Template Name: My Page */ ?>

Schreiben Sie Ihren PHP-Code unter die benutzerdefinierte Seitendefinitionszeile. Sie können Ihre anderen WP-Vorlagenfunktionen in dieser Datei aufrufen.

Beginnen Sie wie <?php require_once("header.php");?>ODER

Wie auch immer Sie Ihre Kopf- und Fußzeile integrieren, um das Layout konsistent zu halten.

Da dies eine meiner Seiten ist, MÜSSEN Sie eine Seite aus dem WordPress-Admin-Bereich erstellen. Gehen Sie zu Admin => Seiten => Neu hinzufügen

Fügen Sie einen Seitentitel hinzu. Abhängig davon, wie Sie die benutzerdefinierte Seite codiert haben, können Sie auch einen Seitenkörper (Beschreibung) hinzufügen. Sie können die Beschreibung vollständig überspringen, wenn sie auf der benutzerdefinierten PHP-Seite geschrieben ist.

Wählen Sie auf der rechten Seite Vorlage aus. Wählen Sie "Meine benutzerdefinierte Seite" aus der Dropdown-Liste. Sie sind fertig! Gehen Sie zu dem von [WordPress] [1] erstellten Slug (Permalink) und sehen Sie sich die Seite an.

aschiger Thakor
quelle
1

Der beste Weg , um PHP - Seiten in Wordpress hinzufügen Page Templateim child-themeOrdner.

So erstellen Sie Page Templatein WordPress.

Erstellen Sie eine Datei mit dem Namen template-custom.phpund fügen Sie sie ein /wp-content/theme/my-theme/.

<?php
 /*
 * Template Name: Custom Template
 * Custom template used for custom php code display
 * @package   Portafolio WordPress Theme
 * @author    Gufran Hasan
 * @copyright Copyright templatecustom.com
 * @link      http://www.templatecustom.com
 */
?>
<?php get_header(); ?>
<?php
  //write code here

 ?>

<?php get_footer(); ?>

Für mehr Details

Gufran Hasan
quelle
1

Sie sollten einen Blick in die Plugin-API von WordPress werfen.

Hier erfahren Sie, wie Sie verschiedene Teile der WordPress-Mechanik "einbinden" und "filtern", sodass Sie benutzerdefinierten PHP-Code praktisch überall und zu jeder Zeit ausführen können. Dieses Verknüpfen, Filtern und Erstellen von benutzerdefiniertem Code kann in Ihrer Datei functions.php in jedem Ihrer Themen erfolgen. Viel Spaß beim Codieren :)

hsatterwhite
quelle
Ich möchte jedoch nicht wirklich mit der Wordpress-API selbst interagieren - mein PHP-Code ist völlig unabhängig von WP-Spielereien. Aber ich muss auf externe PHP-Dateien verweisen. Sind Sie sicher, dass ich in diesem Fall die API lernen muss?
Rutherford
Es hängt alles davon ab, was Sie versuchen zu tun. Die Verwendung der API kann in einigen Fällen hilfreich sein, in anderen Fällen ist dies nicht unbedingt erforderlich. Es hängt alles davon ab, was Sie erreichen wollen. Sie können dem Vorschlag von @ adam folgen und Seitenvorlagen verwenden, oder Sie können Ihren gesamten benutzerdefinierten Code in einem Warenkorb aufbewahren und dann verschiedene Teile von WordPress einbinden / filtern. Ich würde alles sagen, wählen Sie, was für Sie am besten funktioniert und womit Sie sich wohl fühlen. Alle drei Antworten werden in der einen oder anderen Form das erreichen, was Sie wollen.
hsatterwhite
1

Wenn Sie sich nicht mit der WordPress-API befassen möchten, ist Adams Antwort wirklich die beste.

Wenn Sie bereit wären, sich mit der API zu befassen, würde ich vorschlagen, sich in den "Template-Redirect" -Hook einzuhängen, mit dem Sie eine bestimmte URL oder Seite auf eine beliebige PHP-Datei verweisen können, während Sie weiterhin Zugriff auf WordPress haben.

Stephen R.
quelle
1

Die allgemein akzeptierte Antwort von Adam Hopkinson ist keine vollautomatische Methode zum Erstellen einer Seite! Ein Benutzer muss manuell eine Seite im Backend von WordPress erstellen (im wp-admin-Dash). Das Problem dabei ist, dass ein gutes Plugin ein vollautomatisches Setup haben sollte. Es sollte nicht erforderlich sein, dass Clients Seiten manuell erstellen.

Einige der anderen allgemein akzeptierten Antworten beinhalten auch das Erstellen einer statischen Seite außerhalb von WordPress, die dann nur einen Teil der WordPress-Funktionalität enthält, um die thematische Kopf- und Fußzeile zu erreichen. Obwohl diese Methode in einigen Fällen funktioniert, kann dies die Integration dieser Seiten in WordPress sehr schwierig machen, ohne dass alle Funktionen enthalten sind.

Ich denke, der beste, vollautomatische Ansatz wäre, eine Seite mit zu erstellen wp_insert_postund in der Datenbank zu speichern. Ein Beispiel und eine großartige Diskussion darüber und wie man ein versehentliches Löschen der Seite durch einen Benutzer verhindert, finden Sie hier: WordPress-Seite automatisch erstellen

Ehrlich gesagt bin ich überrascht, dass dieser Ansatz noch nicht als Antwort auf diese beliebte Frage erwähnt wurde (er wurde seit 7 Jahren veröffentlicht).

Damian Green
quelle
1
Unmittelbar nachdem ich die obige Antwort geschrieben hatte, wurde mir klar, dass die Absicht des Benutzers darin bestand, PHP in den Inhalt der Seite aufzunehmen. Dieser Ansatz lässt dies offensichtlich nicht zu. PHP kann nur zum Generieren des Inhalts verwendet werden und nicht in den Inhalt aufgenommen werden. Daher wird die Seite eher statisch als dynamisch gespeichert. Sie können der Seite jedoch ein dynamisches Erscheinungsbild verleihen, indem Sie die Seite und ihren Inhalt bei jedem Aufruf neu erstellen (indem Sie die Seiten-ID angeben). Ihr Plugin würde behandeln, wann und wie dies geschieht, möglicherweise durch Überwachen von $ _SERVER ["REQUEST_URI"]
Damian Green
2
In Ihrer Antwort sprechen Sie davon, ein versehentliches Löschen durch den Benutzer zu verhindern. Wie machst du das?
GJ
0

Versuche dies:

/**
 * The template for displaying demo page
 *
 * template name: demo template
 *
 */
Heena Patel
quelle
0

Neben dem Erstellen einer benutzerdefinierten Vorlagendatei und dem Zuweisen dieser Vorlage zu einer Seite (wie im Beispiel in der akzeptierten Antwort) gibt es auch eine Möglichkeit mit der Namenskonvention für Vorlagen, die WordPress zum Laden von Vorlagen verwendet (Vorlagenhierarchie).

Erstellen Sie eine neue Seite und verwenden Sie den Slug dieser Seite für den Vorlagendateinamen (erstellen Sie eine Vorlagendatei mit dem Namen page- {slug} .php ). WordPress lädt automatisch die Vorlage, die dieser Regel entspricht.

Danijel
quelle
0

Erstellen Sie einfach eine page-mytitle.phpDatei im Ordner des aktuellen Themas und im Dashboard eine Seite "mytitle" .

Wenn Sie dann die Seite über die URL aufrufen, wird die Seite-mytitle.php angezeigt. Sie müssen dieser PHP-Datei ( page-mytitle.php) HTML, CSS, JavaScript, wp-loop usw. hinzufügen .

Elias Katsaniotis
quelle
0

Sie können eine beliebige PHP-Datei in Ihrem Ordner für aktive Themen wie (/ wp-content / theme / your_active_theme /) hinzufügen. Anschließend können Sie eine neue Seite von wp-admin hinzufügen und diese Seitenvorlage aus den Seitenvorlagenoptionen auswählen.

<?php
/*
 Template Name: Your Template Name
 */
?>

Und es gibt noch eine andere Möglichkeit, wie Sie Ihre Datei in die Datei functions.php aufnehmen und daraus einen Shortcode erstellen können. Anschließend können Sie diesen Shortcode wie folgt in Ihre Seite einfügen.

// CODE in functions.php 

function abc(){
 include_once('your_file_name.php');
}
add_shortcode('abc' , 'abc');

Und dann können Sie diesen Shortcode auf einer wp-admin-Seite wie dieser [abc] verwenden .

Ajay Katariya
quelle
-2
<?php /* Template Name: CustomPageT1 */ ?>

<?php get_header(); ?>

<div id="primary" class="content-area">
    <main id="main" class="site-main" role="main">
        <?php
        // Start the loop.
        while ( have_posts() ) : the_post();

            // Include the page content template.
            get_template_part( 'template-parts/content', 'page' );

            // If comments are open or we have at least one comment, load up the comment template.
            if ( comments_open() || get_comments_number() ) {
                comments_template();
            }

            // End of the loop.
        endwhile;
        ?>

    </main><!-- .site-main -->

    <?php get_sidebar( 'content-bottom' ); ?>

</div><!-- .content-area -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>
Ahmed Elcheikh
quelle
-2

Sie können Ihre Datei "newpage.php" nennen - legen Sie sie in Ihrem Themenverzeichnis in ab wp-content. Sie können daraus eine Seitenvorlage machen (siehe http://codex.wordpress.org/Pages ... ) oder sie in eine der PHP-Dateien in Ihrem Thema aufnehmen, z. B. header.php oder single.php.

Erstellen Sie noch besser ein untergeordnetes Thema und fügen Sie es dort ein, sodass Sie Ihren Themencode in Ruhe lassen und es einfacher ist, ihn zu aktualisieren.

http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates

Chandra Kumar
quelle
Der Link ist halb unterbrochen: Er wird zweimal umgeleitet und es gibt keinen Unterabschnitt mit dem Namen "Erstellen eigener Seitenvorlagen" . Der nächstgelegene kann der Unterabschnitt " Seitenvorlagen " sein oder nicht . Es gibt auch die separate Seite (gleicher Name) Seitenvorlagen
Peter Mortensen
-5

Sie können die PHP-Seite auch direkt verwenden, um die PHP-Seite zu erstellen und mit vollem Pfad auszuführen.

Wie http: //localhost/path/filename.php

nim
quelle
Die Übersetzungsfunktion funktioniert jedoch nicht und wird aus irgendeinem Grund nicht geladen.
Ram4nd