web-dev-qa-db-fra.com

WP_Remote_Get ne fonctionne pas

J'ai un plugin qui utilise wp_remote_get() et il ne fonctionne pas sur mon serveur nginx alors j'ai décidé de le tester.

J'ai créé un fichier appelé test.php et inséré:

<?php $response = wp_remote_get( 'http://www.domain.com/mytest.php' );

print $response ['body']; ?>

Quand j'exécute ce fichier, j'obtiens une erreur:

2017/02/04 16:22:31 [error] 16573#16573: *461100 FastCGI sent in stderr:
…

 "PHP message: PHP Fatal error:  Uncaught Error: Call to undefined function
 wp_remote_get() in /var/www/html/wp-content/themes/x-child/test.php:1

Je ne peux pas dire pourquoi ce serait une fonction non définie, étant donné que cela fait partie du noyau de wordpress?

1
Joanna Mikalai

Le concept même de l'API HTTP est de s'assurer que le transport sera effectué. Il utilise 5 méthodes de transport différentes et choisit la meilleure en fonction de la configuration de votre serveur. Il est donc peu probable qu'un problème de compatibilité entre wp_remote_get() et votre serveur.

De plus, si WP n'est pas chargé, l'ajout d'une action ne résoudra pas le problème avec une erreur de fonction non définie, mais cette fois sur add_action.

Donc, fondamentalement, WordPress vous manque, vous pouvez le faire à des fins de test (en supposant que votre fichier se trouve à la racine de WP installation):

<?php 
require_once( 'wp-load.php' );
$response = wp_remote_get( 'http://www.domain.com/mytest.php' );
print $response ['body']; ?>
1
JMau

Essayez-vous d’accéder directement à votre fichier test.php? Si tel est le cas, WordPress ne sera pas chargé, donc wp_remote_get() ne fonctionnera pas.

Pour utiliser wp_remote_get, vous devez vous assurer que WordPress est chargé. Essayez de vous connecter à wp_loaded:

add_action( 'wp_loaded', function() {
  $response = wp_remote_get( 'https://example.com/' );
  print $response[ 'body' ];
} );

Il est possible que votre serveur soit configuré de telle sorte que les méthodes utilisées par wp_remote_get ne soient pas disponibles pour WordPress. Si c'est le cas, assurez-vous que curl ou wget est installé sur le serveur.

1
Nathan Johnson