@zero
2024-12-28

wordpress评论函数如何完全重写

1. 禁用默认的评论模板

通过创建自定义的评论模板文件来取代默认行为:

<?php 
if (comments_open() || get_comments_number()) {
    // 使用自定义的评论模板文件
    include(locate_template('custom-comments.php'));
}
?>

在此代码中,custom-comments.php 是您的自定义评论模板文件。

2. 创建自定义评论模板文件

在主题目录下新建一个名为 custom-comments.php 的文件,设计您自己的评论显示逻辑和表单。

示例:custom-comments.php

<?php
if (have_comments()) : ?>
    <h2 class="comments-title">
        <?php
        $comment_count = get_comments_number();
        printf(
            _n('%1$s Comment', '%1$s Comments', $comment_count, 'text-domain'),
            number_format_i18n($comment_count)
        );
        ?>
    </h2>

    <ul class="comment-list">
        <?php
        wp_list_comments([
            'style'      => 'ul',
            'short_ping' => true,
            'avatar_size'=> 50,
        ]);
        ?>
    </ul>

    <?php
    if (get_comment_pages_count() > 1 && get_option('page_comments')) :
        ?>
        <nav class="comment-navigation" role="navigation">
            <div class="nav-previous"><?php previous_comments_link(__('&larr; Older Comments', 'text-domain')); ?></div>
            <div class="nav-next"><?php next_comments_link(__('Newer Comments &rarr;', 'text-domain')); ?></div>
        </nav>
    <?php
    endif;

else :
    if (comments_open()) :
        echo '<p class="no-comments">' . __('Be the first to comment!', 'text-domain') . '</p>';
    endif;
endif;

if (comments_open()) :
    comment_form();
endif;
?>

3. 完全自定义评论结构

如果您需要完全控制评论的 HTML 输出,可以自定义 wp_list_comments() 的回调函数。

示例:自定义回调函数

<?php
function my_custom_comment($comment, $args, $depth) {
    ?>
    <li <?php comment_class(); ?> id="comment-<?php comment_ID(); ?>">
        <div class="comment-body">
            <div class="comment-author vcard">
                <?php echo get_avatar($comment, 50); ?>
                <?php printf('<cite class="fn">%s</cite>', get_comment_author_link()); ?>
            </div>

            <div class="comment-meta commentmetadata">
                <a href="<?php echo htmlspecialchars(get_comment_link($comment->comment_ID)); ?>">
                    <?php printf(__('%1$s at %2$s', 'text-domain'), get_comment_date(), get_comment_time()); ?>
                </a>
            </div>

            <?php if ($comment->comment_approved == '0') : ?>
                <em class="comment-awaiting-moderation"><?php _e('Your comment is awaiting moderation.', 'text-domain'); ?></em>
                <br />
            <?php endif; ?>

            <div class="comment-text">
                <?php comment_text(); ?>
            </div>

            <div class="reply">
                <?php
                comment_reply_link(array_merge($args, [
                    'depth'     => $depth,
                    'max_depth' => $args['max_depth']
                ]));
                ?>
            </div>
        </div>
    </li>
    <?php
}

然后在 custom-comments.php 中调用:

<?php
wp_list_comments([
    'style'      => 'ul',
    'short_ping' => true,
    'callback'   => 'my_custom_comment',
]);
?>

4. 移除默认的评论样式

默认情况下,WordPress 会加载自带的评论样式。通过以下代码禁用:

function remove_default_comment_style() {
    wp_deregister_style('comment-reply');
}
add_action('wp_enqueue_scripts', 'remove_default_comment_style');

5. 测试和调整

完成上述步骤后,您需要测试评论功能,确保自定义模板在各种情况下(如嵌套评论、分页等)都能正常运行。

All updates
还没有评论

您必须 登录 后才能发表评论。

相关文章
@zero
2024-12-17

世界,您好!

欢迎使用 WordPress。这是您的第一篇文章。编辑或删除它,然后开始写作吧!

@zero
2025-01-13

PHP 中,字符串可以使用单引号或双引号

在 PHP 中,字符串可以使用单引号或双引号,但在处理复杂的嵌套引号时,必须注意转义以避免语法错误。以下是正确 […]

@zero
2024-12-24

wordpress后台没有菜单和小工具是什么情况?

主题的functions.php文件中添加代码:

@zero
2024-12-23

get_option在wordpress里的作用

在WordPress中,get_option() 函数是一个用于获取存储在WordPress数据库中 […]

All updates