get_meta в процессе извлечения переменных (корзина, оформление заказа, электронные письма) - PullRequest
0 голосов
/ 10 июня 2019

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

Но для переменного продукта: метаинформация отображается на странице продукта, а затем исчезает для корзины, оформления заказа и электронной почты. Если кто-то в порядке, чтобы проверить мой код, я буду более чем благодарен :).

Большое спасибо.

/**
 Display info
 **/

// Admin: Add custom field
add_action('woocommerce_product_options_sku', 'vp_add_pp_info' );
function vp_add_pp_info(){

    woocommerce_wp_text_input( array(
        'id'          => '_venue',
        'label'       => __('Venue', 'woocommerce' ),
        'placeholder' => __('Enter Venue here', 'woocommerce' ),
        'desc_tip'    => true,
        'description' => __('This field is for the Venue of the product.', 'woocommerce' ),
    ) );
    woocommerce_wp_text_input( array(
        'id'          => '_date',
        'label'       => __('Date', 'woocommerce' ),
        'placeholder' => __('Enter Date here', 'woocommerce' ),
        'desc_tip'    => true,
        'description' => __('This field is for the Date of the product.', 'woocommerce' ),
    ) );
    woocommerce_wp_text_input( array(
        'id'          => '_time',
        'label'       => __('Time', 'woocommerce' ),
        'placeholder' => __('Enter Time here', 'woocommerce' ),
        'desc_tip'    => true,
        'description' => __('This field is for the time of the product.', 'woocommerce' ),
    ) );
}

// Admin: Save custom field value for simple product inventory options
add_action('woocommerce_admin_process_product_object', 'vp_product_save_pp_info', 10, 1 );
function vp_product_save_pp_info( $product ){
    if( isset($_POST['_venue']) )
        $product->update_meta_data( '_venue', sanitize_text_field($_POST['_venue']) );

    if( isset($_POST['_date']) )
        $product->update_meta_data( '_date', sanitize_text_field($_POST['_date']) );

    if( isset($_POST['_time']) )
        $product->update_meta_data( '_time', sanitize_text_field($_POST['_time']) );
}


// Frontend: Display PP Info on product
add_action( 'woocommerce_single_product_summary', 'vp_product_display_pp_info' );
function vp_product_display_pp_info() {
    global $product;

    if( $value = $product->get_meta( '_venue' ) ) {
        echo '<div class="product-pp-info"><i>' . __("Venue", "woocommerce") .
        ': </i>'.esc_html( $value ).'</div>';
    }
    if( $value = $product->get_meta( '_date' ) ) {
        echo '<div class="product-pp-info"><i>' . __("Date", "woocommerce") .
        ': </i>'.esc_html( $value ).'</div>';
    }
    if( $value = $product->get_meta( '_time' ) ) {
        echo '<div class="product-pp-info"><i>' . __("Time", "woocommerce") .
        ': </i>'.esc_html( $value ).'</div>';
    }
}

// Frontend: Display PP Info on product variations
add_filter( 'woocommerce_available_variation', 'vp_variation_display_pp_info', 10, 3 );
function vp_variation_display_pp_info( $data, $product, $variation ) {

    if( $value = $variation->get_meta( '_venue' ) ) {
        $data['price_html'] .= '<p class="vp-ccode"><small><strong>' . __("Venue", "woocommerce") .
        ': </strong>'.esc_html( $value ).'</small></p>';
    }

        if( $value = $variation->get_meta( '_date' ) ) {
        $data['price_html'] .= '<p class="vp-ccode"><small><strong>' . __("Date", "woocommerce") .
        ': </strong>'.esc_html( $value ).'</small></p>';
    }

        if( $value = $variation->get_meta( '_time' ) ) {
        $data['price_html'] .= '<p class="vp-ccode"><small><strong>' . __("Time", "woocommerce") .
        ': </strong>'.esc_html( $value ).'</small></p>';
    }

    return $data;
}



