Betrachten Sie die folgende Klasse.
<?php
class MCQAcademy_Endpoint extends WP_REST_Controller {
/**
* Register the routes for the objects of the controller.
*/
public function register_routes() {
$version = '1';
$namespace = 'custompath/v' . $version;
$base = 'endpointbase';
register_rest_route(
$namespace,
'/' . $base,
array(
array(
'methods' => WP_REST_Server::READABLE,
'callback' => array( $this, 'get_items' ),
'permission_callback' => array( $this, 'get_items_permissions_check' ),
'args' => array(),
)
)
);
}
/**
*
*/
public function get_items( $request ) {
$rs = array(
'data' => array(),
'request' => array(
'lang' => 'en',
),
);
$args = array();
$items = get_posts( $args );
foreach( $items as $item ) {
$itemdata = $this->prepare_item_for_response( $item, $request );
$rs['data'][] = $this->prepare_response_for_collection( $itemdata );
}
$rs['wp_get_current_user'] = wp_get_current_user(); // Does not output as expected
return new WP_REST_Response( $rs, 200 );
}
/**
* Check if a given request has access to get items
*/
public function get_items_permissions_check( $request ) {
return true; // to make readable by all
}
/**
* Prepare the item for create or update operation
*/
protected function prepare_item_for_database( $request ) {
return $request;
}
/**
* Prepare the item for the REST response
*/
public function prepare_item_for_response( $item, $request ) {
$data = array(
'ID' => $item->ID,
'post_content' => wpautop($item->post_content),
'post_title' => $item->post_title,
);
return $data;
}
/**
* Get the query params for collections
*/
public function get_collection_params() {
return array(
'page' => array(
'description' => 'Current page of the collection.',
'type' => 'integer',
'default' => 1,
'sanitize_callback' => 'absint',
),
'per_page' => array(
'description' => 'Maximum number of items to be returned in result set.',
'type' => 'integer',
'default' => 10,
'sanitize_callback' => 'absint',
),
'search' => array(
'description' => 'Limit results to those matching a string.',
'type' => 'string',
'sanitize_callback' => 'sanitize_text_field',
),
);
}
// Register our REST Server
public function hook_rest_server(){
add_action( 'rest_api_init', array( $this, 'register_routes' ) );
}
}
$myEndpoint = new MCQAcademy_Endpoint();
$myEndpoint->hook_rest_server();
Alles läuft gut, außer dass der Aufruf der wp_get_current_user()
Funktion in der get_items()
Funktion einen leeren Benutzer zurückgibt, obwohl sich der Benutzer logged in
auf der Website befindet.
$rs['wp_get_current_user'] = is_user_logged_in() ? get_current_user_id() : false;
Um ein voll funktionsfähiges Codebeispiel zu erhalten, finden Sie hier ein Beispiel-Plugin zum Abrufen der aktuellen Benutzer-ID über REST.
my-plugin.php
js / scripts.js
Ressource: https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/
quelle
my-script
zum Beispiel mit? Ja, es sollte nur ein eindeutiger Handle-Name sein, der häufig den Namen des Plugins oder Themas enthält.wp_get_current_user()
funktioniert nicht, weil Ihr Benutzer nicht perfekt eingestellt ist. Siehe unten stehenden Code/wp-includes/user.php
als Referenz.Sie müssen lediglich wp_set_current_user ({user_id}) am Anfang Ihrer API verwenden.
quelle
Wenn ein API-Aufruf eingeht, für den kein Nonce festgelegt ist, wird die Anforderung von WordPress de-authentifiziert, wodurch der aktuelle Benutzer beendet und die Anforderung nicht authentifiziert wird. Dieser CSFR-Schutz erfolgt automatisch, und Sie müssen nichts tun, damit er funktioniert, außer das Nonce einzuschließen.
Der Weg, dies zu lösen, besteht darin, eine Nonce einzuschließen. Etwas wie das:
Und nehmen Sie es in Ihre API-Anfrage auf. Die Nonce muss "_wpnonce" heißen und die Aktion muss "wp_rest" sein, damit die API funktioniert. Es kann in die URL oder in den Post-Body gehen.
quelle