Перед выполнением update_status вам необходимо проверить идентификатор менеджера заказа.
Вы можете проверить, выполняет ли менеджер обновление, получив идентификатор WC_Order
и сравнив его с менеджером, вошедшим в систему. .
Если предположить, что идентификатор менеджера является текущим идентификатором пользователя, проверка перед update_status
должна быть такой. Будьте осторожны, так как вы не должны получать идентификатор менеджера из URL, так как пользователь может его изменить.
$managerId = get_current_user_id();
$ordeManagerId = get_post_meta( $_REQUEST[ "order_id" ], 'manager', true);
if($ordeManagerId != $managerId){
exit( "Woof Woof Woof" );
}
Полный код должен быть таким:
add_action( "wp_ajax_manager_completed", "manager_completed" );
add_action( "wp_ajax_nopriv_manager_completed", "please_login" );
function manager_completed() {
// nonce check for an extra layer of security, the function will exit if it fails
if ( !wp_verify_nonce( $_REQUEST[ 'nonce' ], "manager_completed_nonce" ) ) {
exit( "Woof Woof Woof" );
}
$managerId = get_current_user_id();
$ordeManagerId = get_post_meta( $_REQUEST[ "order_id" ], 'manager', true);
if($ordeManagerId != $managerId){
exit( "Woof Woof Woof" );
}
$order = new WC_Order( $_REQUEST[ "order_id" ] );
$order->update_status( 'completed' );
die();
}
function please_login() {
echo "You must log in";
die();
}