19ответ(ов) в теме
Dmitryi
не в сети 4 года
На сайте с 25.06.2016
Участник
Тем 40
Сообщения 104
1
12:46
Версия WP-Recall: 15.5.7

Добрый день! Реализовал авторизацию в форме публикации wp-recall. То есть, не авторизованный пользователь может зайти на страницу с формой публикации, заполнить в форме произвольные поля для поста и поля, необходимые для авторизации.

Вся проблема в том, что при передаче данных для авторизации в функцию wp_signon, пользователь авторизуется и перезагружается страница с формой публикации, в результате получаем авторизованного пользователя и пустую форму публикации, которую нужно заполнять заново.

Как можно сразу авторизовать пользователя и опубликовать пост? (может ajax'ом, но ведь wp_signon нужно использовать до вывода какого либо контента)

0
Вова (Otshelnik-Fm)
не в сети 3 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18654
2
12:53

Так почему сделать не наоборот? Авторизоваться и писать в форму публикации

0
Андрей CS
не в сети 2 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16928
3
13:09

Dmitryi сказал(а)
проблема в том, что при передаче данных для авторизации в функцию wp_signon, пользователь авторизуется и перезагружается страница с формой публикации

а почему страницу перезагружается? отправляйте данные на авторизацию вместе с данными с данными формы публикации и производите авторизацию пользователя с этими данными через хук rcl_preview_post, он срабатывает еще до публикации и передает массив данных формы.

0
Dmitryi
не в сети 4 года
На сайте с 25.06.2016
Участник
Тем 40
Сообщения 104
4
21:16

Да я уже непосредственно в саму функцию 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;
}

но форма вообще виснет при отправке 😕

Редакции сообщения
10.10.2017 21:23DmitryiПричина: не указано
0
Андрей CS
не в сети 2 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16928
5
21:41

То есть, выполнение функции заканчивается после $user = wp_signon( $credentials, false ); , как я понимаю.

По идее идет авторизация пользователя и показ предпросмотра публикации или сама публикация, в зависимости от нажатой кнопки. И что тут не так? Пользователь авторизуется?

0
Dmitryi
не в сети 4 года
На сайте с 25.06.2016
Участник
Тем 40
Сообщения 104
6
21:45

Да пользователь авторизуется в любом случае, независимо от того, виснет форма или перезагружается страница.

0
Андрей CS
не в сети 2 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16928
7
09:49

Dmitryi сказал(а)
Да пользователь авторизуется

и что тогда не так?

0
Dmitryi
не в сети 4 года
На сайте с 25.06.2016
Участник
Тем 40
Сообщения 104
8
10:42

То есть, необходимо, что бы при отправке формы происходила авторизация и публикация записи.

А сейчас получается так, что при отправке формы пользователь авторизуется, но запись не публикуется - просто страница с формой перезагружается или виснет, если использовать continue.

0
Андрей CS
не в сети 2 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16928
9
10:49

Dmitryi сказал(а)
запись не публикуется - просто страница с формой перезагружается или виснет, если использовать continue.

а почему не публикуется? continue тут вообще при чем? эту конструкцию можно использовать только в циклах

0
Dmitryi
не в сети 4 года
На сайте с 25.06.2016
Участник
Тем 40
Сообщения 104
10
20:42

Вот на этом участке кода идёт перезагрузка страницы:

$log['content'] = $preview;
    echo json_encode($log);
    exit;

Если в любом месте функции применить $log['content'], выполнение кода доходит до этого участка и идёт перезагрузка страницы.

0
Андрей CS
не в сети 2 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16928
11
21:40

Dmitryi сказал(а)
Вот на этом участке кода идёт перезагрузка страницы

этот код возвращает результат в ответ ajax-запроса, должна появляться форма предпросмотра, никакой ошибки или проблемы тут нет. Проблема или ошибка находится в вашем коде, потому что без него все работает замечательно, почему вы указываете на код который существовал там до вашего вмешательства мне не понятно.

Если в любом месте функции применить $log['content']

в смысле "применить"? это ячейка массива и ЕМУ можно лишь назначить значение. Вам основы php подтянуть надо.

0
Dmitryi
не в сети 4 года
На сайте с 25.06.2016
Участник
Тем 40
Сообщения 104
12
22:30

Вот я в функцию добавил только эти строки:

//массив для авторизации
$credentials = array();
$credentials['user_login'] = "LOGIN";
$credentials['user_password'] = "PASSWORD";
$credentials['remember'] = true;
 
// авторизуем
$user = wp_signon( $credentials, false );

Получается, проблема в вордпресовской функции wp_signon ➡

0
Андрей CS
не в сети 2 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16928
13
08:05

а сам ajax-запрос возвращает хоть какой то ответ при добавлении этих строк? смотрите в консоли браузера

0
Dmitryi
не в сети 4 года
На сайте с 25.06.2016
Участник
Тем 40
Сообщения 104
14
12:13

Да, вот ответ аякса:

Вы не можете просматривать опубликованные ссылки
0
Андрей CS
не в сети 2 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16928
15
12:14

и что происходит когда приходит этот ответ?

0
Dmitryi
не в сети 4 года
На сайте с 25.06.2016
Участник
Тем 40
Сообщения 104
16
12:37

После аякс ответа, происходит перезагрузка страницы, с которой была отправлена форма публикации. На перезагруженной странице пользователь уже авторизован и пустая форма публикации.

0
Андрей CS
не в сети 2 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16928
17
12:39

а без кода авторизации что происходит?

0
Dmitryi
не в сети 4 года
На сайте с 25.06.2016
Участник
Тем 40
Сообщения 104
18
18:40

Андрей CS сказал(а)
а без кода авторизации что происходит?

Без кода авторизации запись публикуется

0
Dmitryi
не в сети 4 года
На сайте с 25.06.2016
Участник
Тем 40
Сообщения 104
19
23:32

Проблему решил. Все проверки данных для авторизации необходимо было разместить в функции rcl_preview_post, а саму авторизацию в функции update_post.

0
Вы не имеете права на публикацию сообщений в этой теме