前言

刚开始玩WordPress时就想着搞一个类似于说说那样的页面,用来发表一些生活牢骚以及来记录本站的一些改动。刚开始想的是和我之前在Typecho博客上的那样,搞一个单独页面,只放一个评论模块。后来又想像微博那样搞一套话题系统,这样的话需要给每一条说说进行分类。于是我还是使用了WordPress的自定义文章类型功能。

注册说说文章类型

话不多说直接上代码

function my_shuoshuo_init(){ 
    $labels = array( 'name' => '说说',
        'singular_name' => '说说',
        'add_new' => '发表说说',
        'add_new_item' => '发表说说',
        'edit_item' => '编辑说说',
        'new_item' => '新说说',
        'view_item' => '查看说说',
        'search_items' => '搜索说说',
        'not_found' => '暂无说说',
        'not_found_in_trash' => '没有已遗弃的说说',
        'parent_item_colon' => '', 
        'menu_name' => '说说' );
    $args=array('labels'=>$labels,'public'=>true,'publicly_queryable'=>true,'exclude_from_search'=>false,'show_ui'=>true,'show_in_menu'=>true,'query_var'=>true,'rewrite'=>true,'capability_type'=>'post','has_archive'=>true,'hierarchical'=>false,'menu_position'=>null,'supports'=>array('title','editor','author','comments'));
    register_post_type('shuoshuo',$args);
}
add_action('init', 'my_shuoshuo_init');

在主题目录下的functions.php文件中添加以上代码,这样在后台的侧栏上就能看见说说菜单了。当然现在只是注册了说说文章类型,接下来还得让它在前台显示。

创建说说列表页面

在主题文件中新建shuoshuo.php文件,提供我的代码给大家参考(这里我创建了两个文件shuoshuo.php以及loop_shuoshuo.php)

// shuoshuo.php
<?php
/**
 * Template Name: 说说 
 * ......
 */
get_header();
?>
<div id="container" class="container body-container">
    <div id="sidebar-left" class="sidebar-left">
        <?php dynamic_sidebar( 'sidebar-1' ); ?>
    </div>
    <div id="main-container" class="main-container">
        <?php
            if ( get_query_var( 'paged' ) ) {
                $paged = get_query_var( 'paged' );
            } elseif ( get_query_var( 'page' ) ) {
                $paged = get_query_var( 'page' );
            } else {
                $paged = 1;
            }

            $args = array( 'post_type' => 'shuoshuo', 'posts_per_page' => 10, 'paged' => $paged );
            $wp_query = new WP_Query( $args );
        ?>
        <div class="post-list">
            <?php while ( have_posts() ) : ?>
            <?php the_post(); ?>
            <?php get_template_part('page/loop_shuoshuo', get_post_format());?>
            <?php endwhile; ?>
        </div>
        <?php get_template_part( 'pagination' ); ?>
    </div>
    <div id="sidebar-right" class="sidebar-right">
        <?php dynamic_sidebar( 'sidebar-2' ); ?>
        <div id="sidebar-sticky" class="sidebar sticky-top">
            <?php dynamic_sidebar( 'sidebar-3' ); ?>
        </div>  
    </div>
</div>
<?php get_footer(); ?>
// loop_shuoshuo.php
<?php
/**
 * 说说列表
 */
?>
<article id="post-<?php the_ID(); ?>" class="shuoshuo-list">
        <div class="post-card">
            <?php my_author() ?>
            <div class="card-body">
                <span class = "topic"><?php the_terms($post->ID, 'topic'); ?></span>
                <span class="card-content shuoshuo-content"><?php the_content(); ?></span>
            </div>
            <?php my_card_footer() ?>
        </div>
</article>

然后在后台创建页面,然后页面模板选择说说就可以了。

创建说说页面

现在前台已经可以看到说说列表了,点击也可以跳转到详细的说说内容页面。但是这个页面是默认调用single.php这个文件来生成的。如果和我一样挑剔的人肯定不会满意,于是我们创建single-shuoshuo.php来生成只应用于说说文章类型的页面,同样附上我的代码给大家参考:

