Поддержка WooCommerce Как вставить ИНН фирмы в email-уведомление

  • Добрый день!
    Не могу вставить ИНН организации в email-уведомление о новом заказе.
    ИНН вводится на странице оформления заказа и хранится в таблицах wp_postmeta и wp_usermeta. При попытке вывести из первой таблицы выводится, почему-то, ID поста (заказа). При попытке вывести из второй таблицы не выводится ничего.

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

    Использую следующий код:

    <?
    
    function inn_to_mail(){
    	global $wpdb;
    	
    	// Пытаемся получить ИНН из wp_usermeta
    	$current_user = wp_get_current_user();
    	$getinn = get_user_meta($current_user->ID, 'inn', true);
    	
    	// Пытаемся получить ИНН из wp_postmeta
    	$post_id = get_the_ID();
    	$getinn2 = get_post_meta( $post_id, 'inn', true );
    
    	echo '<span style="color: #fff;">ИНН организации: ' . $getinn . ' - ' . $getinn2 . '</span> ';
    	
    }
    
    // Вставляем ИНН в подвал email-уведомления
    add_action( 'woocommerce_email_footer', 'inn_to_mail' );
    
    ?>

    Чтобы ИНН записывался в базу программист, который создавал сайт, писал плагин. Код такой:

    <?
    function wc_plug_shipping_fields( $fields ) {
    
        unset($fields["shipping_first_name"]);
        unset($fields["shipping_last_name"]);
        //$fields["shipping_last_name"]["required"] = false;
        //$fields["shipping_first_name"]["required"] = false;
        $fields['shipping_company']["required"] = true;
        //var_dump($fields['shipping_company']);
        $fields['inn']["required"] = true;
        $fields['inn']['label'] = 'ИНН';
        $user = get_currentuserinfo();
        if ($user){
            $legal_addr = get_user_meta($user->id, 'shipping_company', true);
            if ($legal_addr){
               $fields['shipping_company'] = array(
                    'label' => 'Юридический адрес',
                    'placeholder' => 'Юридический адрес',
                    'required' => true,
                    'class' => array('form-row-wide'),
                    'clear' => true,
                    'type'  => 'textarea'
                );
               //unset($fields["shipping_company"]);
               unset($fields["shipping_country"]);
               unset($fields["shipping_address_1"]);
               unset($fields["shipping_address_2"]);
               unset($fields["shipping_city"]);
               unset($fields["shipping_state"]);
               unset($fields["shipping_postcode"]);
               //unset($fields["old_legal_address"]);
               //unset($fields[""]);
               //unset($fields[""]);
            }
            $inn = get_user_meta($user->id, 'inn', true);
            if ($inn){
                $fields['inn']['value'] = $inn;
            }
    
        }
        //var_dump($fields);
        return $fields;
    }
    
    add_filter( 'woocommerce_shipping_fields', 'wc_plug_shipping_fields' );
    
    add_action( 'woocommerce_checkout_update_order_meta', 'another_save_custom_shipping_fields' , 10, 1);
    function another_save_custom_shipping_fields ( $order_id ) {
        $current_user = wp_get_current_user();
        if ( isset( $_POST ['shipping_company'] ) &&  '' != $_POST ['shipping_company'] ) {
            update_post_meta( $order_id, '_shipping_company',  sanitize_text_field( $_POST ['shipping_company'] ) );
            update_user_meta( $current_user->ID, 'shipping_company', $order_id );
        }
        if ( isset( $_POST ['old_legal_address'] ) &&  '' != $_POST ['old_legal_address'] ) {
            update_post_meta( $order_id, '_old_legal_address',  sanitize_text_field( $_POST ['old_legal_address'] ) );
            update_user_meta( $current_user->ID, 'old_legal_address', $order_id );
        }
        if ( isset( $_POST ['inn'] ) &&  '' != $_POST ['inn'] ) {
            update_post_meta( $order_id, 'inn',  sanitize_text_field( $_POST ['inn'] ) );
            update_user_meta( $current_user->ID, 'inn', $order_id );
        }
    }
    
    add_filter( 'woocommerce_order_details_after_order_table', 'add_delivery_date_to_order_received_page', 10 , 1 );
    function add_delivery_date_to_order_received_page ( $order ) {
        if( version_compare( get_option( 'woocommerce_version' ), '3.0.0', ">=" ) ) {            
            $order_id = $order->get_id();
        } else {
            $order_id = $order->id;
        }
        $old_legal_address = get_post_meta( $order_id, '_old_legal_address', true );
        
        if ( '' != $old_legal_address ) {
            echo '<strong>' . 'Юридический адрес' . ':</strong> ' . $old_legal_address . '
    ';
        }
    
        $shipping_company = get_post_meta( $order_id, '_shipping_company', true );
        if ( '' != $shipping_company ) {
            echo '<strong>' . 'Юридический адрес' . ':</strong> ' . $shipping_company . '
    ';
    
        }
        $inn = get_post_meta( $order_id, 'inn', true );
        if ( '' != $shipping_company ) {
            echo '<strong>' . 'ИНН' . ':</strong> ' . $inn . '
    ';
    
        }
    
    }
    
    function custom_field_function_name($order){
        //var_dump($order);
        echo "<strong>Юридический адрес:</strong>
    " . get_post_meta($order->ID, '_shipping_company', true) . "
    ";
        echo "<strong>ИНН:</strong>
    " . get_post_meta($order->ID, 'inn', true) . "
    ";
    }
    add_action( 'woocommerce_admin_order_data_after_shipping_address', 'custom_field_function_name', 20, 1 );
    
    ?>

    В общем не могу разобраться как из всего этого вытащить ИНН и отправить в сообщении о новом заказе.

    Спасибо.

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Не совсем понятно, а зачем вы записываете ИНН сразу в 2х таблицах:

    • wp_postmeta
    • wp_usermeta

    Чтобы надежнее было? Тогда почему только 2 раза? Хорошо бы раскидать еще по таблицам для верности.
    Но — это так, просто наводит на мысли о разном.
    И как результат недолгих размышлений, возникает следующий вопрос: «А что случилось с тем программистом, который это все замутил? Почему теперь вы вместо него?»

    Вы можете использовать один из хуков в шаблонах электронной почты. Либо woocommerce_email_order_details, либо woocommerce_email_customer_details: https://docs.woocommerce.com/document/template-structure/

    Лучше конечно обратиться к создателю сайта, поскольку у вас самописная тема и не актуальные (устаревшие) версии WP и WC.

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Тема «Как вставить ИНН фирмы в email-уведомление» закрыта для новых ответов.