Отображает Woocommerce мои заказы учетной записи вместо панели инструментов - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь сделать так, чтобы url.com/my-account или шорткод [woocommerce_my_account] отображали ордера вместо приборной панели с надписью «Привет, пользователь (не пользователь)?».

Единственное, что у меня есть, после входа в систему - перенаправление на ордера вместо приборной панели, но после перехода на / my-account все еще отображается приборная панель, которая мне не нужна.

Ближайший код, который я нашел, который делает то, что я хочу ...

function woocommerce_orders() {
    $user_id = get_current_user_id();
    if ($user_id == 0) {
         return do_shortcode('[woocommerce_my_account]'); 
    }else{
        ob_start();
        wc_get_template( 'myaccount/my-orders.php', array(
            'current_user'  => get_user_by( 'id', $user_id),
            'order_count'   => $order_count
         ) );
        return ob_get_clean();
    }

}
add_shortcode('woocommerce_orders', 'woocommerce_orders');

Однако, если не было размещено ни одного заказа, оно выходит пустым (не отображает «Еще не был сделан заказ» с кнопкой магазина), а навигационная боковая панель моей учетной записи не отображается. Должен ли я создать собственный шаблон страницы, чтобы добавить его в навигационную боковую панель учетной записи woocommerce?

Редактировать: если я использую orders.php вместо my-orders.php, я получу «Заказ еще не сделан». Но все еще нет боковой панели-навигация

Ответы [ 3 ]

0 голосов
/ 11 апреля 2019

Я использовал код LoicTheAztec и другой дополнительный фрагмент, который удаляет вкладку панели инструментов:

// Remove or rename my account page navigation links (removes downloads and dashboard).
add_filter ( 'woocommerce_account_menu_items', 'my_account_menu_order' );
function my_account_menu_order() {
    $menuOrder = array(
        'orders'             => __( 'Orders', 'woocommerce' ),
        // 'downloads'          => __( 'Download', 'woocommerce' ),
        'edit-address'       => __( 'Addresses', 'woocommerce' ),
        'edit-account'        => __( 'Account details', 'woocommerce' ),
        'customer-logout'    => __( 'Logout', 'woocommerce' ),
        // 'dashboard'          => __( 'Dashboard', 'woocommerce' )
    );
    return $menuOrder;
}

Я также создал фрагмент, в котором вкладка заказов по умолчанию подсвечивается. Это делается путем добавления активного класса, а затем непрозрачности CSS: 1 это подчеркивает. Скрипт будет отображаться только в разделе аккаунта, чтобы избежать раздувания, где он не нужен:

// Make orders link highlighted by default in my account section.
add_action('wp_footer', 'taisho_dashboard_orders_highlight');
function taisho_dashboard_orders_highlight() {

    if (!is_account_page()) return; // Account section only

    global $wp;
    $acc_url = get_permalink( get_option( 'woocommerce_myaccount_page_id' ));
    $my_acc =  rtrim( $acc_url , '/' );
    $my_acc = explode( '/', $my_acc );

    ?>
    <script type="text/javascript">
        var dashboard_active = <?php echo $wp->request === end($my_acc) ?>;
        jQuery(document).ready(function($) {
            $('.woocommerce-MyAccount-navigation-link--orders').toggleClass('is-active', dashboard_active);
        });
    </script>

    <?php   
}
0 голосов
/ 18 июня 2019

Существует гораздо более простой способ: просто перехватите WordPress parse_request, проверьте, подходит ли request для my-account (или какой-либо другой фрагмент страницы вашей учетной записи) и выполните перенаправление:

function vnm_wc_redirect_account_dashboard( $wp ) {

    if ( !is_admin() ) {
        //  Uncomment the following line if you want to see what the current request is
        //die( $wp->request );

        //  The following will only match if it's the root Account page; all other endpoints will be left alone

        if ( $wp->request === 'my-account' ) {
            wp_redirect( site_url( '/my-account/orders/' ) );
            exit;
        }
    }
}

add_action( 'parse_request', 'vnm_wc_redirect_account_dashboard', 10, 1 );
0 голосов
/ 30 августа 2018

Вы можете попробовать следующий код (который не идеален, так как удаляет доступ к панели инструментов):

add_action( 'woocommerce_account_content', 'remove_dashboard_account_default', 5 );
function remove_dashboard_account_default() {
    remove_action( 'woocommerce_account_content', 'woocommerce_account_content', 10 );
    add_action( 'woocommerce_account_content', 'custom_account_orders', 10 );
}


function custom_account_orders( $current_page ) {
    global $wp;

    if ( ! empty( $wp->query_vars ) ) {
        foreach ( $wp->query_vars as $key => $value ) {
            // Ignore pagename param.
            if ( 'pagename' === $key ) {
                continue;
            }

            if ( has_action( 'woocommerce_account_' . $key . '_endpoint' ) ) {
                do_action( 'woocommerce_account_' . $key . '_endpoint', $value );
                return;
            }
        }
    }

    $current_page    = empty( $current_page ) ? 1 : absint( $current_page );
    $customer_orders = wc_get_orders( apply_filters( 'woocommerce_my_account_my_orders_query', array(
        'customer' => get_current_user_id(),
        'page'     => $current_page,
        'paginate' => true,
    ) ) );

    wc_get_template(
        'myaccount/orders.php',
        array(
            'current_page'    => absint( $current_page ),
            'customer_orders' => $customer_orders,
            'has_orders'      => 0 < $customer_orders->total,
        )
    );
}

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

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