<?php
/**
 * 说说页面
 * ......
 */
get_header(); 
?>
<div id="container" class="container body-container">
    <div id="sidebar-left" class="sidebar-left">
        <?php dynamic_sidebar( 'sidebar-1' ); ?>
    </div>
    <div id="main-container" class="main-container">
        <?php if ( have_posts() ) : ?>
            <?php while ( have_posts() ) : ?>
                <?php the_post(); ?>
                <article id="post-<?php the_ID(); ?>" class="myblog-post shuoshuo">
                    <?php my_author(); ?>
                    <div itemprop="articleBody" class="article-body card-body">
                        <span class = "topic"><?php the_terms($post->ID, 'topic'); ?></span>
                        <?php the_content(); ?>
                    </div>
                    <?php my_post_like() ?>
                </article>
                <?php comments_template(); ?>
            <?php endwhile; ?>
        <?php endif; ?>
    </div>
    <div id="sidebar-right" class="sidebar-right">
        <?php dynamic_sidebar( 'sidebar-2' ); ?>
        <div id="sidebar-sticky" class="sidebar sticky-top">
            <?php dynamic_sidebar( 'sidebar-3' ); ?>
        </div>  
    </div>
</div>
<?php get_footer(); ?>

现在说说文章类型的创建和展示都已经完成了,接下来开始注册自定义分类法。

注册话题分类法

我们的想法是给说说文章类型添加一个分类法。我们可以让说说文章类型以及默认文章类型共用文类和标签,也可以单独为说说文章类型创建分类法。我选择了后者,在functions.php文件中添加以下代码:

function my_taxonomies_topic() {
    $args = array(
        'labels' => array('menu_name' => '话题'),
        'public'            => true,
        'show_in_nav_menus' => true,
        'hierarchical' => false, //控制自定义分类法的格式,如果值是false,则将分类(category)转化成标签(tags)
        'show_ui'           => true,
        'query_var'         => true,
        'rewrite'           => true,
        'show_admin_column' => true
    );
    register_taxonomy( 'topic', 'shuoshuo', $args );//topic是该自定义分类法的名称;shuoshuo是对应的自定义文章类型名称

这样后台说说菜单下会多出一个话题子菜单。话题分类我们就创建完成了。
至于怎么获取某条说说所属的话题,可以在主循环中使用以下代码:

<?php the_terms($post->ID, 'topic'); ?>

如果和我一样想模仿微博那样的话题样式,可以使用:before以及:after在每个话题前后添加#

创建话题分类页面

终于到最后一步了。由于我们给说说以及默认文章类型创建了不同的样式。而在分类页面WordPress会为每篇文章调用默认文章的样式。所以我们要为说说文章类型创建一个单独的分类页面,创建taxonomy-topic.php文件,这里附上我的代码供大家参考:

<?php
/**
 * 说说分类页面
 * ......
 */
get_header(); 
?>
<div id="container" class="container body-container">
    <div id="sidebar-left" class="sidebar-left">    
        <?php dynamic_sidebar( 'sidebar-1' ); ?>
    </div>
    <div id="main-container" class="main-container">
        <div class="post-list">
            <?php while ( have_posts() ) : ?>
            <?php the_post(); ?>
            <?php get_template_part('page/loop_shuoshuo', get_post_format());?>
            <?php endwhile; ?>
        </div>
        <?php get_template_part( 'pagination' ); ?>
    </div>
    <div id="sidebar-right" class="sidebar-right">
        <?php dynamic_sidebar( 'sidebar-2' ); ?>
        <div id="sidebar-sticky" class="sidebar sticky-top">
            <?php dynamic_sidebar( 'sidebar-3' ); ?>
        </div>  
    </div>
</div>
<?php get_footer(); ?>

到此整个说说系统就创建完成了。

另外说一句,我这个主题总共有三种自定义文章类型,分别是说说,音乐以及相册。它们的创建过程都是大同小异。