让代码更简单

当前位置:代码狗 > WordPress > WP建站 > 正文

WordPress给标签页分页教程

重要:本文最后更新于2020-12-31 21:19:51,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

当你的网站文章数量较多,标签高达几千上万的时候,访问标签页是非常缓慢的,为了解决这个问题,给所有标签进行分页是一个明智的做法。当然如果你比较懒,也可以像狗哥一样利用腾讯云CDN的缓存功能直接缓存标签页,这样即使上万的标签也会被CDN变成一个静态文件,服务器大量查询问题也就解决了,这种方式只适合标签不经常修改的站长,下面来看看DUX的标签分页怎么实现的,如果你的DUX没有标签分页功能,那么照抄本文即可实现,DMD主题也可照抄,注意细节。

首先添加一个后台配置项,打开options.php文件,添加如下代码,至于添加到哪里就看你自己怎么方便了。

$options[] = array(
'name' => __('标签分页数量', 'haoui'),
'id' => 'tagspagenumber',
'type' => "text",
'class' => 'mini',
'std' => 40,
'desc' => __('标签页分页显示数量', 'haoui'));

找了下没找到DUX的这个后台配置在哪儿,不知道是不是作者忘记写了,所以上面的代码是我自己写的,你在DUX中是找不到的。

然后修改pages目录下的tags.php文件,看名称就知道这是标签的模板文件。DUX将之修改为

<?php 
/**
* Template name: Tags
* Description: A tags page
*/

get_header();

$pagetags = _hui('tagspagenumber', 40);

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$purl = get_page_link();

if( strstr($purl, '?') ){
$purl .= '?paged=';
}else{
$purl .= '/page/';
}
$tagsoffset = $pagetags*($paged-1);
?>
<div class="container container-tags">
<h1><?php the_title(); ?></h1>
<div class="tagslist">
<ul>
<?php 
$tagslist = get_tags('orderby=count&order=DESC&number='.$pagetags.'&offset='.$tagsoffset);
foreach($tagslist as $tag) {
echo '<li><a class="name" href="'.get_tag_link($tag).'">'. $tag->name .'</a><small>&times;'. $tag->count .'</small>';
$posts = get_posts( "tag_id=". $tag->term_id ."&numberposts=1" );
foreach( $posts as $post ) {
setup_postdata( $post );
echo '<p><a class="tit" href="'.get_permalink().'">'.get_the_title().'</a></p>';
}
echo '</li>';
} 
?>
</ul>
</div>
<?php _tags_paging() ?>
</div>
<?php
get_footer();
//以下内容你可以选择放在functions.php文件中
function _tags_paging() {
global $pagetags;
global $paged;
$max_page = ceil(wp_count_terms('post_tag', array('hide_empty' => true))/$pagetags);
$p = 3;

if ( $max_page == 1 ) return; 
echo '<div class="pagination pagination-multi"><ul>';
if ( empty( $paged ) ) $paged = 1;
if ( $paged > $p + 1 ) _tags_paging_link( 1 );
if ( $paged > $p + 2 ) echo "<li><span>···</span></li>";
for( $i = $paged - $p; $i <= $paged + $p; $i++ ) { 
if ( $i > 0 && $i <= $max_page ) $i == $paged ? print "<li class=\"active\"><span>{$i}</span></li>" : _tags_paging_link( $i );
}
if ( $paged < $max_page - $p - 1 ) echo "<li><span>···</span></li>";
if ( $paged < $max_page - $p ) _tags_paging_link( $max_page );
// echo '<li><span>共 '.$max_page.' 页</span></li>';
echo '</ul></div>';
}

function _tags_paging_link( $i ) {
global $purl;
echo '<li><a title="第'.$i.'页" href="'. $purl.$i .'">'.$i.'</a></li>';
}
?>
?>

DMD将之修改为如下内容

<?php 
/**
* Template name: Tags
* Description: A tags page
*/

get_header();
$pagetags = _hui('tagspagenumber', 40);

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$purl = get_page_link();

