Includere un file PHP esterno in un Template Personalizzato di WordPress

26 ago 2013, 10:31:53
Visualizzazioni: 88.4K
Voti: 7

È possibile includere un file PHP esterno in un template personalizzato?

Sto cercando di aggiungere un blog nel mio sito. Ho già il layout di header, footer e sidebar nel mio sito. Posso utilizzarli nel mio template personalizzato?

<?php
/*
Template Name: Blog
*/
?>
<?php include( PATH . 'http://www.example.com/includes/header.php' );  ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

<div <?php post_class() ?> id="post-<?php the_ID(); ?>">
  <h2><a href="<?php the_permalink() ?>">
    <?php the_title(); ?>
    </a></h2>
  <?php include (TEMPLATEPATH . '/inc/meta.php' ); ?>
  <div class="entry">
    <?php the_content(); ?>
  </div>
  <div class="postmetadata">
    <?php the_tags('Tags: ', ', ', '<br />'); ?>
    Pubblicato in
    <?php the_category(', ') ?>
    |
    <?php comments_popup_link('Nessun Commento &#187;', '1 Commento &#187;', '% Commenti &#187;'); ?>
  </div>
</div>
<?php endwhile; ?>
<div class="mypagination">
  <?php include (TEMPLATEPATH . '/inc/nav.php' ); ?>
</div>
<?php else : ?>
<h2>Non Trovato</h2>
<?php endif; ?>
<?php include( PATH . 'http://www.example.com/includes/sidebar.php' );  ?>
<?php include( PATH . 'http://www.example.com/includes/footer.php' );  ?>

Ho anche provato:

<?php include('http://mywebsite.com/includes/header.php'); ?>
4
Commenti

Dai un'occhiata a http://codex.wordpress.org/Integrating_WordPress_with_Your_Website dovrebbe rispondere alla tua domanda.

Mark Davidson Mark Davidson
26 ago 2013 10:37:28

Puoi usarlo. Qual è il problema che stai riscontrando?

Vinod Dalvi Vinod Dalvi
26 ago 2013 10:39:35

ciao, ho semplicemente copiato i miei file all'interno della cartella di WordPress e li ho collegati correttamente.. comunque, qual è la risposta a questa domanda? Ottengo solo una pagina bianca vuota

Jeremi Liwanag Jeremi Liwanag
26 ago 2013 17:07:19

Per essere chiari, stai cercando di includere file che si trovano su un sito esterno? Se è così, le attuali autorizzazioni dei file php sul sito consentono l'accesso in lettura pubblico a questi file?

iyrin iyrin
13 feb 2014 16:08:13
Tutte le risposte alla domanda 6
0

No, non puoi includere file PHP in un tema nel modo che hai indicato.

Per capire perché, basta applicare un po' di buon senso e pensiero critico di base:

  1. Staresti facendo una richiesta remota a un server remoto include non può fare questo
  2. Se per qualche miracolo funzionasse, avresti un grave problema di sicurezza perché potrei fare qualcosa come: include( 'http://yoursite/wp-config.php' ); echo DB_PASSWORD;. Immagina quanto sarebbe facile hackerare i siti web! Cosa mi impedirebbe di includere facebook.com/index.php ?
  3. Anche se funzionasse in qualche modo, e fosse sicuro, immagina la lentezza! Fai una richiesta al server, e poi il server ne fa un'altra per l'header, un'altra per la sidebar, un'altra per il footer, tutta quell'attesa, chi avrebbe la pazienza?
  4. Ma infine, anche se include potesse fare richieste remote. Cosa che non può, perché dovrebbe restituire codice PHP? Non restituirebbe quello che il server restituisce, cioè l'html finale? Il server esegue qualsiasi PHP prima che venga restituito, quindi non ci sarebbe PHP in quello che includi..

Quindi no, non è possibile. Ma un rapido copia e incolla del codice nella tua domanda in uno script PHP seguito da una rapida visita ti avrebbe detto questo più velocemente di chiunque qui.

Invece, puoi includere solo file dal file system locale su cui il tuo server è in esecuzione. Non dovresti mai passare un URL a un'istruzione include o require.

Quindi se sono in index.php, e c'è un file nella stessa cartella chiamato sidebar.php, lo includerei così:

include('sidebar.php');

include restituisce un valore se fallisce. La semantica dell'istruzione include è PHP di base generale ed è fuori tema su questo sito di domande e risposte.

Tuttavia ho tenuto aperta questa domanda perché c'è una funzione API di WordPress che dovresti usare invece ed è migliore di include e require per quello che ti serve.

