给自己的网站加一个作者主页功能

因为自己的网站有一个荣誉墙,为了实现荣誉墙的第2个效果,就需要加一个作者主页功能。这两个相互配合简直天衣无缝。

荣誉墙在这里:

给自己的网站加个荣誉墙(读者墙) 给自己的网站加个荣誉墙(读者墙) 原本用的Zibll主题,现在是PIX主题,都适用,理论上支持所有基于wordpress开发的主题。界面错位的话就是微改下CSS! 2024/12/10:完善了自己的逻辑。我理想的逻辑是:年度评论从每年... 时间:2024/12/10 分类:技术相关

简单说明一下:

就是获取某个用户发了多少文章post、片刻moment和评论comment,统计一下数量然后列出来。

文章和评论的文字都是红色,因为片刻有的可能没有标题,如果有标题取《标题》,文字红色显示,如果没有标题取内容前30个文字,文字蓝色表示。以上全部带有链接,点击即可快速到达。

有两个效果:

效果一是普通的网页下翻,如果发布的数量少还可以,数量多的话不建议;

效果二是做成了像Widows选项卡一样可以相互切换的,现在本站用的这种,也比效果一好看。效果二分为效果二(1)和效果二(2),效果二(1)文章显示个数受到后台--设置--阅读设置--博客页面至多显示的个数限制,效果二(2)则不限制,会把作者发布的所有文章显示出来。

效果一如下图:

给自己的网站加一个作者主页功能-似水流年

效果二如下图:

给自己的网站加一个作者主页功能-似水流年

一、在pix主题目录下新建author.php代码如下:

[reply]

效果一代码如下:

<?php get_header(); ?>

<style>    
    #content{margin:20px;background-color:#f7f7f7;padding:20px}h2{font-size:18px;margin-bottom:10px;color:#333;text-align:center;font-weight:bold}p{margin-bottom:5px;color:#333}ul{list-style-type:none;padding-left:0}.content-item{border:1px dashed #ccc;padding:10px;background-color:#fff;margin-bottom:10px}a{text-decoration:none;color:#333}.post-title{color:red}.comment-text{color:red}.moment-title{color:red}.moment-content{color:blue}</style>

<div id="content" class="narrowcolumn">

    <!– This sets the $curauth variable –>

    <?php
    if(isset($_GET['author_name'])) :
        $curauth = get_userdatabylogin($author_name);
    else :
        $curauth = get_userdata(intval($author));
    endif;

    // 获取用户ID
    $user_id = $curauth->ID;

    // 获取用户发布的文章数量
    $post_count = count_user_posts($user_id);
    // 获取用户发布的评论数量
    $comment_count = get_comments(array(
        'user_id' => $user_id,
        'count' => true,
    ));

    // 获取用户发布的片刻
    $moment_args = array(
        'author' => $user_id,
        'post_type' => 'moment',
        'post_status' => 'publish',
        'posts_per_page' => -1,
    );
    $moment_query = new WP_Query($moment_args);

    ?>

    <h2><?php echo $curauth->nickname; ?>的作者主页</h2>

    <h2><p>发布的文章数量: <?php echo $post_count; ?></p></h2>

    <ul>
        <!– The Loop –>

        <?php
        if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
            <li class="content-item">
                <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>">
                    <span class="post-title"><?php the_title(); ?></span></a>
            </li>

        <?php endwhile; else: ?>
            <p><?php _e('该用户尚未发布任何文章。'); ?></p>

        <?php endif; ?>

        <!– End Loop –>

    </ul>

    <?php if ( $moment_query->have_posts() ) : ?>
        <h2><p>发布的片刻数量: <?php echo $moment_query->post_count; ?></p></h2>
        <ul>
            <?php while ( $moment_query->have_posts() ) : $moment_query->the_post(); ?>
                <li class="content-item">
                    <?php
                    $moment_content = get_the_content();
                    $moment_text = wp_strip_all_tags($moment_content);
                    $moment_link = get_permalink();
                    ?>
                    <?php if ( get_the_title() ) : ?>
                        <?php echo '<a href="' . $moment_link . '"><span class="moment-title">' . '《' . get_the_title() . '》' . '</span></a>'; ?>
                    <?php else : ?>
                        <?php echo '<a href="' . $moment_link . '"><span class="moment-content">' . wp_trim_words( $moment_text, 30, '...' ) . '</span></a>'; ?>
                    <?php endif; ?>
                </li>
            <?php endwhile; ?>
        </ul>
        <?php wp_reset_postdata(); ?>
    <?php endif; ?>

    <?php
    $comments_args = array(
        'user_id' => $user_id,
        'status' => 'approve',
    );
    $comments = get_comments($comments_args);
    ?>

    <?php if ($comments) : ?>
        <h2><p>发布的评论数量: <?php echo $comment_count; ?></p></h2>
        <ul>
            <?php foreach ($comments as $comment) : ?>
                <li class="content-item">
                    <a href="<?php echo get_comment_link($comment); ?>">
                        <span class="comment-text"><?php echo get_comment_text($comment->comment_ID); ?></span>
                    </a>
                </li>
            <?php endforeach; ?>
        </ul>
    <?php endif; ?>