// Frontend: Display info on cart
add_filter( 'woocommerce_cart_item_name', 'vp_cart_display_pp_info', 10, 3 );
function vp_cart_display_pp_info( $item_name, $cart_item, $cart_item_key ) {
    if( ! is_cart() )
        return $item_name;

    if( $value = $cart_item['data']->get_meta('_venue') ) {
        $item_name .= '<p class="product-pp-info"><i>' . __("Venue", "woocommerce") .
            ':</i> ' . esc_html( $value ) . '</p>';
    }

    if( $value = $cart_item['data']->get_meta('_date') ) {
        $item_name .= '<p class="product-pp-info"><i>' . __("Date", "woocommerce") .
            ':</i> ' . esc_html( $value ) . '</p>';
    }

     if( $value = $cart_item['data']->get_meta('_time') ) {
        $item_name .= '<p class="product-pp-info"><i>' . __("Time", "woocommerce") .
            ':</i> ' . esc_html( $value ) . '</p>';
    }
    return $item_name;
}



// Frontend: Display info on checkout
add_filter( 'woocommerce_checkout_cart_item_quantity', 'vp_checkout_display_pp_info', 10, 3 );
function vp_checkout_display_pp_info( $item_qty, $cart_item, $cart_item_key ) {
    if( $value = $cart_item['data']->get_meta('_venue') ) {
        $item_qty .= '<p class="product-pp-info"><i>' . __("Venue", "woocommerce") .
            ':</i> ' . esc_html( $value ) . '</p>';
    }

    if( $value = $cart_item['data']->get_meta('_date') ) {
        $item_qty .= '<p class="product-pp-info"><i>' . __("Date", "woocommerce") .
            ':</i> ' . esc_html( $value ) . '</p>';
    }

    if( $value = $cart_item['data']->get_meta('_time') ) {
        $item_qty .= '<p class="product-pp-info"><i>' . __("Time", "woocommerce") .
            ':</i> ' . esc_html( $value ) . '</p>';
    }
    return $item_qty;
}





// Save PP Info to order items (and display it on admin orders)
add_filter( 'woocommerce_checkout_create_order_line_item', 'vp_order_item_save_pp_info', 10, 4 );
function vp_order_item_save_pp_info( $item, $cart_item_key, $cart_item, $order ) {
    if( $value = $cart_item['data']->get_meta('_venue') ) {
        $item->update_meta_data( '_venue', esc_attr( $value ) );
    }

     if( $value = $cart_item['data']->get_meta('_date') ) {
        $item->update_meta_data( '_date', esc_attr( $value ) );
    }

      if( $value = $cart_item['data']->get_meta('_time') ) {
        $item->update_meta_data( '_time', esc_attr( $value ) );
    }

    return $item_qty;
}

// Frontend & emails: Display PP Info on orders
add_action( 'woocommerce_order_item_meta_start', 'vp_order_item_display_pp_info', 10, 4 );
function vp_order_item_display_pp_info( $item_id, $item, $order, $plain_text ) {
    // Not on admin
    //if( is_admin() ) return;

    if( $value = $item->get_meta('_venue') ) {
        $value = '<i>' . __("Venue", "woocommerce") . ':</i> ' . esc_attr( $value );

        // On orders
        if( is_wc_endpoint_url() )
            echo '<div class="pp-info"><p>' . $value . '</p></div>';
        // On Emails
        else
            echo '<div style="font-size:11px;padding-top:6px">' . $value . '</div>';
    }

      if( $value = $item->get_meta('_date') ) {
        $value = '<i>' . __("Date", "woocommerce") . ':</i> ' . esc_attr( $value );

        // On orders
        if( is_wc_endpoint_url() )
            echo '<div class="pp-info"><p>' . $value . '</p></div>';
        // On Emails
        else
            echo '<div style="font-size:11px;padding-top:6px">' . $value . '</div>';
    }

      if( $value = $item->get_meta('_time') ) {
        $value = '<i>' . __("Time", "woocommerce") . ':</i> ' . esc_attr( $value );

        // On orders
        if( is_wc_endpoint_url() )
            echo '<div class="pp-info"><p>' . $value . '</p></div>';
        // On Emails
        else
            echo '<div style="font-size:11px;padding-top:6px">' . $value . '</div>';
    }


}

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

Большое спасибо, что нашли время и за ваш ответ. Я новичок в PHP, поэтому я пытаюсь понять решение. Может быть, вам будет легче со всем кодом. Спасибо, Мари

