Comment puis-je ajouter une page PHP à WordPress?

263

Je veux créer une page personnalisée pour mon blog WordPress qui y exécutera mon code PHP, tout en restant une partie de l'ensemble du site CSS / thème / design.

Le code PHP utilisera des API tierces (j'ai donc besoin d'inclure d'autres fichiers PHP).

Comment est-ce que j'accomplis ceci?

NB: Je n'ai pas de besoin spécifique d'interagir avec l'API WordPress - à part inclure certaines autres bibliothèques PHP, j'ai besoin de n'avoir aucune autre dépendance dans le code PHP que je souhaite inclure dans une page WordPress. Donc, évidemment, toute solution ne nécessitant pas l'apprentissage de l'API WordPress serait la meilleure.

rutherford
la source
vous pouvez utiliser ces plugins: wordpress.org/extend/plugins/exec-php ou wordpress.org/extend/plugins/php-code-widget J'espère que cela vous aidera!
Michaël

Réponses:

400

Vous n'avez pas besoin d'interagir avec l'API ou d'utiliser un plugin.

Tout d'abord, dupliquez post.phpou page.phpdans votre dossier de thème (sous /wp-content/themes/themename/).

Renommez le nouveau fichier en templatename.php(où templatename est ce que vous voulez appeler votre nouveau modèle). Pour ajouter votre nouveau modèle à la liste des modèles disponibles, entrez ce qui suit en haut du nouveau fichier:

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

Vous pouvez modifier ce fichier (en utilisant PHP) pour inclure d'autres fichiers ou tout ce dont vous avez besoin.

Créez ensuite une nouvelle page dans votre blog WordPress, et dans l'écran d'édition de page, vous verrez une liste déroulante Modèle dans le widget Attributs à droite. Sélectionnez votre nouveau modèle et publiez la page.

Votre nouvelle page utilisera le code PHP défini dans templatename.php

Source: création de modèles de page personnalisés pour une utilisation globale

Adam Hopkinson
la source
20
L'option de modèle n'était pas disponible jusqu'à ce que je crée le fichier avec le commentaire qu'il contient. Ensuite, l'option de modèle est apparue. Bien - j'allais utiliser des shortcodes mais c'est beaucoup plus facile.
Dave Hilditch
1
Y a-t-il un inconvénient à utiliser un plugin pour publier du php?
Suhail Gupta
1
Une page est une page, lorsque le navigateur l'affiche, il s'agit d'une demande http - alors oui.
Adam Hopkinson
3
@DamianGreen, la question ne demande pas une méthode entièrement automatisée et montre en fait une préférence pour éviter l'API WP
Adam Hopkinson
4
Cette réponse semble erronée car elle ne réutilise pas les éléments de thème existants, mais les copie-colle (paragraphe 2). Si le thème est fourni par un tiers, il peut recevoir des mises à jour de thème qui ne se répercuteront pas sur un modèle personnalisé. De plus, cela ajoute de la complexité au changement de l'apparence de votre site, le changement de thème nécessite une reconstruction de la page personnalisée. Un plugin ne serait-il pas préférable pour ces deux raisons? La façon dont je lis la question, l'OP souhaite ajouter des fonctionnalités supplémentaires, pas des éléments de thème supplémentaires "utilisation des API tierces"
Philip Couling
29

Si vous vouliez créer votre propre fichier .php et interagir avec WordPress sans en-têtes 404 et conserver votre structure de permalien actuelle, il n'y a pas besoin avoir un fichier modèle pour cette seule page.

J'ai trouvé que cette approche fonctionne mieux, dans votre fichier .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();
?>

Ensuite, vous pouvez simplement effectuer toutes les fonctions WordPress après cela. En outre, cela suppose que votre fichier .php se trouve à la racine de votre site WordPress où votrewp-config.php se trouve fichier.

C'est, pour moi, une découverte inestimable car j'utilisais require_once(dirname(__FILE__) . '/wp-blog-header.php');depuis le plus longtemps car WordPress vous dit même que c'est l'approche que vous devez utiliser pour intégrer les fonctions WordPress, sauf que cela provoque 404 en-têtes, ce qui est étrange qu'ils voudraient vous d'utiliser cette approche. Intégrer WordPress à votre site Web

Je sais que beaucoup de gens ont répondu à cette question, et elle a déjà une réponse acceptée, mais voici une belle approche pour un fichier .php à la racine de votre site WordPress (ou techniquement n'importe où dans votre site), que vous pouvez parcourir et chargez sans 404 en-têtes!


Mise à jour: Il existe un moyen d'utiliser wp-blog-header.phpsans 404 en-têtes, mais cela nécessite que vous ajoutiez les en-têtes manuellement. Quelque chose comme ça fonctionnera à la racine de votre installation 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();
?>

Juste pour vous mettre à jour sur tout cela, un peu moins de code nécessaire pour cette approche, mais c'est à vous de choisir celui que vous utilisez.

Solomon Closson
la source
1
Pourtant, les en-têtes 404 se produisent, et même le fichier multisite Wordpress wp-activate.phpdoit désactiver l'en-tête 404 en le définissant $wp_query->is_404 = falselors de l'activation de nouveaux multisites en require( dirname( __FILE__ ) . '/wp-blog-header.php' );haut de cette page.
Solomon Closson
2
je ne comprends pas comment vous ne pouvez pas recréer le problème. C'est très simple à recréer. Installez simplement Wordpress, puis créez un fichier .php, utilisez l' wp-blog-header.phpapproche définie sur codex.wordpress.org/Integrating_WordPress_with_Your_Website que voyez l'en-tête 404 dans les outils d'inspection de votre navigateur.
Solomon Closson
1
Voici une page Web qui documente également ce problème, au cas où vous l'auriez manqué lors de vos recherches intensives sur ce problème: cooltrainer.org/…
Solomon Closson
1
Le problème d'en-tête est un problème qui se produit dans les dernières versions de WordPress, c'est exactement ce que j'ai suggéré dans mon commentaire initial. Attention à utiliser des mots comme «ne manque jamais». :)
DrewT
1
Il s'agit d'une approche très inappropriée d'un problème. En empruntant cette voie, vous créez une solution qui ne fonctionnera que tant que WP ne changera pas son amorçage. Vous devriez tirer parti des crochets disponibles pour accomplir (facilement) ce que cela tente de faire.
Lawrence Johnson
14

Si vous êtes comme moi, vous voulez parfois pouvoir référencer des fonctions WordPress dans une page qui n'existe pas dans le CMS. De cette façon, il reste spécifique au backend et ne peut pas être supprimé accidentellement par le client.

C'est en fait simple à faire simplement en incluant le wp-blog-header.phpfichier en utilisant un PHP require().

Voici un exemple qui utilise une chaîne de requête pour générer Facebook Open Graph (OG) pour n'importe quelle publication.

Prenons l'exemple d'un lien comme http://example.com/yourfilename.php?11est l'ID d'un article pour lequel nous voulons générer des données OG:

Maintenant, dans le contenu yourfilename.phpdont, pour notre commodité, se trouve dans le répertoire racine de 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>

Voilà, vous avez généré des modèles de partage pour n'importe quel article en utilisant l'image, l'extrait et le titre réels de l'article!

Nous aurions pu créer un modèle spécial et modifier la structure du permalien pour ce faire, mais comme il n'est nécessaire que pour une page et parce que nous ne voulons pas que le client le supprime du CMS, cela semblait être l'option la plus propre.


EDIT 2017: veuillez noter que cette approche est désormais déconseillée

Pour les installations WordPress à partir de 2016+, veuillez consulter Comment puis-je ajouter une page PHP à WordPress? pour des paramètres supplémentaires à inclure avant la sortie des données de votre page vers le navigateur.

DrewT
la source
9

La création de la page de modèle est la bonne réponse. Pour cela, ajoutez simplement ceci dans la page que vous avez créée dans le dossier du thème:

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

Pour exécuter ce code, vous devez sélectionner "mytemplate" comme modèle de page depuis le back-end.

Veuillez consulter ce lien pour obtenir les détails corrects https://developer.wordpress.org/themes/template-files-section/page-template-files/ .

Peter Mortensen
la source
5

Aucune réponse ne couvrait si vous devez ajouter une page PHP en dehors du thème WordPress. Ceci est le chemin.

Vous devez inclure wp-load.php.

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

Ensuite, vous pouvez utiliser n'importe quelle fonction WordPress sur cette page.

Je suis la personne la plus stupide
la source
Cette idée m'a été très utile. Cependant, consultez cet article sur l'utilisation require_once('wp-load.php');correcte
optimiertes
1

Créez une page appelez-la my-page.php et enregistrez-la sous votre répertoire de thèmes. Maintenant, éditez ce fichier php et écrivez la ligne suivante en haut de la page

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

Écrivez votre code PHP sous la ligne de définition de page personnalisée, vous pouvez appeler votre autre modèle WP, des fonctions à l'intérieur de ce fichier.

Commencez comme <?php require_once("header.php");?>OU

quelle que soit la façon dont vous intégrez votre en-tête et pied de page pour garder la mise en page cohérente.

Comme il s'agit d'une page ma, vous devez créer une page à partir du panneau d'administration WordPress. Allez dans Admin => Pages => Ajouter un nouveau

Ajoutez un titre de page, selon la façon dont vous avez codé la page personnalisée, vous pouvez également ajouter le corps de la page (description). Vous pouvez ignorer complètement la description si elle est écrite dans la page php personnalisée.

À droite, sélectionnez Modèle. Choisissez Ma page personnalisée dans la liste déroulante. Vous êtes prêt! Accédez au slug (permalien) créé par [wordpress] [1] et consultez la page.

ashish thakor
la source
1

La meilleure façon d'ajouter des pages PHP dans WordPress Page Templatedans le child-themedossier.

Comment créer Page Templatedans WordPress.

Créez un fichier nommé template-custom.phpet insérez-le /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(); ?>

Pour plus de détails

Gufran Hasan
la source
1

Vous voudrez jeter un œil à l'API de plugin de WordPress.

Cela explique comment «accrocher» et «filtrer» différentes parties de la mécanique WordPress, de sorte que vous pouvez exécuter du code PHP personnalisé à peu près n'importe où à tout moment. Ce raccordement, le filtrage et la création de code personnalisé peuvent tous avoir lieu dans votre fichier functions.php dans n'importe lequel de vos thèmes. Bon codage :)

hsatterwhite
la source
Je ne veux pas vraiment interagir avec l'API Wordpress elle-même - mon code PHP est complètement indépendant de tous les manigances WP. Mais j'ai besoin de référencer des fichiers php externes. Êtes-vous sûr que l'API est ce que je dois apprendre dans ce cas?
rutherford
Tout dépend de ce que vous essayez de faire. L'utilisation de l'API peut aider dans certains cas et dans d'autres cas être complètement non essentiels. Tout dépend de ce que vous essayez de réaliser. Vous pouvez aller avec la suggestion de @ adam et utiliser des modèles de page ou vous pouvez conserver tout votre code personnalisé dans un même panier, puis accrocher / filtrer dans différentes parties de WordPress. Je dirais tout le monde, choisissez ce qui fonctionne le mieux et ce avec quoi vous vous sentez à l'aise. Ces trois réponses permettront d'accomplir ce que vous voulez sous une forme ou une autre.
hsatterwhite
1

Si vous ne voulez pas traiter avec l'API WordPress, la réponse d'Adam est vraiment la meilleure.

Si vous vouliez traiter avec l'API, je vous suggère de vous connecter au crochet "template-redirect", qui vous permettrait de pointer une URL ou une page particulière vers un fichier PHP arbitraire tout en ayant accès à WordPress.

Stephen R
la source
1

La réponse largement acceptée par Adam Hopkinson n'est pas une méthode entièrement automatisée de création d'une page! Il nécessite qu'un utilisateur crée manuellement une page dans le back-end de WordPress (dans le tableau de bord wp-admin). Le problème, c'est qu'un bon plugin devrait avoir une configuration entièrement automatisée. Il ne doit pas obliger les clients à créer manuellement des pages.

En outre, certaines des autres réponses largement acceptées ici impliquent la création d'une page statique en dehors de WordPress, qui n'inclut alors qu'une partie des fonctionnalités de WordPress pour atteindre l'en-tête et le pied de page thématiques. Bien que cette méthode puisse fonctionner dans certains cas, cela peut rendre l'intégration de ces pages avec WordPress très difficile sans avoir toutes ses fonctionnalités incluses.

Je pense que la meilleure approche, entièrement automatisée, serait de créer une page en utilisant wp_insert_postet de la faire résider dans la base de données. Un exemple et une grande discussion à ce sujet, et comment empêcher la suppression accidentelle de la page par un utilisateur, peuvent être trouvés ici: wordpress-automatically-creation-page

Franchement, je suis surpris que cette approche n'ait pas déjà été mentionnée comme réponse à cette question populaire (elle est affichée depuis 7 ans).

Damian Green
la source
1
Immédiatement après avoir écrit la réponse ci-dessus, j'ai réalisé que l'intention de l'utilisateur était de pouvoir inclure PHP dans le contenu de la page, cette approche ne le permet évidemment pas; PHP ne peut être utilisé que pour générer le contenu, pas être inclus dans le contenu, ainsi la page serait enregistrée statiquement plutôt que dynamiquement. Cependant, vous pouvez donner à la page une apparence dynamique en recréant la page et son contenu (en fournissant l'ID de la page) à chaque appel. Votre plugin gérerait quand et comment cela se produit, peut-être en surveillant $ _SERVER ["REQUEST_URI"]
Damian Green
2
Dans votre réponse, vous parlez d'empêcher la suppression accidentelle par l'utilisateur. Comment tu fais ça?
GJ
0