</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>

效果二(1)代码如下:

<?php get_header(); ?>

<style>
    #content{margin:20px;background-color:#f7f7f7;padding:20px}h2{font-size:18px;margin-bottom:10px;color:#333;text-align:center;font-weight:bold}p{margin-bottom:5px;color:#333}ul{list-style-type:none;padding-left:0}.content-item{border:1px dashed #ccc;padding:10px;background-color:#fff;margin-bottom:10px}a{text-decoration:none;color:#333}.post-title{color:red}.comment-text{color:red}.moment-title{color:red}.moment-content{color:blue}.tab{overflow:hidden;background-color:#f1f1f1;display:flex;border-top-left-radius:10px;border-top-right-radius:10px}.tab a{flex:1;text-align:center;padding:14px 16px;text-decoration:none;color:#666;background-color:#f1f1f1;border:1px solid #ccc;border-bottom:none;border-top-left-radius:10px;border-top-right-radius:10px}.tab a.active{background-color:#ccc;color:#333;font-weight:bold;border-bottom-color:#f1f1f1}.tab a:hover{background-color:#ddd}.tabcontent{display:none;padding:20px;background-color:#f9f9f9;border:1px solid #ccc}</style>

<div id="content" class="narrowcolumn">

    <!-- This sets the $curauth variable -->
    <?php
    if(isset($_GET['author_name'])) :
        $curauth = get_userdatabylogin($author_name);
    else :
        $curauth = get_userdata(intval($author));
    endif;

    // 获取用户ID
    $user_id = $curauth->ID;

    // 获取用户发布的文章数量
    $post_count = count_user_posts($user_id);
    // 获取用户发布的评论数量
    $comment_count = get_comments(array(
        'user_id' => $user_id,
        'count' => true,
    ));

    // 获取用户发布的片刻
    $moment_args = array(
        'author' => $user_id,
        'post_type' => 'moment',
        'post_status' => 'publish',
        'posts_per_page' => -1,
    );
    $moment_query = new WP_Query($moment_args);

    // 获取用户发布的评论
    $comments_args = array(
        'user_id' => $user_id,
        'status' => 'approve',
    );
    $comments = get_comments($comments_args);

    ?>
    <h2><?php echo $curauth->nickname; ?>的作者主页</h2>

    <div class="tab">
        <a href="javascript:void(0);" class="tablinks active" onclick="openTab('articles')">文章(<?php echo $post_count; ?>)</a>
        <a href="javascript:void(0);" class="tablinks" onclick="openTab('moments')">片刻(<?php echo $moment_query->post_count; ?>)</a>
        <a href="javascript:void(0);" class="tablinks" onclick="openTab('comments')">评论(<?php echo $comment_count; ?>)</a>
    </div>

    <div id="articles" class="tabcontent" style="display: block;">
        <ul>
            <!-- The Loop -->
            <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
                <li class="content-item">
                    <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>">
                        <span class="post-title"><?php the_title(); ?></span></a>
                </li>
            <?php endwhile; else: ?>
                <p><?php _e('该用户尚未发布任何文章。'); ?></p>
            <?php endif; ?>
            <!-- End Loop -->
        </ul>
    </div>

    <div id="moments" class="tabcontent">
        <ul>
            <?php if ( $moment_query->have_posts() ) : while ( $moment_query->have_posts() ) : $moment_query->the_post(); ?>
                <li class="content-item">
                    <?php
                    $moment_content = get_the_content();
                    $moment_text = wp_strip_all_tags($moment_content);
                    $moment_link = get_permalink();
                    ?>
                    <?php if ( get_the_title() ) : ?>
                        <?php echo '<a href="' . $moment_link . '"><span class="moment-title">' . '《' . get_the_title() . '》' . '</span></a>'; ?>
                    <?php else : ?>
                        <?php echo '<a href="' . $moment_link . '"><span class="moment-content">' . wp_trim_words( $moment_text, 30, '...' ) . '</span></a>'; ?>
                    <?php endif; ?>
                </li>
            <?php endwhile; else: ?>
                <p><?php _e('该用户尚未发布任何片刻。'); ?></p>
            <?php endif; ?>
        </ul>
    </div>

    <div id="comments" class="tabcontent">
        <ul>
            <?php if ($comments) : foreach ($comments as $comment) : ?>
                <li class="content-item">
                    <a href="<?php echo get_comment_link($comment); ?>">
                        <span class="comment-text"><?php echo get_comment_text($comment->comment_ID); ?></span>
                    </a>
                </li>
            <?php endforeach; else: ?>
                <p><?php _e('该用户尚未发布任何评论。'); ?></p>
            <?php endif; ?>
        </ul>
    </div>

