В WordPress, как перенаправить после комментария обратно на страницу ссылки? - PullRequest
9 голосов
/ 26 декабря 2010

У меня включены комментарии на разных типах страниц в Wordpress (архив, тэг, поиск, главная страница), и после того, как пользователь оставит комментарий, я бы хотел, чтобы его перенаправляли обратно на страницу, на которую он ссылался, а не на один пост. стр. Есть идеи?

Ответы [ 4 ]

16 голосов
/ 01 апреля 2011

Поместите это в ваш functions.php :

add_filter('comment_post_redirect', 'redirect_after_comment');
function redirect_after_comment($location)
{
return $_SERVER["HTTP_REFERER"];
}
3 голосов
/ 26 декабря 2010

Используйте WordPress Плагин API . Это правильный способ расширить или настроить функциональность в WordPress. Как только вы прочитаете немного об API, ознакомьтесь с руководством по действию ( Я бы опубликовал ссылку, но StackOverflow не позволит мне ).

Для выполнения вашей задачи вам понадобится как минимум два хука действий:

  1. comment_post - запускать сразу после добавления комментария в вашу базу данных
  2. comment_form - запускается при печати формы комментария из шаблона темы

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

Создать comment-redirect.php в папке WordPress wp-content/plugins.
Вот примерное представление о том, что вы поместите в этот файл (я оставляю вам возможность его уточнить / проверить):

<?php
/*
Plugin Name: Post Comment Redirect
Plugin URI: http://example.com
Description: Redirects you to the previous page after posing a comment
Version: 0.1a
Author: Anonymous
Author URI: http://example.com
License: GPL2
*/

// Run whenever a comment is posted to the database.
// If a previous page url is set, then it is unset and
// the user is redirected.
function post_comment_redirect_action_comment_post() {
  if (isset($_SESSION['PCR_PREVIOUS_PAGE_URL'])) {
    $ref = $_SESSION['PCR_PREVIOUS_PAGE_URL'];
    unset($_SESSION['PCR_PREVIOUS_PAGE_URL']);
    header('Location: '.$ref);
  }
}

// Run whenever comment form is shown.
// If a previous page url is not set, then it is set.
function post_comment_redirect_action_comment_form() {
  if (!isset($_SESSION['PCR_PREVIOUS_PAGE_URL'])) {
    if ($ref = $_SERVER['HTTP_REFERER']) {
      $_SESSION['PCR_PREVIOUS_PAGE_URL'] = $ref;
    }
  }
}

add_action('comment_post', 'post_comment_redirect_action_comment_post');
add_action('comment_form', 'post_comment_redirect_action_comment_form');

После того, как ваш плагин сохранен, включите его в разделе плагинов wp-admin (обычно находится рядом с h ** p: //your-website-address.com/wp-admin).

0 голосов
/ 08 июня 2019

Я бы посоветовал не возвращать $_SERVER["HTTP_REFERER"], так как это ненадежно.

Адрес страницы (если есть), которая направила пользовательский агент на текущую страницу.Это устанавливается пользовательским агентом.Не все пользовательские агенты будут устанавливать это, а некоторые предоставляют возможность изменять HTTP_REFERER как функцию.Короче говоря, этому нельзя доверять.

Источник https://php.net/manual/en/reserved.variables.server.php

Вот альтернатива

add_filter( 'comment_post_redirect', function ( $location ) {
    return get_permalink($_POST['comment_post_ID']);
} );
0 голосов
/ 26 декабря 2010
$ref = $_SERVER["HTTP_REFERER"];
header("Location: $ref");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...