if( strstr($purl, '?') ){
$purl .= '?paged=';
}else{
$purl .= '/page/';
}

$tagsoffset = $pagetags*($paged-1);

?>
<style>
.container-tags h1 {
font-size: 22px;
margin: 0;
text-align: center;
margin-bottom: 15px;
}
.tagslist {
overflow: hidden;
}
.tagslist ul {
list-style-type: none;
padding: 0;
margin: 0 -2% 0 0;
}
.tagslist li {
float: left;
width: 23%;
margin-right: 2%;
margin-bottom: 2%;
padding: 15px;
border: 1px solid #eee;
background-color: #fff;
border-radius: 2px;
}
.tagslist li .name {
background-color: #eee;
display: inline-block;
padding: 5px 10px 4px;
font-size: 12px;
color: #666;
}
.tagslist li .name:hover {
background-color: #444;
color: #fff;
}
.tagslist li small {
margin-left: 10px;
color: #bbb;
}
small, .small {
font-size: 85%;
}
.tagslist li p {
margin: 10px 0 0;
font-size: 12px;
height: 17px;
overflow: hidden;
display: block;
line-height: 1.5;
}
.tagslist li .tit {
color: #999;
}
@media (max-width: 1024px){
.tagslist li {
width: 31.3333333%;
}
}
@media (max-width: 768px){
.tagslist li {
width: 48%;
}
}
</style>
<div class="container container-tags">
<h1><?php the_title(); ?></h1>
<div class="tagslist">
<ul>
<?php 
$tagslist = get_tags('orderby=count&order=DESC&number='.$pagetags.'&offset='.$tagsoffset);
foreach($tagslist as $tag) {
echo '<li><a class="name" href="'.get_tag_link($tag).'">'. $tag->name .'</a><small>&times;'. $tag->count .'</small>';

$posts = get_posts( "tag_id=". $tag->term_id ."&numberposts=1" );
foreach( $posts as $post ) {
setup_postdata( $post );
echo '<p><a class="tit" href="'.get_permalink().'">'.get_the_title().'</a></p>';
}

echo '</li>';
} 

?>
</ul>
</div>
<?php _tags_paging(); ?>
</div>

<?php
get_footer();
//以下内容你可以选择放在functions.php文件中
function _tags_paging() {
global $pagetags;
global $paged;
$max_page = ceil(wp_count_terms('post_tag', array('hide_empty' => true))/$pagetags);
$p = 3;

if ( $max_page == 1 ) return; 
echo '<div class="pagination pagination-multi"><ul>';
if ( empty( $paged ) ) $paged = 1;
if ( $paged > $p + 1 ) _tags_paging_link( 1 );
if ( $paged > $p + 2 ) echo "<li><span>···</span></li>";
for( $i = $paged - $p; $i <= $paged + $p; $i++ ) { 
if ( $i > 0 && $i <= $max_page ) $i == $paged ? print "<li class=\"active\"><span>{$i}</span></li>" : _tags_paging_link( $i );
}
if ( $paged < $max_page - $p - 1 ) echo "<li><span>···</span></li>";
if ( $paged < $max_page - $p ) _tags_paging_link( $max_page );
// echo '<li><span>共 '.$max_page.' 页</span></li>';
echo '</ul></div>';
}

function _tags_paging_link( $i ) {
global $purl;
echo '<li><a style="background-color:#ddd" title="第'.$i.'页" href="'. $purl.$i .'">'.$i.'</a></li>';
}
?>

其实两者没多大差别,只是当时在写标签页的时候太懒了,直接将css放在了模板文件中,并且DMD主题的分页导航比DUX的分页导航背景色淡一些,为了避免使用DUX的背景色导致看不见分页按钮,所以我加了一句设置背景色的css,下个版本将统一背景颜色,如果你不想自己改,可以等我过年更新。

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏

评论 1

  1. #1

    啥也不说,谢谢啦,狗哥!

    Moi3周前 (01-01)回复
×

请作者吃根烤肠!

支付宝