在主页和类别页面中限制 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;
您还可以在文本后添加&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 产品简短描述的主要内容,如果未能解决你的问题,请参考以下文章
通过其 slug 获取 WooCommerce 产品类别的 id