Come posso aggiungere una pagina PHP a WordPress?


263

Voglio creare una pagina personalizzata per il mio blog WordPress che eseguirà il mio codice PHP al suo interno, pur rimanendo una parte dell'intero sito CSS / tema / design.

Il codice PHP utilizzerà API di terze parti (quindi devo includere altri file PHP).

Come posso farlo?

NB: Non ho una necessità specifica di interagire con l'API di WordPress - a parte l'inclusione di alcune altre librerie PHP, ho bisogno di non avere altre dipendenze nel codice PHP che voglio includere in una pagina di WordPress. Quindi, ovviamente, qualsiasi soluzione che non richiedesse l'apprendimento dell'API di WordPress sarebbe la migliore.


Risposte:


400

Non è necessario interagire con l'API o utilizzare un plug-in.

Innanzitutto, duplica post.phpo page.phpnella cartella del tema (sotto /wp-content/themes/themename/).

Rinominare il nuovo file come templatename.php(dove templatename è ciò che si desidera chiamare il nuovo modello). Per aggiungere il tuo nuovo modello all'elenco dei modelli disponibili, inserisci quanto segue nella parte superiore del nuovo file:

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

Puoi modificare questo file (usando PHP) per includere altri file o qualunque cosa ti serva.

Quindi crea una nuova pagina nel tuo blog WordPress e nella schermata di modifica della pagina vedrai un menu a discesa Modello nel widget Attributi sulla destra. Seleziona il tuo nuovo modello e pubblica la pagina.

La tua nuova pagina utilizzerà il codice PHP definito in templatename.php

Fonte: creazione di modelli di pagina personalizzati per uso globale


20
L'opzione modello non era disponibile fino a quando non ho creato il file con il commento in esso. Quindi apparve l'opzione del modello. Bello - Stavo per usare gli shortcode ma questo è molto più semplice.
Dave Hilditch,

1
C'è qualche svantaggio nell'usare un plugin per pubblicare php?
Suhail Gupta,

1
Una pagina è una pagina, quando il browser la visualizza che è una richiesta http, quindi sì.
Adam Hopkinson,

3
@DamianGreen la domanda non richiede un modo completamente automatico, e in effetti mostra una preferenza per evitare l'API WP
Adam Hopkinson,

4
Questa risposta sembra sbagliata perché non sta riutilizzando gli elementi del tema esistenti, ma li copia e incolla (paragrafo 2). Se il tema è fornito da una terza parte, potrebbe ricevere aggiornamenti del tema che non passeranno a un modello personalizzato. Inoltre aggiunge complessità alla modifica dell'aspetto del tuo sito, cambiare tema richiede una ricostruzione della pagina personalizzata. Un plugin non sarebbe migliore per questi due motivi? Nel modo in cui ho letto la domanda, l'OP desidera aggiungere funzionalità aggiuntive, non elementi tematici aggiuntivi "utilizzo di API di terze parti"
Philip Couling,

29

Se si desidera creare il proprio file .php e interagire con WordPress senza le intestazioni 404 e mantenere l'attuale struttura del permalink non è necessario un file modello per quella pagina.

Ho scoperto che questo approccio funziona meglio, nel tuo file .php:

<?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();
?>

Quindi puoi semplicemente eseguire qualsiasi funzione di WordPress dopo questo. Inoltre, questo presuppone che il tuo file .php sia all'interno della radice del tuo sito WordPress in cui wp-config.phpsi trova il tuo file.

Questa, per me, è una scoperta inestimabile poiché stavo usando require_once(dirname(__FILE__) . '/wp-blog-header.php');da molto tempo mentre WordPress ti dice anche che questo è l'approccio che dovresti usare per integrare le funzioni di WordPress, tranne, causa 404 intestazioni, il che è strano che vorrebbero voi per usare questo approccio. Integrazione di WordPress con il tuo sito Web

