WordPress 是一个功能强大的开源内容管理系统,它提供了丰富的自定义文章类型(Custom Post Types)功能,使得我们可以轻松地创建各种类型的内容,在 WordPress 中,评论是一个重要的互动功能,用户可以通过评论与其他用户进行交流,默认情况下,WordPress 会按照评论发表的时间顺序对评论进行排序,有时候我们可能需要修改这个排序方式,例如按照评论的点赞数或者回复数进行排序,本文将介绍如何修改 WordPress 自定义文章类型的评论排序。
1. 修改评论排序的函数
要修改评论排序,我们需要找到 WordPress 中负责评论排序的函数,在 WordPress 核心代码中,有一个名为 comments_clauses
的函数,它负责生成 SQL 查询语句中的 WHERE 子句,从而影响评论的排序,我们可以在这个函数中添加自定义的排序条件。
我们需要在主题的 functions.php 文件中添加以下代码:
function custom_comments_clauses( $orderby, $args ) { global $wpdb; // 如果当前文章类型为自定义文章类型,并且当前排序方式为默认的按时间排序 if ( 'custom_post_type' === get_post_type() && 'comment_date_gmt' === $orderby ) { // 修改排序方式为按点赞数排序 $orderby = "{$wpdb->prefix}comments.comment_approved DESC, {$wpdb->prefix}comments.comment_date_gmt"; } return $orderby; } add_filter( 'comments_clauses', 'custom_comments_clauses', 10, 2 );
这段代码首先检查当前文章类型是否为自定义文章类型,以及当前排序方式是否为默认的按时间排序,如果满足这两个条件,我们将排序方式修改为按点赞数和评论日期降序排列,我们使用 add_filter
函数将这个自定义函数添加到 WordPress 的钩子中。
2. 修改评论列表模板
接下来,我们需要修改评论列表模板,以便显示新的排序方式,在 WordPress 主题中,评论列表通常位于 single.php、index.php 或 category.php 等文件中,在这些文件中,你可以找到类似以下的代码:
<?php if ( have_comments() ) : ?> <h3><?php comments_number( '暂无评论', '有一条评论', '%条评论' ); ?></h3> <ul class="comment-list"> <?php while ( have_comments() ) : the_comment(); ?> <li class="comment"> <!-评论内容 --> </li> <?php endwhile; ?> </ul> <?php endif; ?>
我们需要在这个模板中添加一些额外的 HTML 和 PHP 代码,以便显示新的排序方式,以下是修改后的代码:
<?php if ( have_comments() ) : ?> <h3><?php comments_number( '暂无评论', '有一条评论', '%条评论' ); ?></h3> <ul class="comment-list"> <?php // 根据新的排序方式获取评论数据 $args = array( 'status' => 'approve', // 只显示已批准的评论 'post_id' => get_the_ID(), // 当前文章 ID 'orderby' => apply_filters( 'comments_clauses', 'comment_date_gmt', $args ), // 应用自定义排序函数 'order' => 'DESC' // 降序排列 ); $comments = get_comments( $args ); ?> <?php foreach ( $comments as $comment ) : ?> <li class="comment"> <!-评论内容 --> </li> <?php endforeach; ?> </ul> <?php endif; ?>
这段代码首先根据新的排序方式获取评论数据,然后遍历这些数据并显示在评论列表中,这样,我们就可以看到按照新的排序方式显示的评论列表了。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/258320.html