Est-il possible d'inclure un fichier PHP externe dans un modèle personnalisé?
J'essaie d'ajouter un blog sur mon site. J'ai déjà l'en-tête, le pied de page et la disposition de la barre latérale sur mon site. Puis-je les utiliser dans mon modèle personnalisé?
<?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 />'); ?>
Posted in
<?php the_category(', ') ?>
|
<?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?>
</div>
</div>
<?php endwhile; ?>
<div class="mypagination">
<?php include (TEMPLATEPATH . '/inc/nav.php' ); ?>
</div>
<?php else : ?>
<h2>Not Found</h2>
<?php endif; ?>
<?php include( PATH . 'http://www.example.com/includes/sidebar.php' ); ?>
<?php include( PATH . 'http://www.example.com/includes/footer.php' ); ?>
J'ai aussi essayé:
<?php include('http://mywebsite.com/includes/header.php'); ?>
Non, vous ne pouvez pas inclure les fichiers PHP dans un thème comme vous l'avez indiqué.
Pour voir pourquoi, tout ce que nous avons à faire est d’exercer un sens commun et une pensée critique fondamentale:
include
ne peut pas faire celainclude( 'http://yoursite/wp-config.php' ); echo DB_PASSWORD;
. Imaginez comme il serait facile de pirater des sites Web! Quoi de m'arrêter, y compris facebook.com/index.php
?Donc non, ce n'est pas possible. Mais un simple copier-coller du code de votre question dans un script PHP suivi d'une visite rapide vous l'aurait dit plus rapidement que quiconque ici.
Au lieu de cela, vous pouvez uniquement inclure des fichiers du système de fichiers local sur lequel votre serveur est actuellement exécuté. Vous ne transmettriez jamais d'URL à une instruction include ou require.
Donc, si je suis dans index.php, et s'il y a un fichier dans le même dossier appelé sidebar.php, je l'inclurais comme ceci:
include('sidebar.php');
include
renvoie une valeur si cela a échoué. La sémantique de l'instruction include est une base générale PHP et ne correspond pas au sujet de ce site de questions-réponses.
Cependant, j'ai gardé cette question ouverte car il existe une fonction API WordPress que vous devriez utiliser plutôt que d'inclure et d'exiger ce dont vous avez besoin.
Pour inclure un modèle de pièce dans un thème, utilisez:
get_template_part( 'partname' );
Cette fonction examinera également à l'intérieur d'un thème enfant ou parent la partie que vous avez spécifiée.
Par exemple, dans ce code:
get_template_part( 'sidebar', 'first' );
Il cherchera et inclura le premier qu'il trouve parmi ceux-ci:
sidebar-first.php
sidebar-first.php
sidebar.php
sidebar.php
Notez que vous ne devez utiliser que get_template_part pour inclure les fichiers de modèle. Ne l'utilisez pas pour inclure des fichiers tels que des bibliothèques ou d'autres fichiers PHP qui ne génèrent pas le code HTML.
Je vous suggère de lire les sujets suivants avant de continuer:
<?php php ?> <?php tag ?> <?php spam ?> <?php and ?> <?php why ?> <?php its ?> <?php bad ?>
get_template_part
WP_HTTP
, pour ces moments authentiques, vous devez vraiment faire une demande à distance à une API. Des fonctions telles que wp_remote_get
et wp_remote_post
seront utiles ici.WP_DEBUG
dans votre wp-config.php
et installez un plug-in tel qu'une barre de débogage ou un moniteur de requêtes, ces informations vous aideront énormément. Assurez-vous cependant d'appeler wp_footer
dans le pied de page de vos modèles.supposons que vous ayez ce cénario:
Votre instalation wordpress est hébergée sur le dossier racine 'www' en tant que votre site et votre header.php sur le dossier 'www/includes'.
Dans votre thème wordpress, ajoutez simplement
<? php include ('includes/header.php'); ?>
Lorsque WordPress lit les fichiers de thème, il utilise le chemin racine.
Vous ne pouvez pas inclure de ressource externe sur les fonctions include()
! Inclure les œuvres par les chemins internes du serveur. Vous ne pouvez pas inclure une URL à votre guise. C'est un problème de sécurité PHP!
Vous pouvez utiliser:
get_file_contents('http://your.url');
ou utilisez une bibliothèque Curl.
Quand j'ai vérifié les fichiers de base, voici le code que j'ai trouvé dans le fichier wp/wp-includes/general-template.php
pour la fonction get_header()
j'ai trouvé les lignes suivantes
$templates[] = 'header.php';
locate_template( $templates, true );
Je l'utilise donc dans mon code (index.php
) comme ceci
<?php get_header();
$myphpfile[] = 'grid.php';
locate_template( $myphpfile, true );
?>
Pour le thème de l'enfant:
<?php echo get_stylesheet_directory_uri().'/subfoldername/add.php';?>
Vous pouvez utiliser
For Parent Theme: get_template_directory() or get_template_directory_uri()
For Child Theme: get_stylesheet_directory() or get_stylesheet_directory_uri()