最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】WordPress中自定义小工具边栏中分类目录的标题和排序

自定义 crifan 1043浏览 0评论
wordpress中,想要实现:
”公司新闻“里”分类目录“改为”媒体报道“,自上而下的顺序是”新闻媒体-自媒体-其它“
【”公司新闻“里”分类目录“改为”媒体报道“】
即:自定义分类目录的标题
之前思路是:
找到中文翻译的地方
然后去修改中文翻译:
/wp-content/languages/zh_CN.po
#: wp-includes/category-template.php:519
#: wp-includes/theme-compat/sidebar.php:97
#: wp-includes/widgets/class-wp-widget-categories.php:30
#: wp-includes/widgets/class-wp-widget-categories.php:47
msgid "Categories"
msgstr "分类目录"
结果放到wordpress中,重启服务器后,还是没解决。
后来想起来了:
貌似wordpress真正调用的是mo文件,所以需要去用此处的po文件:
zh_CN.po
去找工具生成对应的mo文件:
wp-content/languages/zh_CN.mo
才可以的。
而正打算去弄呢,无意间发现:
直接在后台的小工具的分类目录的标题部分设置一下:
即可达到我们要的效果:
而不用去改po和mo文件了。
【自上而下的顺序是”新闻媒体-自媒体-其它“】
即:自定义边栏的小工具中的分类目录的排序
对现有的小工具widget=边栏sidebar中的分类目录category:
的显示效果:
想要:
自定义分类目录的顺序
期间,通过自定义HTML:
<div id="categories-2"><h4 class="boc_heading bgr_dotted"><span>媒体报道</span></h4>        <ul class="side_bar_menu">
    <li class="cat-item cat-item-52"><a href="http://www.xxx.com/category/news_media/"><span>新闻媒体</span></a>
</li>
    <li class="cat-item cat-item-54"><a href="http://www.xxx.com/category/we_media/"><span>自媒体</span></a>
</li>
    <li class="cat-item cat-item-55"><a href="http://www.xxx.com/category/_other/">        <span>其他</span></a>
</li>
        </ul>
</div>
加到小工具中的自定义HTML中,实现了类似效果:
但是不行,此处是要求是分类,而不是文字+链接。
所以还是要想办法实现分类的我们要的顺序:
而去手动改前面三个英文的目录category的名字(和别名)改为我们要的:
  • 分类名:其他
    • 别名:other
  • 分类名:新闻媒体
    • 别名:news_media
  • 分类名:自媒体
    • 别名:we_media
结果显示出来的顺序却是:
  • 其他
  • 新闻媒体
  • 自媒体
然后通过尝试发现:
这里的排序,是我们无法手动自定义的
而是通过分类名字去排序的
  • 其他-》拼音是qi ta
  • 新闻媒体-〉拼音是xinwen meit
  • 自媒体-》拼音zimeiti
-〉三个首字母排序是:q -》x -〉z
-》所以显示出来的是:其他 -〉 新闻媒体-》自媒体
而如果把分类名改为:
  • 1 新闻媒体
  • 2 自媒体
  • 3 其他