Per includere una parte di template in un tema, usa:

get_template_part( 'partname' );

Questa funzione cercherà anche all'interno di un tema figlio o genitore la parte che hai specificato.

Ad esempio, in questo codice:

get_template_part( 'sidebar', 'first' );

Cercherà e includerà il primo che trova tra questi:

  • tema figlio sidebar-first.php
  • tema genitore sidebar-first.php
  • tema figlio sidebar.php
  • tema genitore sidebar.php

Va notato che dovresti usare get_template_part solo per includere file di template. Non usarlo per includere file come librerie o altri file PHP che non generano html.

Suggerisco di leggere i seguenti argomenti prima di continuare:

  • le funzioni include e require su PHP.Net
  • temi genitore e figlio
  • la gerarchia dei template e come WordPress sceglie quale template usare
  • <?php php ?> <?php tag ?> <?php spam ?> <?php and ?> <?php why ?> <?php its ?> <?php bad ?>
  • get_template_part
  • l'API WP_HTTP, per quelle volte in cui hai davvero bisogno di fare una richiesta remota a un'API. Funzioni come wp_remote_get e wp_remote_post ti aiuteranno qui.
  • Debugging PHP. Le tue pagine bianche sono errori fatali PHP, ma poiché hai la registrazione degli errori impostata per nasconderli al front end, vengono registrati in un file di log degli errori di cui non sei a conoscenza. Trova il tuo log degli errori, definisci WP_DEBUG nel tuo wp-config.php e installa un plugin come debug bar o query monitor, questi ti aiuteranno enormemente. Assicurati di chiamare wp_footer nel footer dei tuoi template però.
25 mar 2014 02:31:04
0

supponi di avere questo scenario:

La tua installazione WordPress è ospitata nella cartella root 'www' come tuo sito, e il tuo header.php si trova nella cartella 'www/includes'.

Nel tuo tema WordPress, aggiungi semplicemente

<?php
include('includes/header.php');
?>

Quando WordPress legge i file del tema, utilizza il percorso root.

13 feb 2014 13:37:39
1

Non puoi includere una risorsa esterna nelle funzioni include()! Include lavora con percorsi interni al server. Non puoi includere un url come desideri. È un problema di sicurezza PHP!

Puoi usare:

get_file_contents('http://your.url'); 

oppure usare una libreria Curl.

3 feb 2014 11:35:08
Commenti

Per favore, aggiungi una buona dose di spiegazioni alle tue risposte per aiutare l'utente a comprendere il tuo punto di vista.

Maruti Mohanty Maruti Mohanty
3 feb 2014 13:11:50
0

Per Child Theme:

<?php echo get_stylesheet_directory_uri().'/subfoldername/add.php';?>

Puoi utilizzare

Per Parent Theme: get_template_directory() o get_template_directory_uri()
Per Child Theme: get_stylesheet_directory() o get_stylesheet_directory_uri()
24 apr 2018 16:04:10
0

Quando ho controllato i file core ho trovato il seguente codice nel file wp/wp-includes/general-template.php per la funzione get_header()

Ho trovato le seguenti righe

$templates[] = 'header.php';

locate_template( $templates, true );

Quindi lo sto usando nel mio codice (index.php) in questo modo

<?php get_header();

    $myphpfile[] = 'grid.php';
    locate_template( $myphpfile, true );
?>
12 gen 2017 10:16:29
0

Potrebbe non essere elegente commentare una domanda così vecchia, ma recentemente ho dovuto fare qualcosa di simile e ho trovato questo risultato utilizzando un metodo non mostrato qui. Lo annoto per i futuri esploratori ;).

Il mio caso d'uso era:

  • Wordpress installato in una sottodirectory
  • Volevo includere elementi di header/footer dal sito principale, invece di usare Wordpress per questi elementi

Dato che include() o require() possono utilizzare percorsi assoluti del server (es: /var/www/vhosts/foo.bar/httpdocs/includes/baz.php), possiamo usare la definizione ABSPATH di Wordpress per generare questo:

include( dirname( ABSPATH ) . '/includes/header.php' );

questo restituirà /var/www/vhosts/foo.bar/httpdocs/includes/baz.php.

Anche quando Wordpress è in una sottodirectory (es: /var/www/vhosts/foo.bar/httpdocs/blog/), dirname( ABSPATH ) ci dà comunque la root del documento.

Potrebbero esserci altri modi per fare questo, usando ad esempio il superglobale $_SERVER['DOCUMENT_ROOT'], ma non ho esplorato quella strada.

5 mag 2020 02:01:48