wordpress评论置顶

WordPress 是一个功能强大的开源内容管理系统,它提供了丰富的自定义文章类型(Custom Post Types)功能,使得我们可以轻松地创建各种类型的内容,在 WordPress 中,评论是一个重要的互动功能,用户可以通过评论与其他用户进行交流,默认情况下,WordPress 会按照评论发表的时间顺序对评论进行排序,有时候我们可能需要修改这个排序方式,例如按照评论的点赞数或者回复数进行排序,本文将介绍如何修改 WordPress 自定义文章类型的评论排序。

1. 修改评论排序的函数

wordpress评论置顶

要修改评论排序,我们需要找到 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 的钩子中。

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 代码,以便显示新的排序方式,以下是修改后的代码:

wordpress评论置顶

<?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

(0)
K-seoK-seoSEO优化员
上一篇 2024年1月24日 22:04
下一篇 2024年1月24日 22:06

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入