Добрый день! Реализовал авторизацию в форме публикации wp-recall. То есть, не авторизованный пользователь может зайти на страницу с формой публикации, заполнить в форме произвольные поля для поста и поля, необходимые для авторизации.
Вся проблема в том, что при передаче данных для авторизации в функцию wp_signon, пользователь авторизуется и перезагружается страница с формой публикации, в результате получаем авторизованного пользователя и пустую форму публикации, которую нужно заполнять заново.
Как можно сразу авторизовать пользователя и опубликовать пост? (может ajax'ом, но ведь wp_signon нужно использовать до вывода какого либо контента)
Dmitryi сказал(а)
проблема в том, что при передаче данных для авторизации в функцию wp_signon, пользователь авторизуется и перезагружается страница с формой публикации
а почему страницу перезагружается? отправляйте данные на авторизацию вместе с данными с данными формы публикации и производите авторизацию пользователя с этими данными через хук rcl_preview_post, он срабатывает еще до публикации и передает массив данных формы.
Да я уже непосредственно в саму функцию rcl_preview_post добавил авторизацию wp_signon, то есть:
function rcl_preview_post(){ ................ //массив для авторизации $credentials = array(); $credentials['user_login'] = $_POST['login']; $credentials['user_password'] = $_POST['pass']; $credentials['remember'] = true; // авторизуем $user = wp_signon( $credentials, false ); $preview = '<h2>'.$_POST['post_title'].'</h2>'; $preview .= $post_content; $preview .= '<div class="rcl-notice-preview"> <p>'.__('If everything is correct – publish it! If not, you can go back to editing.','wp-recall').'</p> </div>'; $log['content'] = $preview; echo json_encode($log); exit; };
Если использовать код такого вида, то по нажатию кнопки отправки формы идёт авторизация и возврат/перезагрузка текущей страницы с формой. То есть, выполнение функции заканчивается после $user = wp_signon( $credentials, false );
, как я понимаю.
Пробовал конструкции типа:
$user = wp_signon( $credentials, false ); continue;
$user = wp_signon( $credentials, false ); return true;
$user = wp_signon( $credentials, false ); if ( !is_wp_error($user) ) { continue; }
но форма вообще виснет при отправке 😕
То есть, выполнение функции заканчивается после $user = wp_signon( $credentials, false ); , как я понимаю.
По идее идет авторизация пользователя и показ предпросмотра публикации или сама публикация, в зависимости от нажатой кнопки. И что тут не так? Пользователь авторизуется?
Dmitryi сказал(а)
Вот на этом участке кода идёт перезагрузка страницы
этот код возвращает результат в ответ ajax-запроса, должна появляться форма предпросмотра, никакой ошибки или проблемы тут нет. Проблема или ошибка находится в вашем коде, потому что без него все работает замечательно, почему вы указываете на код который существовал там до вашего вмешательства мне не понятно.
Если в любом месте функции применить $log['content']
в смысле "применить"? это ячейка массива и ЕМУ можно лишь назначить значение. Вам основы php подтянуть надо.
Вот я в функцию добавил только эти строки:
//массив для авторизации $credentials = array(); $credentials['user_login'] = "LOGIN"; $credentials['user_password'] = "PASSWORD"; $credentials['remember'] = true; // авторизуем $user = wp_signon( $credentials, false );
Получается, проблема в вордпресовской функции wp_signon ➡