May 18

Совершенно случайно обнаружил, что у меня нифига не работает WP’шный плагин Subscribe to Comments, хотя раньше проблем с ним вроде не было. Проверка того “что не так” и исправление этого всего у меня заняла добрые два часа…

Сначала грешил на WP 2.5, несовместимость таблиц и прочее - нифига, в бд всё, что нужно есть, но вот только сам факт подписки на комментарий туда заноситься не хотел ну вообще никак. Debug показал, что обработчику subscribe’ов вместо данных, введенных в форму коммента приходит “пустота” - абсолютно пустой $_POST. Глянув в строку адреса - обнаружил там длиннющую строку со всякими не сильно понятными значениями. Что ж, смотрим $_GET…

После просмотра, стало понятно, в чем затык - виной всему был OpenID-плагин, который для аутентификации пользователя выполнял всякие редиректы на другие сайты, после чего поток управления возвращался обратно в WP, однако все POST-данные оказывались потерянными. Нужные, по мнению OpenID-плагина, данные передавались теперь через GET, но OpenID, к сожалению, ничего не знал о плагине Subscribe to Comments и никаких данных о том, подписался ли пользователь на текущий пост, не передавал.

Решить проблему получилось с двух подходов. В первом я пытался сделать так, чтобы проверки OpenID выполнялись после того, как добавится подписка. После некоторых раздумий и просмотра того, как реализовывается подписка, стало понятно, что из этого способа ничего не выйдет. Поэтому пришлось лезть в исходники OpenID-плагина и искать то место, где создаются данные, хранимые в “сессии OpenID-аутентификации” и которые передаются обратно на сайт.

Довольно быстро это место нашлось - функция comment_tagging в файле logic.php:

$this->start_login( $openid_url, '/wp-login.php', 'commentopenid',
  array(
    'wordpressid' => $comment['comment_post_ID'],
    'redirect_to' => get_permalink( $comment['comment_post_ID'] ),
  )
);

Добавляем сюда нужные нам поля, а именно поле subscribe:

$this->start_login( $openid_url, '/wp-login.php', 'commentopenid',
  array(
    'wordpressid' => $comment['comment_post_ID'],
    'redirect_to' => get_permalink( $comment['comment_post_ID'] ),
    'subscribe'   => isset($_POST['subscribe']) ? $_POST['subscribe'] : null,
  )
);

После чего лезем в плагин Subscribe to Comments, находим функцию add_subscriber и меняем следующую строку:

if (($_POST['subscribe'] == 'subscribe' && is_email($email)) || $previously_subscribed) {

На такую:

if (($_REQUEST['subscribe'] == 'subscribe' && is_email($email)) || $previously_subscribed) {

После чего работоспособность подписки на комментарии восстановится.

PS. Так что, если вы задавали вопросы, подписались на комментарии и не получили ответа - зайдите на страничку поста - может быть я вам уже ответил. :)

written by fxposter \\ tags: ,


2 Responses to “Subscribe to Comments и OpenID в WordPress”

  1. 1. koldunovn Says:

    Проверим, будут ли приходить )

  2. 2. FX Poster Says:

    Будут, будут. :)

Leave a Reply