将评论转换为自定义帖子类型

时间:2014-05-24 作者:John Enxada

目前,我使用WordPress作为问答;一个用户可以注册、提问和回答的网站。我使用ElegantThemes中的AskIt主题,它使用默认的WordPress帖子类型(帖子、页面、评论等)。目前约有300名注册用户、350多个问题和1000个答案/评论。

我想迁移到的新主题(ForumEngine)为问题(而不是当前帖子)和答案(而不是当前评论)添加/使用自定义帖子类型。此外,与自定义帖子类型共存的“博客”部分使用默认的WP帖子类型(帖子、评论)。

在插件的帮助下,我成功地将默认帖子类型转换为自定义帖子类型(问题)。我的问题是,我不知道如何将评论转换为自定义的帖子类型(答案),而且由于评论不是帖子类型这一事实显然很棘手。

当我转到已转换的CPT帖子的编辑页面时,我可以在底部看到评论,但它们不会显示在前端。因此,他们仍然链接到每个帖子,但不知道如何将其转换为CPT。

你能帮我弄清楚我该怎么做吗?

我已经做了进一步的研究,并向theme的创建者寻求帮助,但这超出了他们的支持范围

1 个回复
最合适的回答,由SO网友:ksr89 整理而成

好的,John Enxada,我看了主题管理部分。你所要求的东西是困难的,但却是可能的。首先,你必须检查他们是如何在两种帖子类型之间创建关系的,即线程和回复之间的关系。我没有多余的数据库(无法在数据库中查看以检查它们之间的关系)。你必须自己做。

为此,您必须自己创建一个脚本。我只能帮助你如何创建它。首先获取数据库的备份,以便在出现任何问题时进行备份。

一旦你知道了,你就可以把帖子的类型改成线程。你已经这么做了。然后您可以使用get_posts 作用然后使用for/foreach 循环使用get_comments. 再次应用for/foreach 逐个循环每个注释。然后使用wp_insert_post 将这些评论作为帖子插入post_type = replies.

这是一段代码,它将以某种方式帮助您。

$args = array(
    \'posts_per_page\'   => -1,
    \'post_type\'        => \'thread\'
);

$threads = get_posts( $args ); // Get all posts of thread.
foreach($threads as $thread):
    $comment_args = array(
        \'post_id\' => $thread->ID
    );
    $thread_comments = get_comments($comment_args); // Get all comments of the post.
    foreach($thread_comments as $thread_comment):
        $reply_post = array(
            \'post_status\'  => \'publish\', // Set replies status.
            \'post_type\'    => \'replies\', // Set post type.
            \'post_author\'  => $thread_comment->user_id, // Set comment user id as post id.
            \'post_title\'   => \'RE: \'.$thread->post_title, //They prefix RE: to every reply so i think we might be do the same.
            \'post_content\' => $thread_comment->comment_content // Set comment content as post content.
        );
        wp_insert_post($reply_post); // Insert the comment as post having post type replies.
        // Write the code through which they create relation between these post types
    endforeach;
endforeach;
这些是帖子在插入时必须具备的一些重要价值。但我认为他们正在插入更多的值post_meta. 所以你也必须关注这些价值观。启动脚本后,它会将您的所有评论转换为具有post_type = replies.

结束

相关推荐

Disable comments

我想知道是否有任何方法可以阻止用户留下评论,但仍然显示评论表单?因此,无论何时发布新评论,都应该自动将其丢弃,或者根本不应该添加。我的评论表单仅用于演示目的,它不应该接受任何评论,但应该显示出来。我已经找到了preprocess_comment 和comment_post hooks,但我不知道如何利用它来阻止评论。我在想这样的事情:function prefix_delete_comments( $comment_id ) { wp_delete_comment( $comment_id,