</div>

<script>
    function openTab(evt, tabName) {
        var i, tabcontent, tablinks;
        tabcontent = document.getElementsByClassName("tabcontent");
        for (i = 0; i < tabcontent.length; i++) {
            tabcontent[i].style.display = "none";
        }
        tablinks = document.getElementsByClassName("tablinks");
        for (i = 0; i < tablinks.length; i++) {
            tablinks[i].className = tablinks[i].className.replace(" active", "");
        }
        document.getElementById(tabName).style.display = "block";
        evt.currentTarget.className += " active";
    }
    
    function openTab(tabName) {
    var i, tabcontent, tablinks;
    tabcontent = document.getElementsByClassName("tabcontent");
    for (i = 0; i < tabcontent.length; i++) {
        tabcontent[i].style.display = "none";
    }
    tablinks = document.getElementsByClassName("tablinks");
    for (i = 0; i < tablinks.length; i++) {
        tablinks[i].className = tablinks[i].className.replace(" active", "");
    }
    document.getElementById(tabName).style.display = "block";
    document.querySelector(`[onclick="openTab('${tabName}')"]`).className += " active";
    }
    
</script>

<?php get_sidebar(); ?>
<?php get_footer(); ?>

效果二(2)代码如下:

<?php get_header(); ?>

<style>
    #content{margin:20px;background-color:#f7f7f7;padding:20px}h2{font-size:18px;margin-bottom:10px;color:#333;text-align:center;font-weight:bold}p{margin-bottom:5px;color:#333}ul{list-style-type:none;padding-left:0}.content-item{border:1px dashed #ccc;padding:10px;background-color:#fff;margin-bottom:10px}a{text-decoration:none;color:#333}.post-title{color:red}.comment-text{color:red}.moment-title{color:red}.moment-content{color:blue}.tab{overflow:hidden;background-color:#f1f1f1;display:flex;border-top-left-radius:10px;border-top-right-radius:10px}.tab a{flex:1;text-align:center;padding:14px 16px;text-decoration:none;color:#666;background-color:#f1f1f1;border:1px solid #ccc;border-bottom:none;border-top-left-radius:10px;border-top-right-radius:10px}.tab a.active{background-color:#ccc;color:#333;font-weight:bold;border-bottom-color:#f1f1f1}.tab a:hover{background-color:#ddd}.tabcontent{display:none;padding:20px;background-color:#f9f9f9;border:1px solid #ccc}</style>

