Stack Overflow 社区您好,
我正在写一个备件网站。某些类别页面具有复杂的绘图,需要像平常一样大显示,以便您可以看到发生了什么。其他我真的可以用根本不显示类别图像的类别页面来显示内容。
我似乎无法改变 archive-product.php 模板,以便它显示某些页面的类别图像,而不是其他页面的类别图像。有人可以帮我吗?
我是否需要创建第二个 archive-product.php 模板,并以某种方式覆盖我不想显示类别图像的少量类别?然后删除类别图像的操作?
我觉得我的思路是对的,但可能是语法让我绊倒了
您不需要为此更改模板。查看 content-product-cat.php 模板,您会注意到操作 woocommerce_before_subcategory_title 它将调用 woocommerce_subcategory_thumbnail 函数。如果我们研究该函数 - https://wp-kama.com/filecode/woocommerce/includes/wc-template-functions.php#L2684-2712你会注意到,如果你不提供图像将加载默认图像
wc_placeholder_img_src()
.
所以需要用
remove_action('woocommerce_before_subcategory_title','woocommerce_subcategory_thumbnail');
去掉原来的函数,提供自己的函数。
我将简单地复制粘贴原始函数并删除 else 部分。您可以根据需要更改功能。
add_action('woocommerce_before_subcategory_title','theme_subcategory_thumbnail',10,1);
function theme_subcategory_thumbnail($category) {
$small_thumbnail_size = apply_filters( 'subcategory_archive_thumbnail_size', 'woocommerce_thumbnail' );
$dimensions = wc_get_image_size( $small_thumbnail_size );
$thumbnail_id = get_term_meta( $category->term_id, 'thumbnail_id', true );
if ( $thumbnail_id ) {
$image = wp_get_attachment_image_src( $thumbnail_id, $small_thumbnail_size );
$image = $image[0];
$image_srcset = function_exists( 'wp_get_attachment_image_srcset' ) ? wp_get_attachment_image_srcset( $thumbnail_id, $small_thumbnail_size ) : false;
$image_sizes = function_exists( 'wp_get_attachment_image_sizes' ) ? wp_get_attachment_image_sizes( $thumbnail_id, $small_thumbnail_size ) : false;
}
//else part is removed
if ( $image ) {
$image = str_replace( ' ', '%20', $image );
// Add responsive image markup if available.
if ( $image_srcset && $image_sizes ) {
echo '<img src="' . esc_url( $image ) . '" alt="' . esc_attr( $category->name ) . '" width="' . esc_attr( $dimensions['width'] ) . '" height="' . esc_attr( $dimensions['height'] ) . '" srcset="' . esc_attr( $image_srcset ) . '" sizes="' . esc_attr( $image_sizes ) . '" />';
} else {
echo '<img src="' . esc_url( $image ) . '" alt="' . esc_attr( $category->name ) . '" width="' . esc_attr( $dimensions['width'] ) . '" height="' . esc_attr( $dimensions['height'] ) . '" />';
}
}
}