/**
 Display info
 **/

// Admin: Add custom field
add_action('woocommerce_product_options_sku', 'vp_add_pp_info' );
function vp_add_pp_info(){

    woocommerce_wp_text_input( array(
        'id'          => '_venue',
        'label'       => __('Venue', 'woocommerce' ),
        'placeholder' => __('Enter Venue here', 'woocommerce' ),
        'desc_tip'    => true,
        'description' => __('This field is for the Venue of the product.', 'woocommerce' ),
    ) );
    woocommerce_wp_text_input( array(
        'id'          => '_date',
        'label'       => __('Date', 'woocommerce' ),
        'placeholder' => __('Enter Date here', 'woocommerce' ),
        'desc_tip'    => true,
        'description' => __('This field is for the Date of the product.', 'woocommerce' ),
    ) );
    woocommerce_wp_text_input( array(
        'id'          => '_time',
        'label'       => __('Time', 'woocommerce' ),
        'placeholder' => __('Enter Time here', 'woocommerce' ),
        'desc_tip'    => true,
        'description' => __('This field is for the time of the product.', 'woocommerce' ),
    ) );
}

// Admin: Save custom field value for simple product inventory options
add_action('woocommerce_admin_process_product_object', 'vp_product_save_pp_info', 10, 1 );
function vp_product_save_pp_info( $product ){
    if( isset($_POST['_venue']) )
        $product->update_meta_data( '_venue', sanitize_text_field($_POST['_venue']) );

    if( isset($_POST['_date']) )
        $product->update_meta_data( '_date', sanitize_text_field($_POST['_date']) );

    if( isset($_POST['_time']) )
        $product->update_meta_data( '_time', sanitize_text_field($_POST['_time']) );
}


// Frontend: Display PP Info on product
add_action( 'woocommerce_single_product_summary', 'vp_product_display_pp_info' );
function vp_product_display_pp_info() {
    global $product;

    if( $value = $product->get_meta( '_venue' ) ) {
        echo '<div class="product-pp-info"><i>' . __("Venue", "woocommerce") .
        ': </i>'.esc_html( $value ).'</div>';
    }
    if( $value = $product->get_meta( '_date' ) ) {
        echo '<div class="product-pp-info"><i>' . __("Date", "woocommerce") .
        ': </i>'.esc_html( $value ).'</div>';
    }
    if( $value = $product->get_meta( '_time' ) ) {
        echo '<div class="product-pp-info"><i>' . __("Time", "woocommerce") .
        ': </i>'.esc_html( $value ).'</div>';
    }
}

// Frontend: Display PP Info on product variations
add_filter( 'woocommerce_available_variation', 'vp_variation_display_pp_info', 10, 3 );
function vp_variation_display_pp_info( $data, $product, $variation ) {

    if( $value = $variation->get_meta( '_venue' ) ) {
        $data['price_html'] .= '<p class="vp-ccode"><small><strong>' . __("Venue", "woocommerce") .
        ': </strong>'.esc_html( $value ).'</small></p>';
    }

        if( $value = $variation->get_meta( '_date' ) ) {
        $data['price_html'] .= '<p class="vp-ccode"><small><strong>' . __("Date", "woocommerce") .
        ': </strong>'.esc_html( $value ).'</small></p>';
    }

        if( $value = $variation->get_meta( '_time' ) ) {
        $data['price_html'] .= '<p class="vp-ccode"><small><strong>' . __("Time", "woocommerce") .
        ': </strong>'.esc_html( $value ).'</small></p>';
    }

    return $data;
}



// Frontend: Display info on cart
add_filter( 'woocommerce_cart_item_name', 'vp_cart_display_pp_info', 10, 3 );
function vp_cart_display_pp_info( $item_name, $cart_item, $cart_item_key ) {
    if( ! is_cart() )
        return $item_name;

    if( $value = $cart_item['data']->get_meta('_venue') ) {
        $item_name .= '<p class="product-pp-info"><i>' . __("Venue", "woocommerce") .
            ':</i> ' . esc_html( $value ) . '</p>';
    }

    if( $value = $cart_item['data']->get_meta('_date') ) {
        $item_name .= '<p class="product-pp-info"><i>' . __("Date", "woocommerce") .
            ':</i> ' . esc_html( $value ) . '</p>';
    }

     if( $value = $cart_item['data']->get_meta('_time') ) {
        $item_name .= '<p class="product-pp-info"><i>' . __("Time", "woocommerce") .
            ':</i> ' . esc_html( $value ) . '</p>';
    }
    return $item_name;
}



