Wp_emote_post()的正确上下文

时间:2015-03-11 作者:rob-gordon

我想使用wp_remote_post() 在函数中,向插件中的php脚本发送HTTP Post请求。

我正在成功地发布到插件脚本,但在请求的上下文方面遇到了问题。

在里面functions.php:

function post_to_plugin($name, $email) {
  $plugin_url = plugins_url( \'/my-plugin/db-insert.php\' );
  $form = array( \'name\' => $name, \'email\' => $email );
  $result = wp_remote_post( 
    $plugin_url, 
    array(
      \'body\' => $form
    ) 
  );
}
示例/my-plugin/db-insert.php:

if (preg_match(\'#\' . basename(__FILE__) . \'#\', $_SERVER[\'PHP_SELF\'])) { die(\'You are not allowed to call this page directly.\'); }

if (isset($_POST[\'name\']) && isset($_POST[\'email\'])) {
  global $wpdb;
  $wpdb->insert( 
    \'table\', 
     array ( 
      \'name\' => $_POST[\'name\'], 
      \'email\' => $_POST[\'email\'] 
     )
  );
}
我的post请求被数据库插入中的第一行停止。php。我可以删除这条线,这不是一个好的解决方案。但是后来insert 仍然失败,因为插入db。php无法找到global $wpdb. 是否可以在wordpress/插件脚本的适当上下文中发出此post请求?

1 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

你不应该直接发布到你的插件文件——WordPress不会被加载,你也不应该手动加载它。

使用AJAX API和动作挂钩来处理它(注意,它不需要是实际的AJAX请求):

function wpse_180814_post_to_plugin( $name, $email ) {
    $result = wp_remote_post( 
        admin_url( \'admin-ajax.php\' ), 
        array(
            \'body\' => array(
                \'action\' => \'wpse_180814_action\',
                \'name\'   => $name,
                \'email\'  => $email,
            ),
        ) 
    );
}

function wpse_180814_action() {
    if ( isset( $_POST[\'name\'], $_POST[\'email\'] ) ) {
        global $wpdb;
        $wpdb->insert( 
            \'table\', 
            array ( 
                \'name\' => $_POST[\'name\'], 
                \'email\' => $_POST[\'email\'] 
            )
        );
    }
}

add_action( \'wp_ajax_nopriv_wpse_180814_action\', \'wpse_180814_action\' );
add_action( \'wp_ajax_wpse_180814_action\', \'wpse_180814_action\' );

结束

相关推荐

How deactivate the http-api

为它提供一个tipp或解决方案来停用WP\\U Http\\U Streams类中的方法request()?我也在脱机服务器上使用WordPress,并让wp\\U debug true用于开发和测试。但是我从函数中得到了很多关于使用http类的警告;例如,在仪表板中读取提要的函数。目前我已经停用了更新主题、插件、核心和cron的所有挂钩;请参阅我的小插件:https://github.com/bueltge/WP-Offline谢谢你的回复