web-dev-qa-db-fra.com

Où inclure les fichiers php dans wordpress et comment les consulter plus tard

Je suis en train de créer une page Web personnalisée et je suis prêt à faire référence à un fichier php à l'intérieur d'une commande ajax open(GET,"url php",true) donc ma question est de savoir où mettre mon fichier php pour qu'il soit vu par cet extrait et comment l'appeler.

Merci

3
ahmed

Vous pouvez mettre votre code dans un plugin, puis créer un point de terminaison API REST.

Par exemple, permet de créer un plugin, placez simplement un fichier PHP wp-content/plugins/ahmedsplugin.php Ou wp-content/plugins/ahmedsplugin/plugin.php Avec un commentaire en haut comme ceci:

<?php
/**
 * Plugin Name: Ahmeds Plugin
 **/

... your code goes here ...

Vous verrez maintenant "Ahmeds Plugin" dans le dossier plugins. Un plugin est juste un fichier PHP dans le dossier plugins, ou un sous-dossier du dossier plugins, qui a ce commentaire en haut.

Vous pouvez mettre ici WP du code qui s'exécutera comme des filtres, des actions, des classes, etc. Certaines personnes mettent ces choses dans leurs thèmes functions.php, Mais les thèmes sont pour les visuels/présentation, et vous perdez tout cela lorsque vous changez de thème.

Notez que ce code s'exécutera avant le chargement d'un modèle de thème et avant le hook init. Vous devriez essayer de mettre tout votre code dans des crochets pour un meilleur contrôle de son exécution.

Permet maintenant de créer un point de terminaison auquel votre javascript peut faire une demande. Commencez par dire à WP que vous souhaitez créer un point de terminaison:

add_action( 'rest_api_init', function () { // when WP sets up the REST API
        register_rest_route( // tell it we want an endpoint
                'ahmed/v1', '/test/', // at example.com/wp-json/ahmed/v1/test
                [ 
                        'methods' => 'GET', // that it handles GET requests
                        'callback' => 'ahmed_test_endpoint' // and calls this function when hit
                ]
        );
} );

Lorsque vous visitez /wp-json/ahmed/v1/test, Il exécute la fonction ahmed_test_endpoint, Permet donc de créer cette fonction:

function ahmed_test_endpoint( $request ) {
    return 'Hello World';
}

L'API REST prendra tout ce que vous retournerez, JSON le codera et l'enverra.

Vous pouvez retourner un objet WP_Error Si quelque chose ne va pas et cela changera les codes HTTP, etc. et affichera le message. Si vous avez besoin de l'un des paramètres, utilisez l'objet $request, Par exemple si vous avez ajouté ?bananas=yummy à l'URL, alors $request['bananas'] contiendra "yummy", tout comme $_GET.

N'oubliez pas de vider/réenregistrer vos permaliens lorsque vous ajoutez un nouveau point de terminaison!

Maintenant, lorsque nous allons à yoursite.com/wp-json/ahmed/v1/test, Vous verrez "Hello World"

Si vous le souhaitez, vous pouvez développer register_rest_route Pour ajouter plus d'informations, telles que les paramètres attendus par votre code, comment les valider, vérifier si l'utilisateur est connecté et autorisé à faire ce qu'il veut, etc. .

Si vous faites cela, l'API REST vous aidera même, donc si vous lui dites qu'il va y avoir un paramètre ID, mais aucun n'est donné, il vous dira que le paramètre ID est manquant. L'administrateur AJAX ou les fichiers autonomes PHP ne le feront pas, ce qui rend le débogage très difficile. Il améliore également considérablement la sécurité

Pourquoi pas un fichier PHP autonome?

  1. Les API WP ne seront pas disponibles, vous devrez donc bootstrap WP manuellement, ce qui est pénible
  2. Le point de terminaison est disponible même si votre plugin/thème est désactivé, ce qui peut poser un problème de sécurité
  3. Les autres plugins ne peuvent pas s'y connecter, donc aucun avantage de la mise en cache ou des plugins d'optimisation, il y a donc une pénalité de performance possible
  4. Vous devrez déployer tous les contrôles de sécurité vous-même, les créer manuellement, et ce n'est pas facile. WP les fera pour vous si vous utilisez l'API REST

Autrefois, la solution consistait à utiliser l'API Admin AJAX, mais cela ne fait pas grand-chose pour vous. De plus, c'est très impitoyable, si vous ne correspondez pas correctement à vos actions AJAX, vous obtenez une réponse cryptique. Il ne fait pas non plus de vérification au-delà de la connexion/déconnexion, aucune validation ou désinfection, et aucun mécanisme de découverte

5
Tom J Nowell

Si vous voulez faire du AJAX dans votre thème et vous demandez où placer le fichier PHP qui traitera une telle demande, alors ... Nulle part est la vraie réponse ...

Dans WordPress vous devez gérer AJAX un peu différent de celui des applications normales PHP. Il existe déjà un mécanisme pour de telles demandes.

Donc, tout d'abord, vous devez localiser votre script JS:

wp_localize_script( 'ajax-script', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) );

Ensuite, vous devez utiliser cette variable comme adresse de demande:

// it's important to send "action" in that request - this way WP will know which action should be processing this request
jQuery.get(ajax_object.ajax_url, {'action': 'my_action', ...}, ... );

Et puis vous devez enregistrer vos rappels qui traiteront la demande:

add_action( 'wp_ajax_my_action', 'my_action' );  // for logged in users
add_action( 'wp_ajax_nopriv_my_action', 'my_action' );  // for anonymous users
function my_action() {
    ...
}

Vous pouvez en savoir plus sur ce sujet ici:

3

Vous devriez pouvoir utiliser les fonctions définies dans vos fichiers PHP en les incluant dans votre functions.php fichier. C'est un peu difficile de mieux vous conseiller sans en savoir plus sur votre structure. Mais functions.php semble être un bon emplacement pour demander votre fichier à mon humble avis.

0
Hito