WordPress主题开发总结(下):技巧

Table of Contents

本文主要包括在 WordPress 开发中会遇到的一些问题(随机文章,记录文章浏览量,热评文章,SITEINFO,PageNav)及解决方案。

注意:看这些技巧之前,首先一定要了解基本的 WordPress 主题结构。

1. 获取发布文章

<?php
    $args = array( 'numberposts' => 12, 'orderby' => 'pubdate' );
    $rand_posts = get_posts( $args );
    foreach( $rand_posts as $post ) : ?>
    <div class="post">
        <p class="title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
        <p class="postmetadata">
            分类:<?php the_category(', ') ?>   <?php the_tags('Tags: ', ', ' , ''); ?> <?php edit_post_link('编辑', ' &#124; ', ''); ?>
        </p>
    </div>
<?php endforeach; ?>

numberposts 指的是文章数量。orderby 值为 pubdate 表示最近发布,当值为 rand 时,表示随机,也就是随机获取文章。

2. 显示热"点"文章列表

首先要实现文章浏览量,就这个功能而言,把下面的两个函数添加到 functions.php 中。

function getPostViews($postID) {
    $count_key = 'post_views_count';
    $count = get_post_meta ( $postID, $count_key, true );
    if ($count == '') {
        delete_post_meta ( $postID, $count_key );
        add_post_meta ( $postID, $count_key, '0' );
        return "0 View";
    }
    return $count . ' Views';
}

function setPostViews($postID) {
    $count_key = 'post_views_count';
    $count = get_post_meta ( $postID, $count_key, true );
    if ($count == '') {
        $count = 0;
        delete_post_meta ( $postID, $count_key );
        add_post_meta ( $postID, $count_key, '0' );
    } else {
        $count ++;
        update_post_meta ( $postID, $count_key, $count );
    }
}

在主循环中添加如下代码,应该都能看懂,第一个是在浏览的时候记录,第二是显示浏览次数。

<?php setPostViews(get_the_ID()); ?>
<?php echo getPostViews(get_the_ID()); ?>[/php]

但是,如果要把热门点击文章按列表显示,上面这个方法就不行了,我用的是插件(WP-PostViews)。在需要显示该文章浏览次数处,调用 the_views 方法:

<?php if(function_exists('the_views')) { the_views(); } ?>

在想要显示列表的调用 get_most_viewed 方法:

<?php if (function_exists('get_most_viewed')): ?>
   <ul>
   <?php get_most_viewed('both', 12);?>
   </ul>
<?php endif; ?>[/php]

至于显示的效果需要你的 css 和 WP-PostViews 后台设置相配合。

3. 显示热"评"文章列表

在 functions.php 中添加如下 simple_get_most_review,这个函数我是从网上拷贝的,foreach 中添加了显示文章评论个数的代码, 否则显示出来的只是热评文章的标题。你在使用的时候,建议手动修改一下。

