Очередной сборник различных наработок для плагина Woocommerce.
Изменить вывод заголовка товара
Выведем вместо заголовка краткий заголовок, созданный в виде дополнительного поля.
Создание поля
// Поле Краткое название
add_action( 'woocommerce_product_options_general_product_data', 'shorttitle_custom_general_fields' );
add_action( 'woocommerce_process_product_meta', 'shorttitle_custom_general_fields_save' );
function shorttitle_custom_general_fields() {
global $woocommerce, $post;
echo '<div class="options_group">';
woocommerce_wp_text_input(
array(
'id' => 'shorttitle_field',
'label' => __( 'Краткое название', 'woocommerce' ),
//'desc_tip' => 'true',
//'description' => __( 'Краткое название', 'woocommerce' ),
'type' => 'html'
)
);
echo '</div>';
}
function shorttitle_custom_general_fields_save( $post_id ){
// Text Field
$woocommerce_text_field = $_POST['shorttitle_field'];
if( !empty( $woocommerce_text_field ) )
update_post_meta( $post_id, 'shorttitle_field', esc_attr( $woocommerce_text_field ) );
}
Выводы в каталоге и карточке товара. Если поле краткий заголовок пустое, то будет выводится стандартный заголовок.
// Изменить вывод заголовка товара (в каталоге)
remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title' );
add_action( 'woocommerce_shop_loop_item_title', 'custom_woocommerce_template_loop_product_title', 99 );
function custom_woocommerce_template_loop_product_title() {
global $post;
$product = wc_get_product( $post->ID );
$title = get_post_meta( $post->ID, 'shorttitle_field', true );
if( $title ) {
echo '<h2 class="woocommerce-loop-product__title">' . esc_html( $title ) . '</h2>';
} else {
echo '<h2 class="woocommerce-loop-product__title">' . esc_html( $product->get_title() ) . '</h2>';
}
}
// Изменить вывод заголовка товара (в карточке товара)
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_title', 5 );
add_action( 'woocommerce_single_product_summary', 'custom_woocommerce_template_single_product_title', 5 );
add_action( 'woocommerce_mobile_title_product', 'custom_woocommerce_template_single_product_title', 5 );
function custom_woocommerce_template_single_product_title() {
global $post;
$product = wc_get_product( $post->ID );
$title = get_post_meta( $post->ID, 'shorttitle_field', true );
if( $title ) {
echo '<h1 class="product_title entry-title">' . esc_html( $title ) . '</h1>';
} else {
echo '<h1 class="product_title entry-title">' . esc_html( $product->get_title() ) . '</h1>';
}
}
К сожалению нельзя переопределить вывод заголовка глобально во всех шаблонах (корзина, заказ и т.д.).
В корзине показывать цену со скидкой
По умолчанию в корзине показывается только финальная цена со скидкой. Чтобы показать старую зачеркнутую цену используем функцию:
add_filter( 'woocommerce_cart_item_price', 'bbloomer_change_cart_table_price_display', 30, 3 );
function bbloomer_change_cart_table_price_display( $price, $values, $cart_item_key ) {
$slashed_price = $values['data']->get_price_html();
$is_on_sale = $values['data']->is_on_sale();
if ( $is_on_sale ) {
$price = $slashed_price;
}
return $price;
}
Распространяется и на мини-корзину.
[site-socialshare]
Бля, сегодня такую тёлку пёр!