WordPress建立说说/微博/微语页面

一、后台新建文章类型

目的和意义

新建文章类型以实现独立内容板块和自定义样式;避免在首页显示新建板块的文章内容。
调用函数:register_post_type( string $post_type, array|string $args = array() )

编辑主题目录下functions.php文件,加入如下代码:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
//给网站添加说说功能
function my_custom_post_nonsense() {
$labels = array(
'name' => _x( '说说', 'post type 名称' ),
'singular_name' => _x( '说说', 'Post Type 单个 Item 时的名称' ),
'add_new' => _x( '新建说说', '添加新内容的链接名称' ),
'add_new_item' => __( '新建一个说说' ),
'edit_item' => __( '编辑说说' ),
'new_item' => __( '新说说' ),
'all_items' => __( '所有说说' ),
'view_item' => __( '查看说说' ),
'search_items' => __( '搜索说说' ),
'not_found' => __( '没有找到有关说说' ),
'not_found_in_trash' => __( '回收站里面没有相关说说' ),
'parent_item_colon' => '',
'menu_name' => '说说'
);
$args = array(
'labels' => $labels,
'description' => '说说信息',
'public' => true,
'menu_position' => 5,
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments' ),
'has_archive' => true
);
register_post_type( 'nonsense', $args );
}
add_action( 'init', 'my_custom_post_nonsense' );
//给网站添加说说功能 function my_custom_post_nonsense() { $labels = array( 'name' => _x( '说说', 'post type 名称' ), 'singular_name' => _x( '说说', 'Post Type 单个 Item 时的名称' ), 'add_new' => _x( '新建说说', '添加新内容的链接名称' ), 'add_new_item' => __( '新建一个说说' ), 'edit_item' => __( '编辑说说' ), 'new_item' => __( '新说说' ), 'all_items' => __( '所有说说' ), 'view_item' => __( '查看说说' ), 'search_items' => __( '搜索说说' ), 'not_found' => __( '没有找到有关说说' ), 'not_found_in_trash' => __( '回收站里面没有相关说说' ), 'parent_item_colon' => '', 'menu_name' => '说说' ); $args = array( 'labels' => $labels, 'description' => '说说信息', 'public' => true, 'menu_position' => 5, 'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments' ), 'has_archive' => true ); register_post_type( 'nonsense', $args ); } add_action( 'init', 'my_custom_post_nonsense' );
//给网站添加说说功能
function my_custom_post_nonsense() {
  $labels = array(
    'name'               => _x( '说说', 'post type 名称' ),
    'singular_name'      => _x( '说说', 'Post Type 单个 Item 时的名称' ),
    'add_new'            => _x( '新建说说', '添加新内容的链接名称' ),
    'add_new_item'       => __( '新建一个说说' ),
    'edit_item'          => __( '编辑说说' ),
    'new_item'           => __( '新说说' ),
    'all_items'          => __( '所有说说' ),
    'view_item'          => __( '查看说说' ),
    'search_items'       => __( '搜索说说' ),
    'not_found'          => __( '没有找到有关说说' ),
    'not_found_in_trash' => __( '回收站里面没有相关说说' ),
    'parent_item_colon'  => '',
    'menu_name'          => '说说'
  );
  $args = array(
    'labels'        => $labels,
    'description'   => '说说信息',
    'public'        => true,
    'menu_position' => 5,
    'supports'      => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments' ),
    'has_archive'   => true
  );
  register_post_type( 'nonsense', $args );
}
add_action( 'init', 'my_custom_post_nonsense' );

后台刷新后,发现在“文章”菜单下面出现了新的菜单“说说”。

二、前台函数调用

目的和意义

新建页面并调用自定义模板,实现前台显示新定义文章类型的内容的显示,实现个性化的页面和文章样式。

