Отображать billing_company при выполнении поиска клиента на странице «Добавить новый заказ клиента» - PullRequest
0 голосов
/ 04 февраля 2019

Могу ли я узнать, как отображать $ user-> billing_company после возврата результатов при выполнении поиска клиента в форме заказа на продажу?В идеале я думаю об использовании ловушек фильтра / действия вместо изменения основного файла в class-wc-meta-box-order-data.php

До сих пор я мог искать клиента, основываясь на $ user->billing_company, результаты будут отображаться на странице заказа на редактирование, но не на странице добавления нового заказа ($ user-> billing_company не отображается в реальном времени после ввода и нажатия на искомый результат)

Изображения:https://i.stack.imgur.com/o4yfW.png

https://i.stack.imgur.com/pjfEM.png

Модифицированный код:

esc_html__( '[%4$s] %1$s (#%2$s – %3$s)', 'woocommerce' )
        $user->display_name,
        absint( $user->ID ),
        $user->user_email, $user->billing_company

Оригинальный код из class-wc-meta-box-order-data.php:

<?php
$user_string = '';
$user_id     = '';
if ( $order->get_user_id() ) {
    $user_id = absint( $order->get_user_id() );
    $user    = get_user_by( 'id', $user_id );
    /* translators: 1: user display name 2: user ID 3: user email */
    $user_string = sprintf(
        esc_html__( '%1$s (#%2$s &ndash; %3$s)', 'woocommerce' ),
        $user->display_name,
        absint( $user->ID ),
        $user->user_email
    );
}
?>
<select class="wc-customer-search" id="customer_user" name="customer_user" data-placeholder="<?php esc_attr_e( 'Guest', 'woocommerce' ); ?>" data-allow_clear="true">
    <option value="<?php echo esc_attr( $user_id ); ?>" selected="selected"><?php echo htmlspecialchars( $user_string ); ?></option>
</select>
<!--/email_off-->
</p>
<?php do_action( 'woocommerce_admin_order_data_after_order_details', $order ); ?>

Заранее спасибо!

1 Ответ

0 голосов
/ 04 февраля 2019

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

add_filter(  'gettext',  'change_admin_single_order_heading3', 10, 3 );
add_filter(  'ngettext',  'change_admin_single_order_heading3', 10, 3 );
function change_admin_single_order_heading3( $translated, $text, $domain  ) {
    global $pagenow, $theorder;

    if ( is_admin() && $pagenow === 'post.php' && isset($_GET['post']) && get_post_type($_GET['post']) === 'shop_order' )
    {
        if( $text === '%1$s (#%2$s &ndash; %3$s)' && $domain === 'woocommerce' && $theorder->get_user_id() > 0 ){
            // Get user meta billing company
            if( $billing_company = get_user_meta( $theorder->get_user_id(), 'billing_company', true ) ) {
                $translated = esc_html__( '['.$billing_company.'] %1$s (#%2$s &ndash; %3$s)', $domain );
            }
        }
    }
    return $translated;
}

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

enter image description here

Но вы не сможете отобразить его при выполнении поиска, так как выбор поиска выполняется с помощью ajax…

...