<div id="content" class="narrowcolumn">

    <!-- This sets the $curauth variable -->
    <?php
    if(isset($_GET['author_name'])) :
        $curauth = get_userdatabylogin($author_name);
    else :
        $curauth = get_userdata(intval($author));
    endif;

    // 获取用户ID
    $user_id = $curauth->ID;

    // 获取用户发布的文章数量
    $post_count = count_user_posts($user_id);
    // 获取用户发布的评论数量
    $comment_count = get_comments(array(
        'user_id' => $user_id,
        'count' => true,
    ));

    // 获取用户发布的片刻
    $moment_args = array(
        'author' => $user_id,
        'post_type' => 'moment',
        'post_status' => 'publish',
        'posts_per_page' => -1,
    );
    $moment_query = new WP_Query($moment_args);

    // 获取用户发布的评论
    $comments_args = array(
        'user_id' => $user_id,
        'status' => 'approve',
    );
    $comments = get_comments($comments_args);

    ?>
    <h2><?php echo $curauth->nickname; ?>的作者主页</h2>

    <div class="tab">
        <a href="javascript:void(0);" class="tablinks active" onclick="openTab('articles')">文章(<?php echo $post_count; ?>)</a>
        <a href="javascript:void(0);" class="tablinks" onclick="openTab('moments')">片刻(<?php echo $moment_query->post_count; ?>)</a>
        <a href="javascript:void(0);" class="tablinks" onclick="openTab('comments')">评论(<?php echo $comment_count; ?>)</a>
    </div>

    <div id="articles" class="tabcontent" style="display: block;">
        <ul>
            <!-- The Loop -->
            <?php
            $author_posts = new WP_Query( array(
                'author' => $user_id,
                'post_type' => 'post',
                'post_status' => 'publish',
                'posts_per_page' => -1,
            ) );
            if ( $author_posts->have_posts() ) : while ( $author_posts->have_posts() ) : $author_posts->the_post();
            ?>
                <li class="content-item">
                    <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>">
                        <span class="post-title"><?php the_title(); ?></span>
                    </a>
                </li>
            <?php endwhile; else: ?>
                <p><?php _e('该用户尚未发布任何文章。'); ?></p>
            <?php endif; ?>
            <!-- End Loop -->
        </ul>
    </div>

    <div id="moments" class="tabcontent">
        <ul>
            <?php if ( $moment_query->have_posts() ) : while ( $moment_query->have_posts() ) : $moment_query->the_post(); ?>
                <li class="content-item">
                    <?php
                    $moment_content = get_the_content();
                    $moment_text = wp_strip_all_tags($moment_content);
                    $moment_link = get_permalink();
                    ?>
                    <?php if ( get_the_title() ) : ?>
                        <?php echo '<a href="' . $moment_link . '"><span class="moment-title">' . '《' . get_the_title() . '》' . '</span></a>'; ?>
                    <?php else : ?>
                        <?php echo '<a href="' . $moment_link . '"><span class="moment-content">' . wp_trim_words( $moment_text, 30, '...' ) . '</span></a>'; ?>
                    <?php endif; ?>
                </li>
            <?php endwhile; else: ?>
                <p><?php _e('该用户尚未发布任何片刻。'); ?></p>
            <?php endif; ?>
        </ul>
    </div>

    <div id="comments" class="tabcontent">
        <ul>
            <?php if ($comments) : foreach ($comments as $comment) : ?>
                <li class="content-item">
                    <a href="<?php echo get_comment_link($comment); ?>">
                        <span class="comment-text"><?php echo get_comment_text($comment->comment_ID); ?></span>
                    </a>
                </li>
            <?php endforeach; else: ?>
                <p><?php _e('该用户尚未发布任何评论。'); ?></p>
            <?php endif; ?>
        </ul>
    </div>

</div>

<script>
    function openTab(evt, tabName) {
        var i, tabcontent, tablinks;
        tabcontent = document.getElementsByClassName("tabcontent");
        for (i = 0; i < tabcontent.length; i++) {
            tabcontent[i].style.display = "none";
        }
        tablinks = document.getElementsByClassName("tablinks");
        for (i = 0; i < tablinks.length; i++) {
            tablinks[i].className = tablinks[i].className.replace(" active", "");
        }
        document.getElementById(tabName).style.display = "block";
        evt.currentTarget.className += " active";
    }
    
    function openTab(tabName) {
    var i, tabcontent, tablinks;
    tabcontent = document.getElementsByClassName("tabcontent");
    for (i = 0; i < tabcontent.length; i++) {
        tabcontent[i].style.display = "none";
    }
    tablinks = document.getElementsByClassName("tablinks");
    for (i = 0; i < tablinks.length; i++) {
        tablinks[i].className = tablinks[i].className.replace(" active", "");
    }
    document.getElementById(tabName).style.display = "block";
    document.querySelector(`[onclick="openTab('${tabName}')"]`).className += " active";
    }
    