在主题目录下新建名称为Talk.php的文件并编辑(名称无实际意义,仅为了便于管理):

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
/* Template Name: 说说 */
get_header();
?>
<section class="container">
<div class="content-wrap">
<div class="content">
<div style="background: #FFF; padding: 30px; border-radius: 5px;">
<ul class="cbp_tmtimeline">
<?php
query_posts("post_type=nonsense & post_status=publish & posts_per_page=-1");
if ( have_posts() ) {
while ( have_posts() ) {
the_post(); ?>
<li>
<time class="cbp_tmtime"><i class="fa fa-clock-o"></i> <?php the_time('Y年n月j日G:i'); ?></time>
<div class="cbp_tmicon">
<img src="https://www.evan.link/图片地址/LOGO.png" class="avatar avatar-48" width="48" height="48">
</div>
<div class="cbp_tmlabel" >
<span style="font-size:14px;"><?php the_content(); ?></span>
<h2><?php the_title(); ?><span><?php echo get_bloginfo('name'); ?> | <?php echo get_bloginfo('description' ); ?></span></h2>
</div>
</li>
<?php }
} ?>
</ul>
</div>
</div>
</div>
</section>
<?php get_footer();?>
<?php /* Template Name: 说说 */ get_header(); ?> <section class="container"> <div class="content-wrap"> <div class="content"> <div style="background: #FFF; padding: 30px; border-radius: 5px;"> <ul class="cbp_tmtimeline"> <?php query_posts("post_type=nonsense & post_status=publish & posts_per_page=-1"); if ( have_posts() ) { while ( have_posts() ) { the_post(); ?> <li> <time class="cbp_tmtime"><i class="fa fa-clock-o"></i> <?php the_time('Y年n月j日G:i'); ?></time> <div class="cbp_tmicon"> <img src="https://www.evan.link/图片地址/LOGO.png" class="avatar avatar-48" width="48" height="48"> </div> <div class="cbp_tmlabel" > <span style="font-size:14px;"><?php the_content(); ?></span> <h2><?php the_title(); ?><span><?php echo get_bloginfo('name'); ?> | <?php echo get_bloginfo('description' ); ?></span></h2> </div> </li> <?php } } ?> </ul> </div> </div> </div> </section> <?php get_footer();?>
<?php 
/* Template Name: 说说 */
get_header(); 
?>
<section class="container">
<div class="content-wrap">
<div class="content">
    <div style="background: #FFF; padding: 30px; border-radius: 5px;">
        <ul class="cbp_tmtimeline">
        <?php 
        query_posts("post_type=nonsense & post_status=publish & posts_per_page=-1");
        if ( have_posts() ) { 
        while ( have_posts() ) { 
        the_post(); ?>
            <li>
                <time class="cbp_tmtime"><i class="fa fa-clock-o"></i> <?php the_time('Y年n月j日G:i'); ?></time>
                <div class="cbp_tmicon">
                <img src="https://www.evan.link/图片地址/LOGO.png" class="avatar avatar-48" width="48" height="48">
                </div>
                <div class="cbp_tmlabel" >
                    <span style="font-size:14px;"><?php the_content(); ?></span>
                    <h2><?php the_title(); ?><span><?php echo get_bloginfo('name'); ?> | <?php echo get_bloginfo('description' ); ?></span></h2>
                </div>
            </li>
        <?php }
        } ?>
        </ul>
    </div>
</div> 
</div>
</section>
<?php get_footer();?>

然后在前台新建页面选择模板“说说”即可,此时在后台“说说”板块发布的内容会自动在新建页面显示。
注意:新建页面的URL别名不要和第一步建立的register_post_type( 'nonsense', $args );中的nonsense重复

三、样式和其他设置

实现自定义样式的方式有两种:一是新建CSS文件调用,二是直接写入Talk.php文件中,用户可以自行发挥想象力创建个性化的需求。