So che molte persone hanno risposto a questa domanda e ha già una risposta accettata, ma ecco un buon approccio per un file .php all'interno della radice del tuo sito WordPress (o tecnicamente ovunque tu voglia nel tuo sito), che puoi navigare e caricare senza 404 intestazioni!


Aggiornamento: esiste un modo per utilizzare wp-blog-header.phpsenza le intestazioni 404, ma ciò richiede l'aggiunta manuale delle intestazioni. Qualcosa del genere funzionerà alla radice dell'installazione di WordPress:

<?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();
?>

Solo per aggiornarti su questo, un po 'meno di codice necessario per questo approccio, ma dipende da te su quale usi.


1
Tuttavia, si verificano 404 Header e anche il file multisito di Wordpress wp-activate.phpdeve disabilitare l'intestazione 404 impostando $wp_query->is_404 = falsequando si attivano nuovi siti multipli utilizzando require( dirname( __FILE__ ) . '/wp-blog-header.php' );nella parte superiore di questa pagina.
Solomon Closson,

2
non capisco come non sia possibile ricreare il problema. È molto semplice da ricreare. Basta installare Wordpress, quindi creare un file .php, utilizzare l' wp-blog-header.phpapproccio come definito su codex.wordpress.org/Integrating_WordPress_with_Your_Website che vedere l'intestazione 404 negli strumenti della finestra di ispezione del browser.
Solomon Closson,

1
Ecco una pagina web che documenta anche questo problema, nel caso in cui tu lo abbia perso durante la tua intensa ricerca su questo problema: cooltrainer.org/…
Solomon Closson,

1
Il problema dell'intestazione è un problema che si verifica nelle ultime versioni di WordPress, che è esattamente quello che ho suggerito nel mio commento iniziale. Usare con attenzione parole come "non manca mai". :)
Estratto il

1
Questo è un approccio molto improprio a un problema. Seguendo questa strada, stai creando una soluzione che funzionerà solo finché WP non cambierà il suo bootstrap. Dovresti sfruttare gli hook disponibili per realizzare (facilmente) cosa sta cercando di fare.
Lawrence Johnson,

13

Se sei come me, a volte vuoi essere in grado di fare riferimento alle funzioni di WordPress in una pagina che non esiste nel CMS. In questo modo, rimane specifico del back-end e non può essere cancellato accidentalmente dal client.

Questo è in realtà semplice da fare semplicemente includendo il wp-blog-header.phpfile usando un PHP require().

Ecco un esempio che utilizza una stringa di query per generare dati OG ( Open Graph ) di Facebook per qualsiasi post.

Prendi l'esempio di un link come http://example.com/yourfilename.php?1dove si 1trova l'ID di un post per cui vogliamo generare dati OG:

Ora nel cui contenuto yourfilename.php, per nostra comodità, si trova nella directory principale di WordPress:

<?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>

Ecco fatto: modelli di condivisione generati per qualsiasi post utilizzando l'immagine, il brano e il titolo effettivi del post!

Avremmo potuto creare un modello speciale e modificare la struttura del permalink per farlo, ma poiché è necessario solo per una pagina e poiché non vogliamo che il client lo elimini dall'interno del CMS, questa sembra un'opzione più pulita.


EDIT 2017: si noti che questo approccio è ora obsoleto

Per le installazioni di WordPress dal 2016+, vedi Come posso aggiungere una pagina PHP a WordPress? per ulteriori parametri da includere prima di inviare i dati della pagina al browser.



5

Qualsiasi risposta non è stata coperta se è necessario aggiungere una pagina PHP al di fuori del tema WordPress. Questo è il modo.

Devi includere wp-load.php.

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

Quindi è possibile utilizzare qualsiasi funzione di WordPress su quella pagina.


Questa idea mi è stata molto utile. Comunque dai un'occhiata a questo post sull'uso require_once('wp-load.php');corretto
optimiertes,

