wordpress-woo产品循环

输出ul开始标签

//关键代码
function woocommerce_product_loop_start( $echo = true ) {
    ...
    wc_get_template( 'loop/loop-start.php' );

其中loop-start.php功能:输出ul标签、生成相关class类

<ul class="products columns-<?php echo esc_attr( wc_get_loop_prop( 'columns' ) ); ?>">

其中wc_get_loop_prop( ‘columns’ )函数,返回每行列数,即每行展示多少个产品。从而让 CSS 样式可以依据这个类来调整产品的布局。列数修改可以代码编写,也可以在管理后台配置。

输出略缩图

woo已经预设三种图像裁剪尺寸,分别为:’woocommerce_thumbnail、woocommerce_gallery_thumbnail、woocommerce_single。相关代码如下:

public function adjust_intermediate_image_sizes( $sizes ) {
  // Prevent a filter loop.
  $unfiltered_sizes = array( 'woocommerce_thumbnail', 'woocommerce_gallery_thumbnail', 'woocommerce_single' );
  static $in_filter = false;
    if ( $in_filter ) {
	return $unfiltered_sizes;
	}
    $in_filter      = true;
    $filtered_sizes = apply_filters( 'woocommerce_regenerate_images_intermediate_image_sizes', $unfiltered_sizes );
    $in_filter      = false;
    return $filtered_sizes;
}
// class-woocommerce.php
public function add_image_sizes() {
  $thumbnail         = wc_get_image_size( 'thumbnail' );
  $single            = wc_get_image_size( 'single' );
  $gallery_thumbnail = wc_get_image_size( 'gallery_thumbnail' );

  add_image_size( 'woocommerce_thumbnail', $thumbnail['width'], $thumbnail['height'], $thumbnail['crop'] );
  add_image_size( 'woocommerce_single', $single['width'], $single['height'], $single['crop'] );
  add_image_size( 'woocommerce_gallery_thumbnail', $gallery_thumbnail['width'], $gallery_thumbnail['height'],    $gallery_thumbnail['crop'] );
}
function wc_get_image_size( $image_size ) {
	$cache_key = 'size-' . ( is_array( $image_size ) ? implode( '-', $image_size ) : $image_size );
	...
		$image_size = str_replace( 'woocommerce_', '', $image_size );

		if ( 'single' === $image_size ) {
			$size['width']  = absint( wc_get_theme_support( 'single_image_width', get_option( 'woocommerce_single_image_width', 600 ) ) );
			$size['height'] = '';
			$size['crop']   = 0;

		} elseif ( 'gallery_thumbnail' === $image_size ) {
			$size['width']  = absint( wc_get_theme_support( 'gallery_thumbnail_image_width', 100 ) );
			$size['height'] = $size['width'];
			$size['crop']   = 1;

		} elseif ( 'thumbnail' === $image_size ) {
			$size['width'] = absint( wc_get_theme_support( 'thumbnail_image_width', get_option( 'woocommerce_thumbnail_image_width', 300 ) ) );
			$cropping      = get_option( 'woocommerce_thumbnail_cropping', '1:1' );

以图片裁剪尺寸’thumbnail’为例,其中代码

$size['width'] = absint( wc_get_theme_support( 'thumbnail_image_width', get_option( 'woocommerce_thumbnail_image_width', 300 ) ) );

主要功能是获取缩略图的宽度。图像尺寸设置有两种方式:1:通过 add_theme_support 设置的图像尺寸。2:数据库中存储的图像尺寸宽度。若主题有通过add_theme_support 设置的图像尺寸:则用wc_get_theme_support函数获取(优先级高)。若没有设置,则去数据库提取宽度值:get_option( ‘woocommerce_thumbnail_image_width’, 300 )

SELECT * FROM xs_options WHERE option_name = 'woocommerce_thumbnail_image_width';

数据库中存储的图像尺寸宽度更新:

// 更新选项值
update_option( 'woocommerce_thumbnail_image_width', 400 );

add_theme_support 图像尺寸设置:

// wp-content\themes\xshen\inc\woocommerce.php
function xshen_woocommerce_setup() {
    add_theme_support(
        'woocommerce',
        array(
            'thumbnail_image_width' => 150,
            // 其他设置...
        )
    );
}
add_action( 'after_setup_theme', 'xshen_woocommerce_setup' );