常见的WordPress站点文章的排序,通常情况下是按发布时间的升序或降序方式排列,这种排序方式几乎可以满足大多数站点的需求,但是有些特殊的站点可能会有一些特殊的需求:想手动修改文章的排列方式,可以随意更改文章的排列位置。今天chrafz教你怎么使用WordPress的pre_get_posts轻松解决这个问题,跟着chrafz动手改一些代码。
修改方法:
1、打开WordPress当前主题目录,打开functions.php,添加以下PHP代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span class="token comment" spellcheck="true">/** * 名称:WordPress手动修改文章排列顺序 * 作者:chrafz * 博客:https://www.chrafz.com/ */</span> <span class="token function">add_action</span><span class="token punctuation">(</span><span class="token string">'pre_get_posts'</span><span class="token punctuation">,</span> <span class="token string">'chrafz_orderby'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">function</span> <span class="token function">chrafz_orderby</span><span class="token punctuation">(</span> <span class="token variable">$query</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span><span class="token function">is_home</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">||</span> <span class="token function">is_archive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">&&</span> <span class="token variable">$query</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">is_main_query</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$query</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">set</span><span class="token punctuation">(</span> <span class="token string">'meta_key'</span><span class="token punctuation">,</span> <span class="token string">'sort'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$query</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">set</span><span class="token punctuation">(</span> <span class="token string">'orderby'</span><span class="token punctuation">,</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token string">'meta_value_num'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token string">'DESC'</span><span class="token punctuation">,</span> <span class="token string">'date'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token string">'DESC'</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token variable">$query</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
2、给之前发表的所有文章添加自定义字段(或者称作自定义栏目,在文章编辑页底部可以看到),名称为 sort ,值填数字。这样在首页,文章的排列顺序就按照sort字段的值,从大到小排列了。通过修改sort字段的值,可以达到自定义文章排列顺序的目的。
3、需要注意的是,通过以上修改后,你必须给所有文章添加自定义字段sort,否则没有添加sort字段的文章将无法在首页显示。这也许就是手动排序需要付出的代价吧,要不然何谓手动?
注意:以上修改将影响主页、分类页、标签页、日期页和作者页面等。
评论抢沙发