4

所以目前我正在使用pod为日志创建一些单独的页面,其中填充了自定义内容。

现在我想为每个页面使用评论系统,例如:

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

不是用 wordpress 创建的页面,所以简单地添加<?php comments_template(); ?>是行不通的。

任何想法如何解决这个问题?提前致谢

如果有不清楚的地方,请发表评论:)

4

5 回答 5

11

当评论存储在 WordPress 数据库中时,评论相关的帖子(或页面)的 ID 也会被存储。

麻烦的是,您正在尝试使用 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       
}

更新

我不敢相信我这么愚蠢。下面应该替换外部的当前代码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(); 

PS 我认为使用 query_var nameoverpagename更适合 - 它查询 slug,而不是 slug 的“路径”。

您还需要在表单中放置一个输入,其中包含redirect_to您想要重定向到的 URL 的名称和值,或者,使用挂钩的函数过滤重定向comment_post_redirect,返回正确的 URL。

于 2010-06-02T16:58:12.400 回答
0

添加

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

包括 wp 文件。这应该为您提供所需的所有功能/数据。

于 2010-05-26T15:00:20.810 回答
0

您可以在 wordpress 中创建显示您的日志数据的页面吗?为此,您可能需要一个新模板。然后 WordPress 将有一些东西可以将评论连接到。

于 2010-06-03T23:57:52.043 回答
0

您需要为此使用 WordPress 吗?如果没有,也许这个 SO 问题中的某些内容会有所帮助:Unobtrusive, self-hosted comments function to put on existing web pages

于 2010-06-06T16:57:03.917 回答
0

只需为 wordpress-comment-part 提供一个新 ID - 从您通常的帖子永远无法到达的内容开始(100.000+ 是您的页面,即)

我不确切知道在 wordpress 中它是否是一个函数(saveComment ie),但如果是这样,只需在您的页面中使用它和他的自定义 ID。不过,您必须自己插入评论表单。

并且不要忘记修改获取超过 100.000 的 ID 不是条目的新闻条目的查询。

或者您可以编写自己的模板来显示 ID < 100.000 的标准 Worpress-stuff,或者您的页面。

总结起来,应该不是很难。

ps:如果您只想使用wordpress-login,请使用任何评论系统或自己制作(这是一个1小时的事情)并验证/使用worpress-session。

于 2010-06-06T16:55:26.017 回答