web-dev-qa-db-ja.com

Woocommerceのフックを介してループ商品画像をカスタマイズする

Woocommerceテーマをカスタマイズしています。私はフックアクションwoocommerceを使用してループ製品に固執しました。

サムネイル画像を呼び出してループに含めるために、このフックを呼び出します

<?php do_action('woocommerce_before_shop_loop_item_title'); ?>

そしてサムネイル画像が表示されます。 <img src"" ....の場所はどこですか?そのコードを編集する方法は?

ありがとう

5
Abd Hannan

フック_woocommerce_before_shop_loop_item_title_から画像をロードします この関数コード

_if ( ! function_exists( 'woocommerce_template_loop_product_thumbnail' ) ) {

    /**
     * Get the product thumbnail for the loop.
     */
    function woocommerce_template_loop_product_thumbnail() {
        echo woocommerce_get_product_thumbnail(); // WPCS: XSS ok.
    }
}
_

ご覧のとおり、 woocommerce_get_product_thumbnail() function を使用しています。

_if ( ! function_exists( 'woocommerce_get_product_thumbnail' ) ) {

    /**
     * Get the product thumbnail, or the placeholder if not set.
     *
     * @param string $size (default: 'woocommerce_thumbnail').
     * @param int    $deprecated1 Deprecated since WooCommerce 2.0 (default: 0).
     * @param int    $deprecated2 Deprecated since WooCommerce 2.0 (default: 0).
     * @return string
     */
    function woocommerce_get_product_thumbnail( $size = 'woocommerce_thumbnail', $deprecated1 = 0, $deprecated2 = 0 ) {
        global $product;

        $image_size = apply_filters( 'single_product_archive_thumbnail_size', $size );

        return $product ? $product->get_image( $image_size ) : '';
    }
}
_

これがあなたの質問に答え、あなたの混乱を取り除くことを願っています。


ループ製品イメージのカスタマイズ

これで、次のコマンドを使用して、このデフォルト関数をフックから削除し、独自のカスタム関数を追加できます。

_remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );
add_action( 'woocommerce_before_shop_loop_item_title', 'custom_loop_product_thumbnail', 10 );
function custom_loop_product_thumbnail() {
    global $product;
    $size = 'woocommerce_thumbnail';

    $image_size = apply_filters( 'single_product_archive_thumbnail_size', $size );

    return $product ? $product->get_image( $image_size ) : '';
}
_

コードは、アクティブな子テーマ(またはアクティブなテーマ)のfunction.phpファイルに入ります。テストされ、動作します。

したがって、関数内のコードをカスタマイズする必要があります…

5
LoicTheAztec

LoicTheAztecの答えは非常に良いですが、小さな、しかし重大なエラーが1つ含まれていると思います。標準出力(エコー)フックを削除し、フィルター(結果を返す)ではなくアクションを追加したので、エコーを実行する必要があります。その巧妙な/目に見えないエラーは私の時間を十分に食べました。 :)

// there is
return $product ? $product->get_image( $image_size ) : '';
// should be
echo $product ? $product->get_image( $image_size ) : '';
1