アーカイブページにWoocommerce製品属性を表示する
Aug 22 2020
商品の配達時間の属性を設定しました。また、次の関数を使用して、製品アーカイブ、単一の製品ページ、注文、および電子メール通知に表示しています。
add_action( 'woocommerce_single_product_summary', 'product_attribute_delivery', 27 );
function product_attribute_delivery(){
global $product; $taxonomy = 'pa_delivery';
$value = $product->get_attribute( $taxonomy ); if ( $value && $product->is_in_stock() ) { $label = get_taxonomy( $taxonomy )->labels->singular_name; echo '<small>' . $label . ': ' . $value . '</small>'; } } add_action('woocommerce_order_item_meta_end', 'custom_item_meta', 10, 4 ); function custom_item_meta($item_id, $item, $order, $plain_text) { $productId = $item->get_product_id(); $product = wc_get_product($productId); $taxonomy = 'pa_delivery';
$value = $product->get_attribute($taxonomy); if ($value) {
$label = get_taxonomy($taxonomy)->labels->singular_name;
echo '<small>' . $label . ': ' . $value . '</small>';
}
}
add_action( 'woocommerce_after_shop_loop_item', 'product_attribute_delivery_shop', 1 );
function product_attribute_delivery_shop(){
global $product; $taxonomy = 'pa_delivery';
$value = $product->get_attribute( $taxonomy ); if ( $value && $product->is_in_stock() ) { $label = get_taxonomy( $taxonomy )->labels->singular_name; echo '<small>' . $label . ': ' . $value . '</small>';
}
}
2つの質問があります:
- これらの関数を組み合わせてコードを最適化およびクリーンアップする方法はありますか?
- アーカイブページ(単一の商品ページではありません!)の場合、商品の在庫がないときにテキストを変更したいと思います。全く表示されないのではなく、「売り切れ」にしたいと思います。
回答
1 LoicTheAztec Aug 22 2020 at 00:20
StackOverFlowのルールは一度に1つの質問であることに注意してください。次のように、フックされた各関数で呼び出すカスタム関数を使用できます。
// Custom function that handle the code to display a product attribute
function custom_display_attribute( $product, $taxonomy = 'pa_delivery') {
$value = $product->get_attribute( $taxonomy ); if ( ! empty($value) && $product->is_in_stock() ) { $label = wc_attribute_label( $taxonomy ); echo '<small>' . $label . ': ' . $value . '</small>'; } } // On product archive pages add_action( 'woocommerce_after_shop_loop_item', 'product_attribute_delivery_archives', 1 ); function product_attribute_delivery_archives() { global $product;
custom_display_attribute( $product ); // When product is out of stock displays "Sold Out" if ( ! $product->is_in_stock() ) {
echo __("Sold Out", "woocommerce");
}
}
// On product single pages
add_action( 'woocommerce_single_product_summary', 'product_attribute_delivery_single', 27 );
function product_attribute_delivery_single() {
global $product; custom_display_attribute( $product );
}
// On orders and email notifications
add_action('woocommerce_order_item_meta_end', 'custom_item_meta', 10, 4 );
function custom_item_meta( $item_id, $item, $order, $plain_text ) {
custom_display_attribute( wc_get_product( $item->get_product_id() ) );
}
動作するはずです。
商品の在庫がない場合のみアーカイブページに「売り切れ」と表示されます。