博客 / 默认分类

4种方法实现WordPress类目输出并控制排序

在 WordPress 开发中,要在产品列表页的左侧边栏输出指定的分类,并且可以手动控制展示顺序,可以通过以下几种方法实现:

方法一:使用自定义字段 (ACF) 手动控制分类显示顺序

  1. 安装 Advanced Custom Fields (ACF) 插件:如果你还没有安装 ACF 插件,可以先安装并激活该插件。
  2. 创建一个选项页面或自定义字段
    • 在 WordPress 后台的 ACF 插件中,创建一个新的字段组(Field Group)。
    • 选择“选项页面”或“产品页面”作为这个字段组的显示位置。
    • 添加一个“分类”字段,字段类型选择“关系”或“分类”,让用户能够选择想要显示的分类。
    • 如果需要手动排序,选择“可排序”选项,允许用户自定义排序顺序。
  3. 在侧边栏模板中输出分类
    • 在产品列表页面的模板文件中(比如 sidebar-product.php),使用 ACF 的 get_field() 函数来获取手动选择的分类。
    • 根据用户选择的顺序输出分类。
<?php
// 获取自定义字段的分类列表(假设字段名为 'custom_categories')
$custom_categories = get_field('custom_categories', 'option'); // 如果是选项页面字段使用 'option'

if ($custom_categories) :
    echo '<ul class="custom-category-list">';
    foreach ($custom_categories as $category) :
        echo '<li><a href="' . get_category_link($category->term_id) . '">' . esc_html($category->name) . '</a></li>';
    endforeach;
    echo '</ul>';
endif;
?>

方法二:使用 WordPress 的菜单管理器

  1. 创建一个分类菜单
    • 在 WordPress 后台,进入 外观 > 菜单
    • 创建一个新的菜单,将你想要展示的分类添加到菜单中。
    • 将菜单的显示位置设置为左侧边栏(根据你的主题设置,可以通过挂钩或小部件显示菜单)。
  2. 在侧边栏模板中调用菜单
    • 在主题的侧边栏模板文件中,使用 wp_nav_menu() 函数来加载指定的菜单。
    • 使用菜单的 menu_id 参数来确定你创建的菜单。
<?php
wp_nav_menu(array(
    'theme_location' => 'sidebar_menu', // 主题位置可以根据需要设置
    'menu_id' => 'custom_sidebar_menu',
    'container' => 'nav',
    'container_class' => 'sidebar-category-menu'
));
?>

注意:菜单项的顺序可以在 WordPress 菜单管理界面中手动调整,因此这提供了灵活的顺序控制。

方法三:使用自定义代码实现分类输出和排序

  1. 创建自定义分类排序字段
    • 在分类编辑页面上,使用 ACF 插件或 WordPress 自定义字段 API,给每个分类添加一个排序字段,比如 category_order
    • 在字段中填入数字值,越小的数字越靠前。
  2. 在模板中查询并按排序字段输出分类
    • 使用 get_terms() 函数,按照自定义字段 category_order 的值排序获取分类。
<?php
$args = array(
    'taxonomy' => 'product_cat', // 替换为你要查询的分类法
    'meta_key' => 'category_order', // 自定义字段名
    'orderby' => 'meta_value_num', // 根据自定义字段排序
    'order' => 'ASC', // 升序排序
    'hide_empty' => false, // 是否隐藏没有文章的分类
);
$categories = get_terms($args);

if (!empty($categories)) :
    echo '<ul class="custom-category-list">';
    foreach ($categories as $category) :
        echo '<li><a href="' . get_category_link($category->term_id) . '">' . esc_html($category->name) . '</a></li>';
    endforeach;
    echo '</ul>';
endif;
?>

方法四:使用小部件 + 自定义排序插件

  1. 安装自定义排序插件:比如 Category Order and Taxonomy Terms Order 插件。该插件允许你通过拖放的方式调整分类的显示顺序。
  2. 使用 WordPress 小部件
    • 外观 > 小部件 中添加“分类”小部件到侧边栏。
    • 启用你想要展示的分类,并通过插件的排序功能调整顺序。
  3. 在模板中应用排序
    • 该插件会自动应用排序,因此只需要确保分类的小部件或 get_terms() 函数的查询中不包含 orderby 参数,分类会按照插件设置的顺序输出。
<div class="product-cats bg-light  border">
	<h5 class="text-transform py-3 px-4 mb-0 ls-0">Categories</h5>
		<?php 
		$args = array(
			'show_option_all'    => '', //(字符串)是否显示到所有分类的链接,默认为空,不显示
			'orderby'            => 'name', //(字符串)排序依据,可以用分类名称,分类ID,或者分类文章数排序,可用的值有:ID,name(默认),slug,count,term_group
			'order'              => 'ASC', //(字符串)排序方式,正序或倒序,可用的值有:ASC,DESC
			'style'              => 'list', //(字符串)列表或无列表,可用的值有:list(默认),none
			'show_count'         => 0, //(布尔值)是否显示分类里面文章数量的开关,默认为不显示
			'hide_empty'         => 0, //(布尔值)是否显示空分类--没有文章的分类显示出来也是404页面,还不如隐藏了,所以默认为隐藏
			'use_desc_for_title' => 1, //(布尔值)默认以分类描述作为分类链接的title属性,显示出来对SEO优化和用户体验提高是有帮助的,默认为显示
			'child_of'           => 0, //(布尔值)只显示指定分类的自分类,这算是一个小功能,默认为假
			'feed'               => '', //(字符串)是否显示一个分类rss2订阅源的文字,默认为空,看需要
			'feed_type'          => '', // (字符串)订阅源的类型
			'feed_image'         => '', // (字符串)显示一个表示订阅源的小图标。此参数覆盖feed参数的值
			'exclude'            => '1', //(字符串)从结果中排序某些分类,值为以逗号分隔的分类项ID,不能和include同时使用
			'exclude_tree'       => '',  // (字符串)和上面的exclude作用一样,不同的是,这个排除的是有子分类的分类项
			'include'            => '', // (字符串)结果中只包含某些分类项
			'hierarchical'       => 1, // (布尔值)是否分层显示父级分类和子分类
			'title_li'           => __( '' ), //(字符串)分类列表的标题,默认为分类目录,可根据需要设置
			'show_option_none'   => __('No categories') ,//(字符串)没有分类的情况下显示的问题
			'number'             => null, //(整数),
	    'echo'               => 1, // (布尔值)是否显示出来,控制直接显示列表,还是保存在某个变量中
			'depth'              => 0, // (整数) 是否分层显示列表,默认为0,分层显示所有分类和自分类,-1为不分层显示所有分类,1为只显示顶级分类,n为显示n级分类
			'current_category'   => 0, // (字符串)当前分类项,设置某项为当前分类项
			'pad_counts'         => 0, // (布尔值)通过自分类里的项目计算链接或文章数
			'taxonomy'           => 'category', //(字符串)显示某个自定义分类法下面的分类项目
			'walker'             => null //(对象),生成列表所用的类
		); ?>
	<ul class="list-group list-unstyled items-nav sticky-sidebar">
		<?php wp_list_categories( $args); ?>
	</ul>
</div>

总结

以上几种方法中,选择合适的方法取决于具体需求:

  • 如果希望手动控制分类列表并控制展示顺序,推荐使用 方法一(ACF)方法二(菜单)
  • 如果希望自动按顺序排序且灵活,可以使用 方法三(自定义排序字段)
  • 如果不想编写代码,可以使用 方法四(小部件和插件)

评论留言

Your email address will not be published. Required fields are marked *