Добавьте префикс / суффикс к названию продукта Woocommerce везде, включая корзину и электронную почту - PullRequest
1 голос
/ 20 марта 2019

Я использую Woocommerce, и я интегрировал некоторые настраиваемые поля, чтобы пользователь мог указать новые значения, которые я позже добавлю к названию продукта.

Я использую update_post_meta / get_post_meta для сохранения новая информация.Эта часть отлично работает.

Затем я использовал фильтр woocommerce_product_title, чтобы обновить заголовок.Этот фильтр работает нормально, когда используется $product->get_title(), но ничего не будет делать при использовании $product->get_name(), что не является проблемой, поскольку в некоторых местах я не хочу добавлять новую информацию.

Я также использовал фильтр the_title для страницы продукта.

В основном мой код выглядит следующим образом: return_custom() будет функцией, которая будет создавать новую информацию на основе идентификатора продукта.

function update_title($title, $id = null ) {

    $prod=get_post($id);

    if (empty($prod->ID) || strcmp($prod->post_type,'product')!=0 ) {
        return $title;
    }

    return $title.return_custom($id);
}

function update_product_title($title, $product) {

    $id = $product->get_id();

    return $title.return_custom($id);
}

add_filter( 'woocommerce_product_title', 'update_product_title', 9999, 2);

add_filter( 'the_title', 'update_title', 10, 2 );

Проблема возникает при добавлениитовар в корзину.Используемое имя является именем по умолчанию, поэтому моего приведенного ниже кода недостаточно для обновления названия продукта, используемого в корзине.То же самое для уведомлений.Я предполагаю, что это логично, так как электронное письмо будет использовать информацию корзины.

Я почти уверен, что все происходит внутри add_to_cart(), но я не могу найти какой-либо фильтр /крючок, связанный с названием товара.

Как убедиться, что имя, использованное в корзине, подходит?Какой фильтр / ловушку я должен рассмотреть в дополнение к тем, которые я уже использую, чтобы добавить свою новую информацию к названию продукта в корзине?

Я хочу убедиться, что новый заголовок будет виден во времявесь процесс покупки.От страницы товара до уведомления по почте.

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Следующее позволит вам настроить название продукта в корзине, оформлении заказа, заказах и уведомлениях по электронной почте, просто с помощью одной подключенной функции:

// Just used for testing
function return_custom( $id ) {
    return ' - (' . $id . ')';
}

// Customizing cart item name in cart, checkout, orders and email notifications
add_action( 'woocommerce_before_calculate_totals', 'set_custom_cart_item_name', 10, 1 );
function set_custom_cart_item_name( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // Required since Woocommerce version 3.2 for cart items properties changes
    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // Loop through cart items
    foreach ( $cart->get_cart() as $cart_item ) {
        // Get the product name and the product ID
        $product_name = $cart_item['data']->get_name();
        $product_id   = $cart_item['data']->get_id();

        // Set the new product name
        $cart_item['data']->set_name( $product_name . return_custom($product_id) );
    }
}

Код поступает в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

0 голосов
/ 20 марта 2019

Попробуйте использовать woocommerce_cart_item_name фильтр.

[woocommerce_cart] шорткод использует шаблон cart/cart.php, а код, отображающий заголовок:

if ( ! $product_permalink ) {
    echo wp_kses_post( apply_filters( 'woocommerce_cart_item_name', $_product->get_name(), $cart_item, $cart_item_key ) . ' ' );
} else {
    echo wp_kses_post( apply_filters( 'woocommerce_cart_item_name', sprintf( '<a href="%s">%s</a>', esc_url( $product_permalink ), $_product->get_name() ), $cart_item, $cart_item_key ) );
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...