By烟花易冷

WordPress获取某个分类文章并实现翻页(完全模拟分类页面)
2017-07-15

似乎很久没带来WordPress方面的技术文章了,今天接了个小单,要给分类页面category.php额外增加字段,并且每个分类不同,这个问题被我通过新建页面模拟分类页面,并以此作为某个分类字段的载体成功实现。要模拟分类页面,则针对某个分类文章列表的获取以及其分类是重头戏,那么现在我以实践来谈谈WordPress获取某个分类文章并实现翻页的实现全思路,刚刚出炉,热乎的很~

我想大家都明白,WordPress单独获取某个分类的文章列表十分容易,一个 query_posts() 就可以实现文章循环的调用。分页功能在普通文章列表也很容易实现,通过写一个分页的功能函数解析 $query_string 即可,并且如果二次开发的话不少主题会带有一个比较完善的翻页函数了,直接调用即可。但是在通过 query_posts() 获取到某个分类的文章列表之后,翻页功能却基本上报废了。因为此时的 $query_string 不是正常的分类页面(category.php)的$query_string。这里相信大家也能猜到,实现分类的方法是手动拼接一个 $query_string,是的找准WordPress的生成规律,正确拼接,这就解决了50%的问题,剩下的50%自然就是怎么正常显示第二页、第三页等分页的文章列表了。

由于我要做的是模拟分类页面,并且有字段,因此我复制了一份category.php,作为了单页的模板。在这个模板页中由于我要获取后台添加的字段,自然是先进行一次文章的循环,将字段内容保存在变量中,其中 cathing 变量保存了我需要调用分类的的别名(slug name)

接下来便是分类列表的调用,也是query_posts()的重头戏。由于需要考虑到翻页的问题,这里必须先获取到后台预设好的每页阅读条数,以及当前页面是第几页。我原本打算直接通过GET的方式获取网址后的数值,结果一搜索发现了WordPress自带了相关函数可以直接获取:get_query_var(‘paged’),如果获取到的值为空的话,则是第一页。另外,我在后台字段中是输入了目标分类的别名,还需要通过 get_category_by_slug() 函数获取到相关分类揪出相应ID,整体代码如下:

    // 提醒一下这段代码是放在分类循环之前哦
    $limit=get_option('posts_per_page');
    $paged=(get_query_var('paged'))?get_query_var('paged'):1;
    query_posts('cat='.get_category_by_slug($cathing)->term_id.'&showposts='.$limit .'&paged=' .$paged);
    $wp_query->is_archive=true;
    $wp_query->is_home=false;

最后到翻页按钮的调用。正如上文所提及,把 $query_string 直接打印出来显示的是“页面”的相关信息,而不是我们需要去模拟的目标分类的相关分页信息,那么我们需要对它进行重新的拼接。通过把 category.php 页面的 $query_string 也打印出来对比发现,它是 paged=页码&category_name=别名 的形式,上文在做文章循环的过程中我们也已经实现了当前页码的获取,以及目标分类的别名是通过我后台直接输入预设的,这里直接拼接一气呵成。(注意我图片中使用了 $page_querys 变量)


最后请各位大伙儿不要吐槽为啥我的字段命名是这么奇奇怪怪的拼音了(很明显后台不是我用,而是别人),逃..