我在家庭和类别页面中添加了产品简短说明,将以下代码添加到我的子主题函数中.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>
答案 0 :(得分:0)
您可以使用woocommerce_short_description
过滤器编辑长度,执行以下操作:
add_filter('woocommerce_short_description','limit_short_descr');
function limit_short_descr($description){
return ($description > 140) ? substr($description, 0 , 140) : $description;
}
此外,您可以在文字后添加…
以使其看起来更好。
答案 1 :(得分:0)
谢谢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更新的影响。
答案 2 :(得分:0)
而不是直接在插件中编辑文件(这是一个非常糟糕的主意,因为一旦更新插件并且所有更改都将丢失!)
创建一个函数,然后挂钩到那个过滤器......就像这样......
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 ); ?>
在主页和类别页面<产品详细信息页上使用此代码更改限制。
答案 3 :(得分:0)
我认为这是更好的方法。它会将简短描述限制为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');