如何构建一个除了评论之外的WordPress帖子评论系统

时间:2020-05-10 作者:wpdd

我有一个自定义的帖子类型(CPT),我想为这个帖子类型建立一个审查系统。我找不到任何支持帖子评论的插件,所以我想用我自己的代码来实现这一点。但我想为这方面提供一些指导,这样人们就可以在每个帖子的评论中留下自己的图片、姓名、电子邮件和评论。

我正在为我的博客帖子使用默认评论,因此我认为对于这些帖子,我需要创建一个单独的类似评论的系统。

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

当您使用默认的评论功能进行评论时,您可以自己完成所有操作。关于如何做到这一点的大致想法如下:

步骤1:创建表单并显示

创建自己的表单并在帖子模板上排队

// Clear up the alert parameters.
$_SERVER[\'REQUEST_URI\'] = remove_query_arg( \'success\', $_SERVER[\'REQUEST_URI\'] );

<form method="post" action="<?php echo esc_url( $_SERVER[\'REQUEST_URI\'] ); ?>">
    <label for="review-content"><?php _e( \'Your Review\' ); ?></label>
    <textarea name="review_content" id="review-content" cols="30" rows="4"></textarea>

    <?php wp_nonce_field( \'my-review-nonce\' ); ?>

    <button type="submit" name="my_review_form"><?php _e( \'Save\' ); ?></button>
</form>
步骤2:获取表单数据截取表单提交并清理输入字段

步骤3:插入元数据注释BIBLE <这个WPSE线程现在算是一本圣经。您可能需要按照gmazzap的指示进行挂钩:
Can I store my custom comment_type into wp_comments table?

使用wp_new_comment(), 通过将“comment\\u type”设置为所需的注释类型(例如“review”)。您可以使用add_comment_meta() 有关其他信息:

<?php
/**
 * Insert Review.
 * 
 * Insert the Review intercepting my review form.
 */
function wpse366293_insert_review() {
    if ( ! isset( $_POST[\'my_review_form\'] ) ) {
        return;
    }

    if ( isset( $_POST[\'_wpnonce\'] ) && ! wp_verify_nonce( $_POST[\'_wpnonce\'], \'my-review-nonce\' ) ) {
        return;
    }

    global $current_user;

    // WARNING: Make sure the inputs are properly sanitized.
    $review_id = wp_new_comment(
        array(
            \'comment_post_ID\'       => absint( $post->ID ), // The post on which the reviews are being recorded.
            \'comment_author\'        => wp_strip_all_tags( $current_user->display_name ),
            \'comment_author_email\'  => sanitize_email( $current_user->user_email ),
            \'comment_author_url\'    => esc_url( $current_user->user_url ),
            \'comment_content\'       => $response_msg, // Sanitize as per your requirement. You can use wp_kses().
            \'comment_type\'          => \'review\', // Or, your custom comment type.
            \'comment_parent\'        => 0,
            \'user_id\'               => absint( $current_user->ID ),
        )
    );

    // If error, return with the error message.
    if ( is_wp_error( $review_id ) ) {
        return $review_id->get_error_message();
    }

    // You can use add_comment_meta() for additional information.
    // add_comment_meta( $review_id, \'my_meta_key\', $the_value_i_want );

    // Redirect with a success hint.
    wp_redirect( add_query_arg( \'success\', 1, get_the_permalink( $post->ID ) ) );
    exit();
}

add_action( \'template_redirect\', \'wpse366293_insert_review\' );
步骤4:要显示评论,请查询评论并使用循环显示评论WP_Comment_Query() 类或get_comments() 功能:

$reviews = get_comments(
    array(
        \'post_type\'     => \'post\', // Could be your CPT.
        \'status\'        => \'approve\',
        \'orderby\'       => \'comment_date\',
        \'order\'         => \'ASC\',
        \'type\'          => \'review\' // Your comment type.
    )
);

if ( $reviews ) :
    foreach ( $reviews as $review ) :
        // Do whatever you want.
        echo wpautop( $review->comment_content );

        // Grab the meta data and display.
        // echo get_comment_meta( $review->comment_ID, \'my_meta_key\', true );
    endforeach;
endif;