以直接写入Talk.php文件为例,编辑Talk.php文件,加入如下代码(该代码同时适配PC端和移动端):

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<style>
.cbp_tmtimeline {
margin: 30px 0 0 0;
padding: 0;
list-style: none;
position: relative;
}
/* The line */
.cbp_tmtimeline:before {
content: '';
position: absolute;
top: 0;
bottom: 0;
width: 10px;
background: #f4f5f9;
left: 20%;
margin-left: -6px;
}
/* The date/time */
.cbp_tmtimeline > li .cbp_tmtime {
display: block;
width: 30%;
padding-right: 100px;
position: absolute;
color: #AAA;
}
.cbp_tmtimeline > li .cbp_tmtime span {
display: block;
text-align: right;
}
.cbp_tmtimeline > li .cbp_tmtime span:first-child {
font-size: 0.9em;
color: #bdd0db;
}
.cbp_tmtimeline > li .cbp_tmtime span:last-child {
font-size: 2.9em;
color: #e4f0ff;
}
.cbp_tmtimeline > li:nth-child(odd) .cbp_tmtime span:last-child {
color: #F6F6F6;
}
/* Right content */
.cbp_tmtimeline > li .cbp_tmlabel {
margin: -30px 0 15px 25%;
background: #e4f0ff;
color: black;
padding: 0.8em;
font-size: 1.2em;
font-weight: 300;
line-height: 1.4;
position: relative;
border-radius: 5px;
}
.cbp_tmtimeline > li:nth-child(odd) .cbp_tmlabel {
background: #F6F6F6;
}
.cbp_tmtimeline > li .cbp_tmlabel h2 {
border-bottom: 0px;
border-top:1px dashed #FFF;
font-size:16px;
height: 24px;
padding: 5px 3px 12px;
margin:0px;
}
.cbp_tmtimeline > li .cbp_tmlabel h2 > span {
font-size: 12px;
float: right;
text-align: center;
line-height: 24px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* The triangle */
.cbp_tmtimeline > li .cbp_tmlabel:after {
right: 100%;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
border-right-color: #e4f0ff;
border-width: 10px;
top: 10px;
}
.cbp_tmtimeline > li:nth-child(odd) .cbp_tmlabel:after {
border-right-color: #F6F6F6;
}
/* The icons */
.cbp_tmtimeline > li .cbp_tmicon {
width: 48px;
height: 48px;
font-family: 'ecoico';
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
font-size: 48px;
line-height: 48px;
-webkit-font-smoothing: antialiased;
position: relative;
color: #fff;
background: #46a4da;
border-radius: 50%;
box-shadow: 0 0 0 8px #f4f5f9;
text-align: center;
left: 20%;
top: 0;
margin: 0 0 0 -25px;
}
.cbp_tmtimeline > li .cbp_tmicon >img {
border-radius: 50%;
position: absolute;
top: 0px;
left: 0px;
}
/* Example Media Queries */
@media screen and (max-width: 65.375em) {
.cbp_tmtimeline > li .cbp_tmtime span:last-child {
font-size: 1.5em;
}
}
@media screen and (max-width: 47.2em) {
.cbp_tmtimeline:before {
display: none;
}
.cbp_tmtimeline > li .cbp_tmtime {
width: 100%;
position: relative;
padding: 0 0 20px 0;
}
.cbp_tmtimeline > li .cbp_tmtime span {
text-align: left;
}
.cbp_tmtimeline > li .cbp_tmlabel {
margin: 0 0 30px 0;
padding: 1em;
font-weight: 400;
font-size: 95%;
}
.cbp_tmtimeline > li .cbp_tmlabel:after {
right: auto;
left: 20px;
border-right-color: transparent;
border-bottom-color: #e4f0ff;
top: -20px;
}
.cbp_tmtimeline > li:nth-child(odd) .cbp_tmlabel:after {
border-right-color: transparent;
border-bottom-color: #F6F6F6;
}
.cbp_tmtimeline > li .cbp_tmicon {
position: relative;
float: right;
left: auto;
margin: -55px 5px 0 0px;
}
}
</style>
<style> .cbp_tmtimeline { margin: 30px 0 0 0; padding: 0; list-style: none; position: relative; } /* The line */ .cbp_tmtimeline:before { content: ''; position: absolute; top: 0; bottom: 0; width: 10px; background: #f4f5f9; left: 20%; margin-left: -6px; } /* The date/time */ .cbp_tmtimeline > li .cbp_tmtime { display: block; width: 30%; padding-right: 100px; position: absolute; color: #AAA; } .cbp_tmtimeline > li .cbp_tmtime span { display: block; text-align: right; } .cbp_tmtimeline > li .cbp_tmtime span:first-child { font-size: 0.9em; color: #bdd0db; } .cbp_tmtimeline > li .cbp_tmtime span:last-child { font-size: 2.9em; color: #e4f0ff; } .cbp_tmtimeline > li:nth-child(odd) .cbp_tmtime span:last-child { color: #F6F6F6; } /* Right content */ .cbp_tmtimeline > li .cbp_tmlabel { margin: -30px 0 15px 25%; background: #e4f0ff; color: black; padding: 0.8em; font-size: 1.2em; font-weight: 300; line-height: 1.4; position: relative; border-radius: 5px; } .cbp_tmtimeline > li:nth-child(odd) .cbp_tmlabel { background: #F6F6F6; } .cbp_tmtimeline > li .cbp_tmlabel h2 { border-bottom: 0px; border-top:1px dashed #FFF; font-size:16px; height: 24px; padding: 5px 3px 12px; margin:0px; } .cbp_tmtimeline > li .cbp_tmlabel h2 > span { font-size: 12px; float: right; text-align: center; line-height: 24px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* The triangle */ .cbp_tmtimeline > li .cbp_tmlabel:after { right: 100%; border: solid transparent; content: " "; height: 0; width: 0; position: absolute; pointer-events: none; border-right-color: #e4f0ff; border-width: 10px; top: 10px; } .cbp_tmtimeline > li:nth-child(odd) .cbp_tmlabel:after { border-right-color: #F6F6F6; } /* The icons */ .cbp_tmtimeline > li .cbp_tmicon { width: 48px; height: 48px; font-family: 'ecoico'; speak: none; font-style: normal; font-weight: normal; font-variant: normal; text-transform: none; font-size: 48px; line-height: 48px; -webkit-font-smoothing: antialiased; position: relative; color: #fff; background: #46a4da; border-radius: 50%; box-shadow: 0 0 0 8px #f4f5f9; text-align: center; left: 20%; top: 0; margin: 0 0 0 -25px; } .cbp_tmtimeline > li .cbp_tmicon >img { border-radius: 50%; position: absolute; top: 0px; left: 0px; } /* Example Media Queries */ @media screen and (max-width: 65.375em) { .cbp_tmtimeline > li .cbp_tmtime span:last-child { font-size: 1.5em; } } @media screen and (max-width: 47.2em) { .cbp_tmtimeline:before { display: none; } .cbp_tmtimeline > li .cbp_tmtime { width: 100%; position: relative; padding: 0 0 20px 0; } .cbp_tmtimeline > li .cbp_tmtime span { text-align: left; } .cbp_tmtimeline > li .cbp_tmlabel { margin: 0 0 30px 0; padding: 1em; font-weight: 400; font-size: 95%; } .cbp_tmtimeline > li .cbp_tmlabel:after { right: auto; left: 20px; border-right-color: transparent; border-bottom-color: #e4f0ff; top: -20px; } .cbp_tmtimeline > li:nth-child(odd) .cbp_tmlabel:after { border-right-color: transparent; border-bottom-color: #F6F6F6; } .cbp_tmtimeline > li .cbp_tmicon { position: relative; float: right; left: auto; margin: -55px 5px 0 0px; } } </style>
<style>
.cbp_tmtimeline {
    margin: 30px 0 0 0;
    padding: 0;
    list-style: none;
    position: relative;
} 
/* The line */
.cbp_tmtimeline:before {
    content: '';
    position: absolute;
    top: 0;
    bottom: 0;
    width: 10px;
    background: #f4f5f9;
    left: 20%;
    margin-left: -6px;
}
/* The date/time */
.cbp_tmtimeline > li .cbp_tmtime {
    display: block;
    width: 30%;
    padding-right: 100px;
    position: absolute;
    color: #AAA;
}
.cbp_tmtimeline > li .cbp_tmtime span {
    display: block;
    text-align: right;
}
.cbp_tmtimeline > li .cbp_tmtime span:first-child {
    font-size: 0.9em;
    color: #bdd0db;
}
.cbp_tmtimeline > li .cbp_tmtime span:last-child {
    font-size: 2.9em;
    color: #e4f0ff;
}
.cbp_tmtimeline > li:nth-child(odd) .cbp_tmtime span:last-child {
    color: #F6F6F6;
}
/* Right content */
.cbp_tmtimeline > li .cbp_tmlabel {
    margin: -30px 0 15px 25%;
    background: #e4f0ff;
    color: black;
    padding: 0.8em;
    font-size: 1.2em;
    font-weight: 300;
    line-height: 1.4;
    position: relative;
    border-radius: 5px;
}
.cbp_tmtimeline > li:nth-child(odd) .cbp_tmlabel {
    background: #F6F6F6;
}
.cbp_tmtimeline > li .cbp_tmlabel h2 { 
    border-bottom: 0px;
    border-top:1px dashed #FFF; 
    font-size:16px; 
    height: 24px; 
    padding: 5px 3px 12px; 
    margin:0px;
}
.cbp_tmtimeline > li .cbp_tmlabel h2 > span { 
    font-size: 12px; 
    float: right; 
    text-align: center; 
    line-height: 24px; 
    overflow: hidden; 
    text-overflow: ellipsis; 
    white-space: nowrap;
}
/* The triangle */
.cbp_tmtimeline > li .cbp_tmlabel:after {
    right: 100%;
    border: solid transparent;
    content: " ";
    height: 0;
    width: 0;
    position: absolute;
    pointer-events: none;
    border-right-color: #e4f0ff;
    border-width: 10px;
    top: 10px;
}
.cbp_tmtimeline > li:nth-child(odd) .cbp_tmlabel:after {
    border-right-color: #F6F6F6;
}
/* The icons */
.cbp_tmtimeline > li .cbp_tmicon {
    width: 48px;
    height: 48px;
    font-family: 'ecoico';
    speak: none;
    font-style: normal;
    font-weight: normal;
    font-variant: normal;
    text-transform: none;
    font-size: 48px;
    line-height: 48px;
    -webkit-font-smoothing: antialiased;
    position: relative;
    color: #fff;
    background: #46a4da;
    border-radius: 50%;
    box-shadow: 0 0 0 8px #f4f5f9;
    text-align: center;
    left: 20%;
    top: 0;
    margin: 0 0 0 -25px;
}
.cbp_tmtimeline > li .cbp_tmicon >img {
    border-radius: 50%; 
    position: absolute; 
    top: 0px; 
    left: 0px;
}
/* Example Media Queries */
@media screen and (max-width: 65.375em) {
    .cbp_tmtimeline > li .cbp_tmtime span:last-child {
        font-size: 1.5em;
    }
}
@media screen and (max-width: 47.2em) {
    .cbp_tmtimeline:before {
        display: none;
    }
    .cbp_tmtimeline > li .cbp_tmtime {
        width: 100%;
        position: relative;
        padding: 0 0 20px 0;
    }
    .cbp_tmtimeline > li .cbp_tmtime span {
        text-align: left;
    }
    .cbp_tmtimeline > li .cbp_tmlabel {
        margin: 0 0 30px 0;
        padding: 1em;
        font-weight: 400;
        font-size: 95%;
    }
    .cbp_tmtimeline > li .cbp_tmlabel:after {
        right: auto;
        left: 20px;
        border-right-color: transparent;
        border-bottom-color: #e4f0ff;
        top: -20px;
    }
    .cbp_tmtimeline > li:nth-child(odd) .cbp_tmlabel:after {
        border-right-color: transparent;
        border-bottom-color: #F6F6F6;
    }
    .cbp_tmtimeline > li .cbp_tmicon {
        position: relative;
        float: right;
        left: auto;
        margin: -55px 5px 0 0px;
    }
}
</style>
  • 为了更好的体现视觉效果,新建页面可以选择隐藏侧边栏。该设置可以通过主题自带的选项或插件实现,同样也可以通过代码实现:
    在上面的样式代码中加入.sidebar {display: none;}即可;
  • 同时,可以屏蔽站点搜索“说说”的内容。编辑主题目录下functions.php文件,加入如下代码:
    注意:此代码为限定搜索内容仅搜索“文章”,会屏蔽除默认“文章”内容外的其他搜索
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
//屏蔽搜索说说
function search_filter_page($query) {
if ($query->is_search) {
$query->set('post_type', 'post');
}
return $query;
}
add_filter('pre_get_posts','search_filter_page');
//屏蔽搜索说说 function search_filter_page($query) { if ($query->is_search) { $query->set('post_type', 'post'); } return $query; } add_filter('pre_get_posts','search_filter_page');
//屏蔽搜索说说
function search_filter_page($query) {
    if ($query->is_search) {
        $query->set('post_type', 'post');
    }
    return $query;
}
add_filter('pre_get_posts','search_filter_page');

至此全部设置完毕(样式预览)

订阅
提醒
10000


0 评论
内嵌讨论
查看全部讨论