Можно ли легко изменить столбец «клиент» на «название компании» в отчетах?

#woocommerce

Вопрос:

Есть ли крючок, который я могу использовать, чтобы изменить заголовок столбца «Клиент» на название компании?

Экран администратора Woocommerce

Комментарии:

1. «Администратор WooCommerce» основан на JS, поэтому, к сожалению, в нем нет PHP-крючков. Вам понадобятся навыки JS, чтобы переопределить этот столбец, и даже в этом случае вам потребуется еще больше для извлечения значений. В WooCommerce возможно все, но в этом случае я бы нашел альтернативу, т. е. создавал свои собственные отчеты на PHP

2. Спасибо за ответ, бб, к сожалению. Я только что просмотрел ядро и да, я вижу файл js… ух

Ответ №1:

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

Приведенный ниже фрагмент кода добавит наблюдателя мутаций, проверяющего, изменяется ли таблица на странице аналитики заказов (поскольку эти заголовки добавляются динамически с помощью JavaScript). Каждый раз, когда регистрируется изменение (мутация), он проверяет заголовок «Клиент». Если он будет найден, он будет изменен на «Название компании». Возможно, не самое элегантное решение, но оно действительно работает.

 add_action( 'admin_footer', 'woocommerce_analytics_change_customer_header' );
function woocommerce_analytics_change_customer_header() {
    if ( isset( $_GET['page'] ) amp;amp; isset( $_GET['path'] ) ) {
        if ( $_GET['page'] == 'wc-admin' amp;amp; $_GET['path'] == '/analytics/orders' ) {
            ?>
            <script>
                jQuery( function( $ ) {

                    // select the target node
                    var target = document.querySelector('#woocommerce-layout__primary');

                    // create an observer instance
                    var observer = new MutationObserver(function(mutations) {
                        mutations.forEach(function(mutation) {
                            if ( $('th.woocommerce-table__header').length ) {
                                $('th.woocommerce-table__header').each(function(){
                                    let $label = $(this).find('span');
                                    if ( $label.text() == 'Customer' ) {
                                        $label.text('Company name');
                                    }
                                });
                            }
                        });
                    });

                    // configuration of the observer:
                    var config = { attributes: true, childList: true, characterData: true, subtree: true };

                    // pass in the target node, as well as the observer options
                    observer.observe(target, config);

                });
            </script>
            <?php
        }
    }
}
 

Этот фрагмент кода следует добавить в functions.php вашей дочерней темы или с помощью плагина, такого как фрагменты кода.

Комментарии:

1. Спасибо TB, это действительно изменило заголовок, спасибо, что нашли время, чтобы ускорить это! Извините, возможно, мне следовало упомянуть, что поля ниже «название компании» также должны содержать данные «название компании».