Essaye ça:

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

Outre la création d'un fichier de modèle personnalisé et l'attribution de ce modèle à une page (comme dans l'exemple de la réponse acceptée), il existe également un moyen avec la convention de dénomination des modèles que WordPress utilise pour charger les modèles (hiérarchie des modèles).

Créez une nouvelle page et utilisez le slug de cette page pour le nom de fichier du modèle (créez un fichier de modèle nommé page- {slug} .php ). WordPress chargera automatiquement le modèle qui correspond à cette règle.

Danijel
la source
0

Il suffit de créer un page-mytitle.phpfichier dans le dossier du thème actuel, et depuis le Dashboard une page "mytitle" .

Ensuite, lorsque vous appelez la page par l'URL, vous allez voir la page-mytitle.php. Vous devez ajouter HTML, CSS, JavaScript, wp-loop, etc. à ce fichier PHP ( page-mytitle.php).

Elias Katsaniotis
la source
0

Vous pouvez ajouter n'importe quel fichier php dans votre dossier de thèmes actifs comme (/ wp-content / themes / your_active_theme /) , puis vous pouvez ajouter une nouvelle page à partir de wp-admin et sélectionner ce modèle de page dans les options de modèle de page.

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

Et il y a une autre façon comme vous pouvez inclure votre fichier dans functions.php et créer un shortcode à partir de cela et ensuite vous pouvez mettre ce shortcode dans votre page comme ceci.

// CODE in functions.php 

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

Et puis vous pouvez utiliser ce shortcode dans la page latérale wp-admin comme ceci [abc] .

Ajay Katariya
la source
-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
la source
-2

Vous pouvez nommer votre fichier "newpage.php" - placez-le dans votre répertoire de thème dans wp-content. Vous pouvez en faire un modèle de page (voir http://codex.wordpress.org/Pages .. ) Ou vous pouvez l'inclure dans l'un des fichiers PHP de votre thème, comme header.php ou single.php.

Encore mieux, créez un thème enfant et placez-le dedans, donc vous laissez votre code de thème seul, et c'est plus facile à mettre à jour.

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

Chandra Kumar
la source
Le lien est à moitié rompu: il redirige deux fois et il n'y a pas de sous-section intitulée "Création de vos propres modèles de page" . La sous-section " Modèles de page " peut être la plus proche ou non . Il y a aussi la page séparée (même nom) Modèles de page
Peter Mortensen
-5

Vous pouvez également utiliser directement la page PHP, comme pour créer la page PHP et l'exécuter avec le chemin complet.

Comme, http: //localhost/path/filename.php

nim
la source
Mais la fonction de traduction ne fonctionne pas, donc pour une raison quelconque, elle ne sera pas chargée.
ram4nd