Je viens juste de commencer à apprendre PHP et à faire des choses avec WordPress et je suis un peu confus quant aux informations contenues dans le Codex. On m'a dit que le Codex avait toutes les informations dont j'avais besoin, mais je me suis retrouvé coincé avec.
Quels champs de tableau sont dans $_REQUEST
dans WordPress? Vous ne le trouvez pas dans le Codex.
Exemple: les gens utilisent $my_contact = $_REQUEST['contact'];
Comment savent-ils que $_REQUEST
a 'contact'
champ?
Existe-t-il un processus permettant de rechercher des informations sur des variables non décrites dans le Codex? Dois-je imprimer tous les tableaux pour voir quels champs sont à l'intérieur?
Google ne m'aide pas .. à propos de $ _REQUEST.
Il s’agit principalement de PHP pur, mais il possède une torsion WordPress.
PHP a un nombre de superglobal variables , qui contient des informations pertinentes pour la requête en cours. Parmi ceux-ci:
$_GET
contient les informations de l'URL (demande HTTP GET)$_POST
informations de soumission du formulaire (demande HTTP POST)$_COOKIES
à propos des cookies$_REQUEST
est une combinaison des éléments ci-dessus (selon la documentation, $_COOKIES
peut être configuré de manière à ignorer pour plus de sécurité)Cependant, WP applique sa propre logique - pendant le processus de chargement wp_magic_quotes()
traite les variables à émuler guillemets magiques setting et impose $_REQUEST
afin qu'il contienne la combinaison de $_GET
et $_POST
, quoi que soit PHP configuration dit.
Donc, dans un environnement WordPress, il contiendra les données de requête GET et/ou POST. Les données exactes dépendront entièrement de la page sur laquelle vous vous trouvez et de ce qui se passe dessus.
Juste une remarque à propos de $_REQUEST
: chaque fois que vous voyez ceci dans un code, vous savez qu'il est écrit par un débutant. Comme @Rarst l'a expliqué, il s'agit d'une combinaison de plusieurs sources. Mais pourquoi devrait-on traiter des données qui devraient être envoyées par POST seulement s’ils sont effectivement envoyés par GET?
N'acceptez pas de données d'un flux d'entrée que vous n'avez pas déclaré auparavant. Utilisez $_GET
si vous voulez obtenir GET et $_POST
si vous voulez POST. Rien d'autre.
Pour accéder aux données POSTed sans l’intervention de WordPress, utilisez l’encapsuleur de flux en entrée php://input
.
Alors, au lieu de…
// already changed by WordPress when you get it
$data = $_POST;
… utilisation …
// Doesn’t work with 'enctype="multipart/form-data"'
$data = file_get_contents( 'php://input' );
Et n'oubliez pas validation des données .
Vous avez mentionné l'impression à partir du tableau, de sorte que vous savez peut-être déjà comment procéder. Vous pouvez voir tous les éléments d'un tableau dans PHP en exécutant print_r($_REQUEST);
. Cela vous donnerait les informations exactes auxquelles chaque page a accès depuis $ _REQUEST.
Toutefois, il convient de noter que chaque page peut avoir un jeu de clés différent. En outre, il peut être intéressant d’écrire ceci dans un fichier journal temporaire, selon que vous êtes en production ou non. Vous ne voudriez pas que vos visiteurs voient cette sortie.
J'en avais besoin juste pour le test. Comme vous l'avez conseillé, tous les fichiers ont été écrits dans un fichier, utilisé avec le commentaire 'commentaire _post' pour s'assurer que $ _REQUEST dispose des données juste après la publication d'un commentaire.
function rj_comment() {
// sprint_r as print_r
function sprint_r($var) {
ob_start();
print_r($var);
$output=ob_get_contents();
ob_end_clean();
return $output;
}
global $_REQUEST;
$stringData = sprint_r($_REQUEST);
$myFile = "c:/s_request_fiels.txt"; #file name
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, $stringData);
fclose($fh);
};
add_action ('comment_post','rj_comment');
Pour répondre à cette question suivante:
Comment savent-ils que $ _REQUEST a le champ 'contact'?
Ma réponse est la suivante:
Ils savent parce qu'ils ont écrit ce champ de saisie caché à l'intérieur du <form>
(comme premier champ de saisie) comme ci-dessous:
<input type="hidden" name="contact" value="advanced">
Ils peuvent également activer leur modèle de recherche personnalisé au lieu de la valeur par défaut search.php en écrivant le code suivant dans functions.php
<?php
function wpse_load_custom_search_template(){
if( isset($_REQUEST['contact']) == 'advanced' ) {
require('advanced-search-result.php');
die();
}
}
add_action('init','wpse_load_custom_search_template');
?>
J'espère que cela vous aidera à comprendre comment ils savent quel champ $_REQUEST
contient.