Wordpress - используйте систему комментариев вне страниц и постов - PullRequest
4 голосов
/ 26 мая 2010

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

теперь я хочу использовать систему комментариев для каждой из этих страниц, например ::100100

mydomain.com/podpages/page1
mydomain.com/podpages/page2
mydomain.com/podpages/page3

это , а не страниц, созданных с помощью WordPress, поэтому простое добавление <?php comments_template(); ?> не работает.

есть идеи как решить эту проблему? заранее спасибо

пожалуйста, оставьте комментарий, если что-то неясно:)

Ответы [ 5 ]

11 голосов
/ 02 июня 2010

Когда комментарий хранится в базе данных WordPress, идентификатор сообщения (или страницы), к которому относится комментарий, также сохраняется.

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

Итак, как насчет того, чтобы создать WordPress страницу для каждой реальной страницы, но просто как представление , чтобы ваши реальные страницы и WordPress имели общий язык для работы друг с другом.

Итак, план здесь:

  • Загрузка WordPress в фоновом режиме на каждую из «настоящих» страниц.
  • Проверьте, существует ли представление страницы WordPress для «реальной» страницы
  • Если этого не произойдет, создайте его, тогда и там
  • Обманите WordPress, заставив думать, что мы на самом деле видим представление
  • Продолжайте использовать все функции WP и «шаблонные теги», как обычно

Этот код должен находиться где-то в начале файла шаблона, используемого для отображения ваших «настоящих» страниц;

include ('../path/to/wp-load.php');

// remove query string from request
$request = preg_replace('#\?.*$#', '', $_SERVER['REQUEST_URI']);

// try and get the page name from the URI
preg_match('#podpages/([a-z0-9_-]+)#', $matches);

if ($matches && isset($matches[1])) {
    $pagename = $matches[1];

    // try and find the WP representation page
    $query = new WP_Query(array('pagename' => $pagename));

    if (!$query->have_posts()) {
        // no WP page exists yet, so create one
        $id = wp_insert_post(array(
            'post_title' => $pagename,
            'post_type' => 'page',
            'post_status' => 'publish',
            'post_name' => $pagename
        ));

        if (!$id)
            do_something(); // something went wrong
    }

    // this sets up the main WordPress query
    // from now on, WordPress thinks you're viewing the representation page       
}

UPDATE

Не могу поверить, что я был таким глупым. Ниже следует заменить текущий код внутри внешнего if;

// try and find the WP representation page - post_type IS required
$query = new WP_Query(array('name' => $pagename, 'post_type' => 'page'));

if (!$query->have_posts()) {
    // no WP page exists yet, so create one
    $id = wp_insert_post(array(
        'post_title' => $pagename,
        'post_type' => 'page',
        'post_status' => 'publish',
        'post_name' => $pagename,
        'post_author' => 1, // failsafe
        'post_content' => 'wp_insert_post needs content to complete'
    ));
}

// this sets up the main WordPress query
// from now on, WordPress thinks you're viewing the representation page
// post_type is a must!
wp(array('name' => $pagename, 'post_type' => 'page'));

// set up post
the_post(); 

P.S Я думаю, что использование query_var name вместо pagename лучше подходит - он запрашивает слаг, а не слаг «path».

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

0 голосов
/ 06 июня 2010

Вам нужно использовать WordPress для этого? Если нет, то, возможно, что-то в этом вопросе SO поможет: Функция ненавязчивых комментариев для размещения на существующих веб-страницах.

0 голосов
/ 06 июня 2010

Просто добавьте в wordpress-comment-part новый идентификатор - начните с того, чего ваши обычные записи никогда не достигнут (т. Е. Более 100 000 страниц)

Я точно не знаю, является ли это в wordpress функцией (т.е. saveComment, т. Е.), Но если это так, просто используйте ее на своей странице со своим пользовательским ID. Тем не менее, вам нужно будет самостоятельно заполнить форму для комментариев.

И не забудьте изменить запрос, который получает новости о том, что идентификаторы свыше 100.000 не являются записями.

Или вы можете написать свой собственный шаблон, который отображает стандартный материал Worpress с идентификаторами <100.000, или ваши страницы. </p>

Подводя итог, это не должно быть очень сложно.

p.s .: Если вы просто хотите использовать wordpress-login, то используйте любую систему комментариев или создайте свою собственную (это 1 час) и аутентифицируйте / используйте worpress-сессию.

0 голосов
/ 04 июня 2010

Можете ли вы создавать в WordPress страницы, на которых отображаются данные вашего журнала?Вам может понадобиться новый шаблон для этого.Тогда у WordPress будет что связать комментарии.

0 голосов
/ 26 мая 2010

добавить

require('/path/to/wp-blog-header.php');

для включения файлов wp. это должно дать вам все функции / данные, которые вам нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...