// Frontend: Display info on checkout
add_filter( 'woocommerce_checkout_cart_item_quantity', 'vp_checkout_display_pp_info', 10, 3 );
function vp_checkout_display_pp_info( $item_qty, $cart_item, $cart_item_key ) {
    if( $value = $cart_item['data']->get_meta('_venue') ) {
        $item_qty .= '<p class="product-pp-info"><i>' . __("Venue", "woocommerce") .
            ':</i> ' . esc_html( $value ) . '</p>';
    }

    if( $value = $cart_item['data']->get_meta('_date') ) {
        $item_qty .= '<p class="product-pp-info"><i>' . __("Date", "woocommerce") .
            ':</i> ' . esc_html( $value ) . '</p>';
    }

    if( $value = $cart_item['data']->get_meta('_time') ) {
        $item_qty .= '<p class="product-pp-info"><i>' . __("Time", "woocommerce") .
            ':</i> ' . esc_html( $value ) . '</p>';
    }
    return $item_qty;
}





// Save PP Info to order items (and display it on admin orders)
add_filter( 'woocommerce_checkout_create_order_line_item', 'vp_order_item_save_pp_info', 10, 4 );
function vp_order_item_save_pp_info( $item, $cart_item_key, $cart_item, $order ) {
    if( $value = $cart_item['data']->get_meta('_venue') ) {
        $item->update_meta_data( '_venue', esc_attr( $value ) );
    }

     if( $value = $cart_item['data']->get_meta('_date') ) {
        $item->update_meta_data( '_date', esc_attr( $value ) );
    }

      if( $value = $cart_item['data']->get_meta('_time') ) {
        $item->update_meta_data( '_time', esc_attr( $value ) );
    }

    return $item_qty;
}

// Frontend & emails: Display PP Info on orders
add_action( 'woocommerce_order_item_meta_start', 'vp_order_item_display_pp_info', 10, 4 );
function vp_order_item_display_pp_info( $item_id, $item, $order, $plain_text ) {
    // Not on admin
    //if( is_admin() ) return;

    if( $value = $item->get_meta('_venue') ) {
        $value = '<i>' . __("Venue", "woocommerce") . ':</i> ' . esc_attr( $value );

        // On orders
        if( is_wc_endpoint_url() )
            echo '<div class="pp-info"><p>' . $value . '</p></div>';
        // On Emails
        else
            echo '<div style="font-size:11px;padding-top:6px">' . $value . '</div>';
    }

      if( $value = $item->get_meta('_date') ) {
        $value = '<i>' . __("Date", "woocommerce") . ':</i> ' . esc_attr( $value );

        // On orders
        if( is_wc_endpoint_url() )
            echo '<div class="pp-info"><p>' . $value . '</p></div>';
        // On Emails
        else
            echo '<div style="font-size:11px;padding-top:6px">' . $value . '</div>';
    }

      if( $value = $item->get_meta('_time') ) {
        $value = '<i>' . __("Time", "woocommerce") . ':</i> ' . esc_attr( $value );

        // On orders
        if( is_wc_endpoint_url() )
            echo '<div class="pp-info"><p>' . $value . '</p></div>';
        // On Emails
        else
            echo '<div style="font-size:11px;padding-top:6px">' . $value . '</div>';
    }


}
0 голосов
/ 10 июня 2019

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

1) для добавления мета

add_filter( 'woocommerce_add_cart_item_data', array($this,'addProductToCart' ), 10, 2 );

2) установка мета в сеансе

add_filter( 'woocommerce_get_cart_item_from_session', array($this, 'get_cart_item_from_session' ), 10, 2);

3) получение и отображение мета на странице оформления заказа и корзины

 add_filter( 'woocommerce_get_item_data', array($this,'getting_car_item_data' ), 10, 2);

Если у вас все еще есть проблемы, пожалуйста, прокомментируйте

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