web-dev-qa-db-ja.com

WP_Remote_Getが機能しない

wp_remote_get()を使用するプラグインがあり、nginxサーバーで機能しないため、これをテストすることにしました。

test.phpというファイルを作成して挿入しました:

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

print $response ['body']; ?>

このファイルを実行すると、エラーが発生します。

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

ワードプレスのコアの一部であることを考えると、なぜこれが未定義の関数になるのかわかりませんか?

1
Joanna Mikalai

HTTP APIのまさにコンセプトは、トランスポートが行われることを確認することです。基本的に5つの異なる転送方法を使用し、サーバーの構成に応じて最適な方法を選択します。したがって、wp_remote_get()とサーバーとの互換性の問題とは考えられません。

さらに、WPがロードされていない場合、アクションを追加しても役に立たず、未定義の関数エラーが発生しますが、今回はadd_actionで失敗します。

したがって、基本的にWordPressがありません。テスト目的でこれを行うことができます(ファイルがWPインストールのルートにあると仮定します):

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

Test.phpファイルに直接アクセスしようとしていますか?その場合、WordPressはロードされないため、wp_remote_get()は機能しません。

wp_remote_getを使用するには、WordPressがロードされていることを確認する必要があります。 wp_loadedにフックしてみてください:

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

wp_remote_getで使用されるメソッドがWordPressで使用できないようにサーバーが構成されている可能性があります。その場合は、curlまたはwgetがサーバーにインストールされていることを確認してください。

1
Nathan Johnson