WP_GET_CURRENT_USER在WordPress外部使用时返回ID=0,例如Web钩子/实现对话流

时间:2020-07-01 作者:Royhan Au

我想获取当前登录的用户ID。通过web浏览器访问时,我成功地做到了这一点。但是,当通过dialogflow将此函数作为webhook/fulfillment调用时,它始终返回ID=0。这是我在PHP中的完整代码。

<?php

/** Absolute path to the WordPress directory. */
if ( !defined(\'ABSPATH\') )
    define(\'ABSPATH\', \'/var/www/html/mine/\');

/** Sets up WordPress vars and included files. */
require_once(ABSPATH . \'wp-config.php\');

do_action( \'plugins_loaded\' );

$current_user = wp_get_current_user();
 
$method = $_SERVER[\'REQUEST_METHOD\'];

// Process only when method is POST
if($method == \'POST\'){
    $requestBody = file_get_contents(\'php://input\');
    $json = json_decode($requestBody);

    $action = $json->queryResult->action;
        
    if ($action == "ngopi"){
        if ($current_user->ID != 0){
            $ngopiResponse = "Hai..".$current_user->display_name;
        }
        else{
            $ngopiResponse = "Hai..Guest";  
        }   
    }
    
    $response = new \\stdClass();
    $response->speech = $ngopiResponse;
    $response->fulfillmentText = $ngopiResponse;
    $response->source = "webhook";
    echo json_encode($response);
}
else
{
    echo "Method not allowed";
}
?>
Please 给我一个解决这个问题的方法,或者我可以做其他的替代方法?

提前谢谢。

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

我不明白你从哪里打来的电话。我可以为您提供一个替代解决方案,该方案可能适用于您的情况,也可能不适用于您的情况(因为我不完全了解您的情况):

这是您网站上的ajax url:

echo admin_url( \'admin-ajax.php\' );

通常我们将其附加到JS以运行AJAX调用:

wp_localize_script( \'THE_JS_THAT WAS_ENQUEUED\', \'PARAMS\', array( \'ajax_url\' => admin_url( \'admin-ajax.php\' ) ) );

即使没有wp\\u localize\\u脚本,您也可以始终将admin\\u url(\'admin ajax.php\')打印到屏幕上,并在任何其他进程中输入它。

现在您有了AJAX链接,您可以使用AJAX获取当前连接的用户,并返回它,只要您从相同的浏览器调用它(意味着相同的cookie)。

相关推荐

为什么GET_USERS()不在管理后端工作?

我不明白为什么get_users() 可在前端工作,但不能在管理后端工作。我相信这在某种程度上是可行的。我的代码:function add_new_user_menu_item() { remove_submenu_page(\'users.php\', \'user-new.php\'); $submenu_title = __( \'Add new\', \'myplugin\' ); add_submenu_page(