虽然可以达到要的顺序,但是很明显多了个数字,不好
所以只能想办法去自定义分类目录的顺序
wordpress 分类目录 排序
wordpress category list orderby
WordPress学习第七天——分类排序的解决方案(category order)_雅痞
“第二种方法是修改wp-includes文件夹下:category-template.php页面中wp_list_categories函数里的这一句:’orderby’ => ‘id’, ‘order’ => ‘ASC’,把name改成id,这样就可以按照id值排序了,起码找到了一个靠谱的规则。”
-》所以:
去找找category-template.php,尤其是wp_list_categories
但是不想改为id-》因为此处如果顺序不对,就要:删除旧的分类,按照要的顺序,重新创建对应分类,再修改帖子去设置对应分类,很麻烦。
最好能用别名alias=slug最好
Category Order and Taxonomy Terms Order — WordPress Plugins
上面帖子说插件都过期失效了,所以不去看了。
How to create a custom sort for WordPress categories – WordPress Development Stack Exchange
说是可以用:
“orderby (string) Sort categories alphabetically or by unique category ID. The default is sort by Category ID. Valid values:
– id
– name – default
– slug
– count
– term_group
order (string) Sort order for categories (either ascending or descending). The default is ascending. Valid values:
– asc – default
– desc”
貌似可以用slug
WordPress – Category list according to date (newest at the top) – Stack Overflow
最后找到官网的介绍:
wp_list_categories() | Function | WordPress Developer Resources
“* ‘order’
(string) Which direction to order categories. Accepts ‘ASC’ or ‘DESC’. Default ‘ASC’.
* ‘orderby’
(string) The column to use for ordering categories. Default ‘name’.”
也没说其他可能的选项,是否有slug。估计算是有吧。
然后先去修改了:
wp-includes/category-template.php
从:
function wp_list_categories( $args = '' ) {
  $defaults = array(
    ...
    'orderby' => 'name'
改为:
function wp_list_categories( $args = '' ) {
  $defaults = array(
    ...
    'orderby' => 'slug',
结果放到wordpress网站上,重启后,还是没起效果。
后来是自己想到的:
貌似此处改动的wp_list_categories中,改动的是:
  $defaults = array(
中的:
    ‘orderby’ => ‘slug’,
应该是:wp_list_categories的默认参数
-》别人调用wp_list_categories时,如果没有传orderby参数时,才会用这个default的slug
所以要去找找哪里去调用了:
wp_list_categories
然后找到:
wp-includes/widgets/class-wp-widget-categories.php
看代码,找到调用wp_list_categories传递参数的是:
    $cat_args = array(
      'orderby' => 'name',
      'show_count' => $c,
      'hierarchical' => $h,
    );
所以去改为slug:
    $cat_args = array(
      'orderby' => 'slug',
如此,才能确保:
对于此处的post页面的右边栏小工具widget的中的分类目录的话:
首先是:
wp-includes/widgets/class-wp-widget-categories.php
中的:
  public function widget( $args, $instance ) {
...
    $cat_args = array(
      'orderby' => 'slug',
      'show_count' => $c,
      'hierarchical' => $h,
    );
...
    wp_list_categories( apply_filters( 'widget_categories_args', $cat_args, $instance ) );
把orderby=slug参数传递给了wp_list_categories
然后wp_list_categories中才能按照slug去排序。
然后再去wordpress后台的修改这3个分类目录的slug别名,加上统一的前缀和想要的顺序对应的数字:
  • 分类名:新闻媒体
    • 别名:seq1_news_media
  • 分类名:自媒体
    • 别名:seq2_we_media
  • 分类名:其他
    • 别名:seq3_other
如此,slug的顺序则可实现自己定义的排序:
seq1_news_media 》 seq2_we_media 〉 seq3_other
了,然后页面上,最后才终于实现所要的效果了:
通过指定slug别名的方式去实现自定义3个分类的顺序了:
【总结】
此处为了实现自定义,post等侧边栏的widget中的,分类目录的顺序的话:
思路是:通过指定分类目录的排序依据orderby,从默认的name名字,改为别的好控制的字段,比如id(新建分类时自增),slug(可以方便指定别名,加上前缀带数字)
此处选择通过slug别名方式去控制顺序
办法:
修改:
wp-includes/widgets/class-wp-widget-categories.php
中(默认的orderby用的是name=分类的名字):
  public function widget( $args, $instance ) {
...
    $cat_args = array(
      'orderby' => 'name',
      'show_count' => $c,
      'hierarchical' => $h,
    );
...
    wp_list_categories( apply_filters( 'widget_categories_args', $cat_args, $instance ) );
改为(orderby用的是slug=分类的别名):
  public function widget( $args, $instance ) {
...
    $cat_args = array(
      'orderby' => 'slug',
      'show_count' => $c,
      'hierarchical' => $h,
    );
...
    wp_list_categories( apply_filters( 'widget_categories_args', $cat_args, $instance ) );
然后再去wordpress后台:
文章-》分类目录-〉修改对应的分类的别名为自己要的值,比如:
  • 分类名:新闻媒体
    • 别名:seq1_news_media
  • 分类名:自媒体
    • 别名:seq2_we_media
  • 分类名:其他
    • 别名:seq3_other
而其中别名的排序是ASC增序的:
seq1_news_media -> seq2_we_media -> seq3_other
从而实现了自定义出来的顺序:
新闻媒体 -》 自媒体 -〉 其他
而此处的category的orderby(和sort)的其他可能的值:
参考:
WordPress: Change Category Order At Main Navigation | PropellerMind
有:
orderby
(string) Sort categories alphabetically, by unique Category ID, or by the count of posts in that Category. The default is sort by category name. Valid values:
• ID
• name 
– Default
• slug
• count
• term_group
order
(string) Sort order for categories (either ascending or descending). The default is ascending. Valid values:
• ASC – Default
• DESC

转载请注明:在路上 » 【已解决】WordPress中自定义小工具边栏中分类目录的标题和排序

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
87 queries in 0.178 seconds, using 22.04MB memory