Je dois créer un script PHP qui recevra les données d'une autre application via une publication HTTP, traitera ces données et mettra à jour la base de données WordPress. Ce script s’exécutera en mode silencieux (c’est-à-dire sans sortie HTTP). Quelle est la meilleure façon de créer une telle page? J'ai pensé créer un fichier de modèle personnalisé avec le script PHP et attribuer ce modèle à une page WordPress vierge, mais y a-t-il une meilleure méthode à utiliser?
J'utiliserais l'API Rewrite et l'action template_redirect pour répondre aux demandes d'API.
Par exemple, si je voulais répondre à des demandes adressées à l'URL: exemple.com/exemple-trait/ avec la logique dans mon thème ou le fichier endpoint.php du plugin, je créerais une règle de réécriture et un crochet de redirection de modèle comme suit:
add_action( 'init', 'example_rewrite_rules' );
add_action( 'template_redirect', 'example_template_route' );
/**
* Add rewrite rules for Example endpoint.
*/
function example_rewrite_rules()
{
add_rewrite_rule(
'example-path/?$',
'index.php',
'top'
);
}
function example_template_route( $default_template ) {
global $wp, $wp_rewrite;
if ( $wp->matched_rule == 'example-path/?$' ) {
// call function or include template view here.
include dirname( __FILE__ ) . '/endpoint.php';
exit();
}
}
En fonction des données publiées depuis votre API, vous pouvez également ajouter un rewrite_tag pour pouvoir accéder aux chaînes de requête transmises à votre exemple de chemin.
On dirait que vous demandez plusieurs choses. Je ferai de mon mieux pour aider.
Je dois créer un script PHP qui recevra les données d'une autre application via une publication HTTP, traitera ces données et mettra à jour la base de données WordPress .
Vous aurez besoin d’une règle .htaccess pour diriger toutes les demandes d’un motif d’URL particulier vers un script donné. Ce qui aurait du sens pour moi est de faire correspondre api/version_number/api_resource
à un script php particulier.
Exemple : Utilisez .htaccess pour mapper les demandes api/v1/user
à wp-content\themes\your_theme\api\v1\user.php
. Maintenant, votre utilisateur peut faire www.philosophyguy.com/api/v1/user?id=1337&action=upvote
et votre script va voter l'utilisateur # 1337. Vous pouvez le configurer pour collecter POST requêtes au lieu de GET. Ou les deux, si tu veux. Tout dépend de votre fichier user.php
.
Voici un extrait d'un projet récent qui fait à peu près la même chose.
<?php
if( !$_POST || !$_POST['t'] ){ die("FORGOT TO SEND A TRANSACTION, DID YOU?"); }
require_once('utils.php');
// required variables
$connection = db_server_connect();
$transaction_id = get_hashsum($_POST['t']);
$transaction = json_decode($_POST['t']);
// get DB
mysql_select_db(DB_NAME, $connection);
// filter
if(get_transaction($transaction_id)){ die("TRANSACTION ALREADY PROCESSED"); }
Ce script s'exécutera en mode silencieux (c'est-à-dire sans sortie HTTP)
<?php
// No Content Header
header('HTTP/1.0 204 No Response', true, 204);
// Don't Cache Server-Check
header( 'Cache-Control: no-store, no-cache, must-revalidate' );
header( 'Access-Control-Allow-Origin: *' );
header( 'Pragma: no-cache' );
?>
Désormais, il n'est plus nécessaire de créer un modèle Wordpress personnalisé pour gérer cette opération. Tout cela est géré séparément en dehors de l'environnement Wordpress. Pour sauvegarder et mettre à jour le contenu Wordpress nécessaire, quelques guides expliquent comment charger l’environnement Wordpress en externe. Je pense celui-ci aidera beaucoup.