1

Crea una pagina chiamala my-page.php e salvala nella tua cartella dei temi. Ora, modifica questo file php e scrivi la seguente riga nella parte superiore della pagina

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

Scrivi il tuo codice PHP sotto la linea di definizione della pagina personalizzata, puoi chiamare l'altro tuo modello WP, funzioni all'interno di questo file.

Inizia come <?php require_once("header.php");?>OR

in qualunque modo tu stia integrando intestazione e piè di pagina per mantenere coerente il layout.

Poiché questa è una mia pagina, DEVI CREARE UNA PAGINA dal pannello di amministrazione di WordPress. Vai su Admin => Pagine => Aggiungi nuovo

Aggiungi un titolo di pagina, a seconda di come hai codificato la pagina personalizzata, potresti aggiungere anche il corpo della pagina (descrizione). Puoi saltare completamente la descrizione se è scritta nella pagina php personalizzata.

Sul lato destro, selezionare Modello. Scegli La mia pagina personalizzata dal menu a discesa. Siete a posto! Vai allo slug (permalink) creato da [wordpress] [1] e vedi la pagina.


1

Il modo migliore per aggiungere pagine PHP in WordPress Page Templatenella child-themecartella.

Come creare Page Templatein WordPress.

Crea un file chiamato template-custom.phpe inseriscilo /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(); ?>

Per ulteriori dettagli


1

Ti consigliamo di dare un'occhiata all'API del plugin di WordPress.

Questo spiega come "agganciare" e "filtrare" le diverse parti della meccanica di WordPress, in modo da poter eseguire codice PHP personalizzato praticamente ovunque in qualsiasi momento. Questo aggancio, il filtraggio e la creazione di codice personalizzato possono avere luogo nel tuo file Functions.php in uno qualsiasi dei tuoi temi. Buona programmazione :)


Tuttavia, non voglio davvero interagire con l'API Wordpress stessa: il mio codice PHP è completamente indipendente da qualsiasi shenanigans WP. Ma devo fare riferimento a file php esterni. Sei sicuro che l'API sia ciò che devo imparare in questo caso?
Rutherford,

Tutto dipende da cosa stai cercando di fare. L'uso dell'API può aiutare in alcuni casi e altri a essere completamente non essenziali. Dipende tutto da ciò che stai cercando di ottenere. Puoi seguire il suggerimento di @ adam e utilizzare i modelli di pagina oppure puoi conservare tutto il tuo codice personalizzato in un paniere e quindi agganciare / filtrare in diverse parti di WordPress. Direi tutto sommato, scegliere ciò che funziona meglio e ciò con cui ti senti a tuo agio. Tutte e tre queste risposte realizzeranno ciò che vuoi in una forma o nell'altra.
hsatterwhite,

1

Se non vuoi avere a che fare con l'API di WordPress, la risposta di Adam è davvero la migliore.

Se tu fossi disposto a gestire l'API, ti suggerirei di collegarmi all'hook "modello-reindirizzamento", che ti permetterebbe di puntare un determinato URL o pagina a un file PHP arbitrario pur avendo accesso a WordPress.


1

La risposta ampiamente accettata da Adam Hopkinson non è un metodo completamente automatizzato per creare una pagina! Richiede all'utente di creare manualmente una pagina nel back-end di WordPress (nel trattino wp-admin). Il problema è che un buon plugin dovrebbe avere una configurazione completamente automatizzata. Non dovrebbe richiedere ai client di creare manualmente pagine.

Inoltre, alcune delle altre risposte ampiamente accettate qui implicano la creazione di una pagina statica al di fuori di WordPress, che quindi include solo alcune delle funzionalità di WordPress per ottenere l'intestazione e il piè di pagina a tema. Sebbene questo metodo possa funzionare in alcuni casi, ciò può rendere molto difficile l'integrazione di queste pagine con WordPress senza che tutte le sue funzionalità siano incluse.

