在主页和类别页面中限制 woocommerce 产品简短描述

Posted

技术标签:

【中文标题】在主页和类别页面中限制 woocommerce 产品简短描述【英文标题】:limit woocommerce product short description in home page and category page 【发布时间】:2016-07-10 15:52:15 【问题描述】:

通过将以下代码添加到我的子主题functions.php,我在主页和类别页面中包含了产品简短描述

add_action('woocommerce_after_shop_loop_item_title','woocommerce_template_single_excerpt', 5);

现在我想限制主页和类别页面中产品简短描述的字符。

请帮忙??

更多代码和说明: 我的 add_action 被添加到以下文件 woocommerce/includes/wc-template-hooks.php 中,这里是 Product Loop Items。

add_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 );
add_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 );
add_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
add_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );
add_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title', 10 );

add_action( 'woocommerce_before_subcategory', 'woocommerce_template_loop_category_link_open', 10 );
add_action( 'woocommerce_shop_loop_subcategory_title', 'woocommerce_template_loop_category_title', 10 );
add_action( 'woocommerce_after_subcategory', 'woocommerce_template_loop_category_link_close', 10 );

add_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 );
add_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5 );

所有内容都打印在此处:Mytheme/woocommerce/single-product.php,代码为

   <div class="container-inner">
        <?php do_action( 'woocommerce_before_shop_loop_item' ); ?>
        <div class="image-block">       
        <a href="<?php the_permalink(); ?>">        
            <?php
                /**
                 * woocommerce_before_shop_loop_item_title hook
                 *
                 * @hooked woocommerce_show_product_loop_sale_flash - 10
                 * @hooked woocommerce_template_loop_product_thumbnail - 10
                 */
                do_action( 'woocommerce_before_shop_loop_item_title' );
            ?></a>          
            <div class="product-block-hover"></div>

            </div>
<a href="<?php the_permalink(); ?>"><h3 class="product-name"><?php     the_title(); ?></h3></a>
            <?php
                /**
                 * woocommerce_after_shop_loop_item_title hook
                 *
                 * @hooked woocommerce_template_loop_rating - 5
                 * @hooked woocommerce_template_loop_price - 10 
                 */
                 do_action( 'woocommerce_after_shop_loop_item_title' );
            ?>                                      

        <?php do_action( 'woocommerce_after_shop_loop_item' ); ?>
        </div>              

【问题讨论】:

您可以发布更多代码以便我为您提供帮助吗?向我们展示如何打印它们 嗨@Skatox,我添加了更多代码。感谢您的帮助。 嗨@Skatox我已经在我的子主题的functions.php中添加了你提供给我的代码,就在最后一个php结束标记之前,它不起作用。我还尝试用 woocommerce_template_single_excerpt() 替换 woocommerce_short_description,但它也不起作用。请问有什么建议吗? 我没有看到 do_action( 'woocommerce_shop_loop_item_title' );在您的模板文件中 【参考方案1】:

您可以使用woocommerce_short_description 过滤器编辑长度,执行以下操作:

add_filter('woocommerce_short_description','limit_short_descr');

function limit_short_descr($description)
  return ($description > 140) ? substr($description, 0 , 140) : $description;

您还可以在文本后添加&amp;hellip; 以使其看起来更好。

【讨论】:

是的,您的回答帮助我解决了这个问题。非常感谢您的帮助:)【参考方案2】:

感谢 Skatox 的帮助,我终于解决了这个问题。 这是我所做的:

在以下文件(\wp-contents\plugins\woocommerce\templates\single-product\short-description.php)中我添加了以下代码:

<?php
    if ( is_single()):
        echo apply_filters( 'woocommerce_short_description', $post->post_excerpt     );
    else :
        echo substr(apply_filters( 'woocommerce_short_description', $post-    >post_excerpt ),0,140);
    endif;
?> 

有了这个,我可以在我的主页和类别页面中显示我需要的字符,并保持产品页面不变。

PS:如果您遇到同样的问题,最好的方法是创建相同的文件 (short-description.php),编辑代码并将其放入主题中的 woocommerce 文件夹中,以便您进行更改不受 woocommerce 更新的影响。

【讨论】:

【参考方案3】:

而不是直接在插件中编辑文件(这是一个非常糟糕的主意,因为一旦更新插件,您的所有更改都将丢失!)

创建一个函数,然后挂钩到该过滤器...类似这样...

add_filter('woocommerce_short_description', 'reigel_woocommerce_short_description', 10, 1);
function reigel_woocommerce_short_description($post_excerpt)
    if (!is_product()) 
        $pieces = explode(" ", $post_excerpt);
        $post_excerpt = implode(" ", array_splice($pieces, 0, 10));

    
    return $post_excerpt;

将其粘贴到您主题的 functions.php 文件中。

explode 将原始字符串分解为单词数组,array_splice 让您获得这些单词的特定范围,然后 implode 将这些范围重新组合成单​​个字符串。

并且在你想显示产品描述的地方使用这一行 -

<?php echo apply_filters( 'woocommerce_short_description', $post->post_excerpt ); ?>

使用此代码更改主页和类别页面而非产品详细页面上的限制

【讨论】:

【参考方案4】:

我认为这是更好的方法。它将简短描述限制为 85 个字符,使您的存档页面看起来更干净:

function customize_shop_loop_excerpt() 
function woocommerce_shop_loop_excerpt_custom() 
<p>
<?php echo preg_replace('/\s+?(\S+)?$/', '', substr(get_the_excerpt(), 0, 85)) . '...'; ?>
</p>
<?php

remove_action ('product_box_after', 'woocommerce_shop_loop_excerpt', 20);
add_action ('product_box_after', 'woocommerce_shop_loop_excerpt_custom', 20);

add_action ('after_setup_theme', 'customize_shop_loop_excerpt');

【讨论】:

以上是关于在主页和类别页面中限制 woocommerce 产品简短描述的主要内容,如果未能解决你的问题,请参考以下文章

主页上的 WooCommerce 产品类别图像和类别标题

如何禁用/隐藏 woocommerce 类别页面?

woocommerce-如何仅在商店页面上显示子类别?

通过其 slug 获取 WooCommerce 产品类别的 id

隐藏产品价格并禁用 Woocommerce 中特定产品类别的添加到购物车

自定义特定 WooCommerce 产品类别上的“添加到购物车”按钮