zblog调用相同分类的上一篇下一篇文章代码

zblog文章内容页的上一篇、下一篇文章是根据文章的发布时间调用的,为了提高页面内容的关联性,以及zblog seo优化的考虑,通常会选择调用相同分类里的上一篇下一篇文章,遗憾的是zblog没有提供对应的标签代码,需要另外编写代码实现。

下面代码是提取zblog插件TcClassPost,该插件实现的功能便是调用相同分类里的上一篇、下一篇文章。

把代码放在主题的include.php文件:

function qiteen_Post_Prev(&$getthis) {
    global $zbp;
    $prev=$getthis;
    $articles = $zbp->GetPostList(
        array('*'),
        array(array('=', 'log_Type', 0), array('=', 'log_CateID', $prev->Category->ID),array('=', 'log_Status', 0), array('<', 'log_PostTime', $prev->PostTime)),
        array('log_PostTime' => 'DESC'),
        array(1),
        null
    );
    if (count($articles) == 1) {
        return $articles[0];
    } else {
        return null;
    }
}
 
function qiteen_Post_Next(&$getthis) {
    global $zbp;
    $prev=$getthis;
    $articles = $zbp->GetPostList(
        array('*'),
        array(array('=', 'log_Type', 0), array('=', 'log_CateID', $prev->Category->ID),array('=', 'log_Status', 0), array('>', 'log_PostTime', $prev->PostTime)),
        array('log_PostTime' => 'ASC'),
        array(1),
        null
    );
    if (count($articles) == 1) {
        return $articles[0];
    } else {
        return null;
    }
}

在include.php文件中找到ActivePlugin_开头的函数,在该函数中添加以下代码:

Add_Filter_Plugin('Filter_Plugin_Post_Prev', 'qiteen_Post_Prev');
Add_Filter_Plugin('Filter_Plugin_Post_Next', 'qiteen_Post_Next');

如果主题原来没有调用上一篇、下一篇文章的代码,还需要在post-single.php(如果没有这个文件,可以尝试添加在single.php)文件添加代码:

{if $article.Prev}
<p>上一篇:<a href="{$article.Prev.Url}" title="{$article.Prev.Title}">{$article.Prev.Title}</a></p>
{/if}
{if $article.Next}
<p>下一篇: <a href="{$article.Next.Url}" title="{$article.Next.Title}">{$article.Next.Title}</a></p>
{/if}

保存即可。