</script>

<?php get_sidebar(); ?>
<?php get_footer(); ?>

[/reply]

二、加入右上角登录后控制台下方。

给自己的网站加一个作者主页功能-似水流年

修改pix/layouts/header-tool.php,找到

<a href="<?php echo home_url('/wp-admin'); ?>" target="_blank" pjax="exclude"><i class="ri-function-line"></i>控制台</a>

在其下方加入如下代码:

<?php 
      if (is_user_logged_in()) {
         $current_user = wp_get_current_user();
         $author_url = home_url('/author/') . $current_user->user_login; 
?>
<a href="<?php echo $author_url; ?>"><i class="ri-user-3-fill"></i>我的主页</a>
<?php } ?>

这样登录用户可以直接查看自己的主页。

更新缓存,大功告成!

Comments | 8 条评论
  • 刘郎

    Google Chrome 127 Google Chrome 127 GNU/Linux GNU/Linux 1中国–贵州–贵阳 移动 ip address 117.187.*.*

    这个得看个人的使用习惯而定吧 添加的东西多了 感觉是负担 但只要自己觉得好用 管他呢 先用上再说

    • 似水流年

      Google Chrome 93 Google Chrome 93 GNU/Linux GNU/Linux 1中国–河南–漯河 联通 ip address 123.10.*.*

      是的,我就是先用上,再慢慢完善修改。

  • obaby

    Google Chrome 118 Google Chrome 118 Mac OS X 10.15 Mac OS X 10.15 1中国–山东–青岛 联通 ip address 112.224.*.*

    Fatal error: Uncaught TypeError: strpos(): Argument #1 ($haystack) must be of type string, array given in /www/wwwroot/my1981.cn/wp-content/plugins/wp-rocket/wp-rocket.php:31 Stack trace: #0 /www/wwwroot/my1981.cn/wp-content/plugins/wp-rocket/wp-rocket.php(31): strpos() #1 /www/wwwroot/my1981.cn/wp-includes/class-wp-hook.php(324): {closure}() #2 /www/wwwroot/my1981.cn/wp-includes/plugin.php(205): WP_Hook->apply_filters() #3 /www/wwwroot/my1981.cn/wp-includes/class-wp-http.php(258): apply_filters() #4 /www/wwwroot/my1981.cn/wp-includes/class-wp-http.php(637): WP_Http->request() #5 /www/wwwroot/my1981.cn/wp-includes/http.php(168): WP_Http->get() #6 /www/wwwroot/my1981.cn/wp-content/themes/pix/page/friends.php(36): wp_remote_get() #7 /www/wwwroot/my1981.cn/wp-includes/template-loader.php(106): include('...') #8 /www/wwwroot/my1981.cn/wp-blog-header.php(19): require_once('...') #9 /www/wwwroot/my1981.cn/index.php(17): require('...') #10 {main} thrown in /www/wwwroot/my1981.cn/wp-content/plugins/wp-rocket/wp-rocket.php on line 31
    还是报错呢

    • 似水流年

      Microsoft Edge 119 Microsoft Edge 119 Windows 10 Windows 10 1中国–河南–漯河 联通 ip address 182.126.*.*

      TXT文件是对的,我的站是现在逐步调试看能不能异步加载,还在改代码。

  • 战东海

    Microsoft Edge 120 Microsoft Edge 120 Windows 10 Windows 10 1中国–辽宁–抚顺 联通 ip address 113.231.*.*

    这个不错

    • 似水流年

      Microsoft Edge 119 Microsoft Edge 119 Windows 10 Windows 10 1中国–河南–漯河 联通 ip address 182.126.*.*

      刚刚更新了。

  • 网友小宋

    Microsoft Edge 120 Microsoft Edge 120 Windows 10 Windows 10 1中国–河南–漯河 联通 ip address 125.44.*.*

    感觉是不是缺了个关于本站

    • 似水流年

      IBrowse r IBrowse r Android 10 Android 10 1中国–河南–漯河 电信 ip address 222.89.*.*

      这个可以有哈

消息盒子
# 您需要首次评论以获取消息 #
# 您需要首次评论以获取消息 #

只显示最新10条未读和已读信息