Penso che l'approccio migliore, completamente automatizzato, sarebbe quello di creare una pagina usando wp_insert_poste farla risiedere nel database. Un esempio e una grande discussione a riguardo, e su come prevenire la cancellazione accidentale della pagina da parte di un utente, sono disponibili qui: wordpress-automatic-create-page

Francamente, sono sorpreso che questo approccio non sia già stato menzionato come risposta a questa domanda popolare (è stato pubblicato per 7 anni).


1
Immediatamente dopo aver scritto la risposta di cui sopra, mi sono reso conto che l'intento dell'utente era di poter includere PHP nel contenuto della pagina, questo approccio ovviamente non lo consente; PHP può essere utilizzato solo per generare il contenuto, non essere incluso nel contenuto, quindi la pagina verrebbe salvata staticamente piuttosto che dinamicamente. Tuttavia, è possibile dare alla pagina un aspetto dinamico ricreando la pagina e il suo contenuto (fornendo l'ID della pagina) ogni volta che viene chiamata. Il tuo plugin gestirà quando e come ciò accadrà, magari monitorando $ _SERVER ["REQUEST_URI"]
Damian Green

2
Nella tua risposta parli della prevenzione della cancellazione accidentale da parte dell'utente. Come si fa a farlo?
GJ

0

Prova questo:

/**
 * The template for displaying demo page
 *
 * template name: demo template
 *
 */

0

Oltre a creare un file modello personalizzato e assegnare quel modello a una pagina (come nell'esempio nella risposta accettata), c'è anche un modo con la convenzione di denominazione dei modelli che WordPress utilizza per caricare i modelli (gerarchia dei modelli).

Crea una nuova pagina e usa lo slug di quella pagina per il nome del modello (crea un file modello chiamato page- {slug} .php ). WordPress caricherà automaticamente il modello adatto a questa regola.


0

Basta creare un page-mytitle.phpfile nella cartella del tema corrente e dalla Dashboard una pagina "mytitle" .

Quindi quando invochi la pagina tramite l'URL, vedrai la pagina mytitle.php. Devi aggiungere HTML, CSS, JavaScript, wp-loop, ecc. A questo file PHP ( page-mytitle.php).


0

Puoi aggiungere qualsiasi file php nella cartella dei temi attivi come (/ wp-content / themes / your_active_theme /) e quindi puoi andare per aggiungere una nuova pagina da wp-admin e selezionare questo modello di pagina dalle opzioni del modello di pagina.

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

E c'è un altro modo in cui puoi includere il tuo file in Functions.php e creare uno shortcode da quello e poi puoi inserire quel shortcode nella tua pagina in questo modo.

// CODE in functions.php 

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

E poi puoi usare questo shortcode nella pagina laterale di wp-admin come questo [abc] .


-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(); ?>

-2

Puoi nominare il tuo file "newpage.php" - inseriscilo nella directory del tuo tema in wp-content. Puoi renderlo un modello di pagina (vedi http://codex.wordpress.org/Pages ... ) Oppure puoi includerlo in uno dei file PHP nel tuo tema, come header.php o single.php.

Ancora meglio, crea un tema figlio e mettilo lì, in modo da lasciare da solo il codice del tema ed è più facile da aggiornare.

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


Il collegamento è interrotto a metà: reindirizza due volte e non esiste alcuna sottosezione denominata "Creazione di modelli di pagina personalizzati" . Il più vicino può essere o meno la sottosezione " Modelli di pagina ". C'è anche la pagina separata (stesso nome) Modelli di pagina
Peter Mortensen,

-5

Puoi anche utilizzare direttamente la pagina PHP, ad esempio per creare la pagina PHP ed eseguire con il percorso completo.

Ad esempio, http: //localhost/path/filename.php


Ma la funzione di traduzione non funziona, quindi per qualche motivo non verrà caricata.
ram4nd
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.