如何在WordPress产品页添加同层级分类的上下页链接?
实现WordPress产品页面同层级分类的上下页链接
嘿,这个需求在电商站里挺常见的——用户肯定不想点上一页跳到完全不相关分类的产品里对吧?我给你分享一个靠谱的实现方案,分步骤来,小白也能搞定:
核心思路
我们要借助WordPress内置的get_adjacent_post()函数,但得做定制化处理:确保跳转只局限在当前产品所属的同一层级分类(比如某个子分类)内,完全不涉及父分类或其他无关分类的产品。
步骤1:添加自定义函数到主题
首先,把下面的代码放到你的子主题functions.php文件里(千万别直接改父主题,不然主题更新后代码就没了):
function custom_product_prev_next_links() { global $post; // 只在产品详情页执行这段代码 if ( ! is_singular( 'product' ) ) { return; } // 获取当前产品的所有产品分类 $product_cats = wp_get_post_terms( $post->ID, 'product_cat', array( 'orderby' => 'depth', 'order' => 'DESC' ) ); // 如果产品没分类,直接返回不显示链接 if ( empty( $product_cats ) ) { return; } // 自动选中层级最深的分类(比如产品同时属于父分类和子分类,优先用子分类,确保跳转范围是同一层级) $target_cat = $product_cats[0]; // 处理上一页链接 $prev_product = get_adjacent_post( true, '', true, 'product_cat' ); if ( $prev_product ) { // 额外验证:确保上一个产品确实属于目标分类 $prev_cats_ids = wp_get_post_terms( $prev_product->ID, 'product_cat', array( 'fields' => 'ids' ) ); if ( in_array( $target_cat->term_id, $prev_cats_ids ) ) { echo '<div class="product-nav prev-nav"><a href="' . get_permalink( $prev_product ) . '">← 上一个产品</a></div>'; } } // 处理下一页链接 $next_product = get_adjacent_post( true, '', false, 'product_cat' ); if ( $next_product ) { // 额外验证:确保下一个产品确实属于目标分类 $next_cats_ids = wp_get_post_terms( $next_product->ID, 'product_cat', array( 'fields' => 'ids' ) ); if ( in_array( $target_cat->term_id, $next_cats_ids ) ) { echo '<div class="product-nav next-nav"><a href="' . get_permalink( $next_product ) . '">下一个产品 →</a></div>'; } } } // 把链接挂载到产品详情页的底部位置 add_action( 'woocommerce_after_single_product', 'custom_product_prev_next_links', 20 );
代码小说明:
- 先判断当前页面是产品详情页,避免代码在其他页面无效执行。
- 自动筛选出层级最深的分类,确保跳转范围是用户期望的“同一层级”(比如子分类)。
- 用
get_adjacent_post()找同分类的相邻产品,再加一层验证,彻底杜绝跨分类跳转的可能。 - 通过WooCommerce的钩子,把链接精准放到产品页面底部。
步骤2:(可选)修改跳转排序规则
默认情况下,上下页是按产品发布日期排序的。如果你想按后台设置的产品菜单顺序来跳转,把这段代码也加到functions.php里:
function custom_product_nav_sort_order( $orderby, $post ) { if ( 'product' === $post->post_type ) { // 优先按菜单顺序排序,菜单顺序相同的话再按发布日期 return 'menu_order ASC, post_date DESC'; } return $orderby; } add_filter( 'get_next_post_sort', 'custom_product_nav_sort_order', 10, 2 ); add_filter( 'get_previous_post_sort', 'custom_product_nav_sort_order', 10, 2 );
步骤3:美化链接样式
最后给链接加一点CSS,让它看起来不那么生硬。把这段代码放到子主题的style.css里,或者后台“外观→自定义→额外CSS”:
.product-nav { display: inline-block; margin: 15px 10px; padding: 10px 20px; background-color: #f5f5f5; border-radius: 4px; transition: background-color 0.3s ease; } .product-nav a { text-decoration: none; color: #333; font-weight: 500; } .product-nav:hover { background-color: #e0e0e0; } .prev-nav { float: left; } .next-nav { float: right; } /* 清除浮动,避免影响页面下方的内容 */ .single-product .woocommerce-after-single-product { overflow: hidden; }
测试验证
做完上面的步骤后,去产品页面试试:
- 同一子分类下的产品,能正常显示上下页链接并跳转。
- 跨分类的产品,绝对不会出现在跳转列表里。
- 如果某个分类下只有一个产品,上下页链接会自动隐藏。
内容的提问来源于stack exchange,提问作者shivani joshi
相关产品推荐
相关产品推荐