/*
$termId:分类目录 ID,为 0 时是检索所有分类目录
$posts_num:显示热评文章的数量
$days:检索多少天内的热评文章
*/
function simple_get_most_review($termId=0,$posts_num=12, $days=30)
{
    global $wpdb;
    if($termId==0){
        $sql = "SELECT `ID` , `post_title` , `comment_count` FROM $wpdb->posts
        WHERE `post_type` = 'post'
        AND TO_DAYS( now( ) ) - TO_DAYS( `post_date` ) < $days
        AND (`wp_posts`.`post_status` = 'publish' OR `wp_posts`.`post_status` = 'inherit')
        ORDER BY `comment_count` DESC LIMIT 0 , $posts_num ";
    }
    else {
        $sql="SELECT `ID` , `post_title` , `comment_count`  FROM `wp_posts`
        INNER JOIN `wp_term_relationships` ON (`wp_posts`.`ID` = `wp_term_relationships`.`object_id`)
        INNER JOIN `wp_term_taxonomy` ON (`wp_term_relationships`.`term_taxonomy_id` =  `wp_term_taxonomy`.`term_taxonomy_id`)
        WHERE   1=1
        AND `wp_term_taxonomy`.`taxonomy` = 'category'
        AND `wp_term_taxonomy`.`term_id` = $termId
        AND `wp_posts`.`post_type` = 'post'
        AND (`wp_posts`.`post_status` = 'publish' OR `wp_posts`.`post_status` = 'inherit')
        GROUP BY `wp_posts`.`ID`
        ORDER BY `comment_count` DESC LIMIT 0 , 10  ";
    }
    $posts = $wpdb->get_results($sql);
    $output = "";
    foreach ($posts as $post){
        $overPost=$post->post_title;
        $comment = get_post($post->ID)->comment_count;
        $output .= "\n<li> <div class=\"key\">
            <a href= \"".get_permalink($post->ID)."\" rel=\"bookmark\" title=\"".$post->post_title."\" >".$overPost."</a>
            </div>
            <div class=\"value\">
                $comment
            </div></li>";
    }
    echo $output;
}

在需要显示热评列表的地方,调用 simple_get_most_review (参数含义请看函数声明)。

<ul>
<?php if (function_exists('simple_get_most_review')) {simple_get_most_review(0,12,36500); }  ?>
</ul>

4. 显示 SITEINFO

文章数量:<?php $count_posts = wp_count_posts();echo $published_posts = $count_posts->publish;?>
分类数量:<?php echo $count_categories =wp_count_terms('category'); ?>
标签数量:<?php echo $count_tags =wp_count_terms('post_tag'); ?>
评论数量:<?php $count_comments =get_comment_count();echo $count_comments['approved'];?>
页面总数:<?php $count_pages = wp_count_posts('page'); echo $page_posts = $count_pages->publish; ?>
链接总数:<?php $link = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->links WHERE link_visible = 'Y'"); echo $link; ?>
网站已运行:<?php echo floor((time()-strtotime("2010-7-10"))/86400); ?>
最后更新:<?php $last = $wpdb->get_results("SELECT MAX(post_modified) AS MAX_m FROM $wpdb->posts WHERE (post_type = 'post' OR post_type = 'page') AND (post_status = 'publish' OR post_status = 'private’)");$last = date('Y-n-j', strtotime($last[0]->MAX_m));echo $last; ?>

5. 无插件实现 PageNav

6. 杂项

  • <?php bloginfo('stylesheet_url'); ?> 获取 style.css 文件所在路径
  • <?php bloginfo('name'); ?> 获取博客标题
  • <?php bloginfo('url'); ?> 获取博客链接
  • <?php bloginfo('description'); ?> 获取博客描述
  • <?php bloginfo('template_url'); ?> 用户主目录
  • TEMPLATEPATH 主题文件夹的位置
  • the_title() 日志标题
  • the_permalink() 日志标题链接
  • the_category(',') 日志所在分类(用','分隔开)
  • the_author() 当前日志作者名
  • comments_popup_link('No Comments &#187;', '1 Comment &#187;', '% Comments &#187;'); 当弹出留言的功能激活的话,=comment_popup_link()= 调用一个弹出的留言窗口,如果没有激活,=comment_popup_link()= 则只是简单的显示留言列表。=No Comments &#187= 是在没有留言的时候显示的。 1 Comment &#187; 是用于当刚好只有 1 条留言的时候。=% Comments &187;= 显示多余 1 条留言的时候。
  • edit_post_link('Edit', '|', '') 显示一个可以用来编辑当前日志的编辑链接。第一个参数用来确定显示的文字,第二个参数是显示在文字前面的字符,第三个参数是显示在文字后面的字符。

7. 参考文章

First created: 2013-01-17 15:46:33
Last updated: 2022-12-11 Sun 12:49
Power by Emacs 27.1 (Org mode 9.4.4)