php - 在 WooCommerce 循环中的子类别和产品之间添加分隔线

标签 php wordpress loops woocommerce custom-taxonomy

我需要在主类别 WooCommerce 中的产品和子类别之间添加分隔线或 Elementor 模板。

我将其分开,但无法添加分隔线

我将此代码与 Elementor 模板短代码一起使用,但它被空格分隔

add_action( 'init', 'move_subcat_lis' );
function move_subcat_lis() {
    // Remove the subcat <li>s from the old location.
    remove_filter( 'woocommerce_product_loop_start', 'woocommerce_maybe_show_product_subcategories' );

    add_action( 'woocommerce_before_shop_loop', 'msc_product_loop_start', 40 );
    add_action( 'woocommerce_before_shop_loop', 'msc_maybe_show_product_subcategories', 50 );
    add_action( 'woocommerce_before_shop_loop', 'msc_product_loop_end', 60 );
}

/**
* Conditonally start the product loop with a <ul> contaner if subcats exist.
*/
function msc_product_loop_start() {
    $subcategories = woocommerce_maybe_show_product_subcategories();

    if ( $subcategories ) {
        woocommerce_product_loop_start();
    }
}

/**
* Print the subcat <li>s in our new location.
*/
function msc_maybe_show_product_subcategories() {
    echo woocommerce_maybe_show_product_subcategories();
}

/**
* Conditonally end the product loop with a </ul> if subcats exist.
*/
function msc_product_loop_end() {
    get_header();

    echo do_shortcode('[elementor-template id="2808"]'); 

    $subcategories = woocommerce_maybe_show_product_subcategories();

    if ( $subcategories ) {
        woocommerce_product_loop_end();
    }
}

最佳答案

基于this Wordpress StackExchange answer ,您可以使用以下简化版本:

// Remove displayed subcategories from product loop
remove_filter( 'woocommerce_product_loop_start', 'woocommerce_maybe_show_product_subcategories' );

// Display subcategories before the product loop
add_action( 'woocommerce_before_shop_loop', 'display_product_subcategories', 50 );

function display_product_subcategories() {
    $categories = woocommerce_maybe_show_product_subcategories();

    if ( $categories ) {
        printf('<ul class="products categories columns-%d">%s</ul>',
            esc_attr( wc_get_loop_prop( 'columns' ) ), $categories );

        echo '<hr>'; // <== Divider 
    }
}

代码位于子主题的functions.php 文件中(或插件中)。经过测试并有效。

现在您可以替换 <hr>分隔符:

echo '<hr>'; // <== Divider 

使用您的短代码,例如:

echo do_shortcode('[elementor-template id="2808"]'); 

关于php - 在 WooCommerce 循环中的子类别和产品之间添加分隔线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77197621/

相关文章:

php - 用破折号替换 %20

php - 用于在 linux/php 中备份数据库的 cron 作业

php - Woocommerce - 防止将两个不同类别的商品添加到购物车

php - 选择查询返回错误

php - 遍历多个数组值以填充另一个数组中的桶的算法

php - MySQL 和 PHP 中的计时问题

php - 删除插件的过滤器

php - 理解条件求解优先级中的赋值

JavaScript:将更改参数传递给回调

java - 如何打印出字符串的所有子串?