WordPress: добавление страницы в сухари Yoast SEO - PullRequest
0 голосов
/ 29 февраля 2020

Я хочу добавить дополнительную страницу к следам крошки моего сайта. Проблема в том, что я использую WooCommerce, и на хлебной крошке не работает прямо на панели управления моей учетной записи. Он всегда показывает следующий след:

На главную> Моя учетная запись

Даже если я на дочерней странице, например "изменить учетную запись". Эти дочерние страницы на самом деле не являются страницами. Это конечные точки WooCommerce на той же странице.

Это должно выглядеть следующим образом:

Главная> Моя учетная запись> Заказы> Идентификатор заказа

Я пытался добавить страницу, но не смог понять это. Чтобы удалить страницу из цепочки, я использую следующий код:

/**
 * Conditionally Override Yoast SEO Breadcrumb Trail
 * http://plugins.svn.wordpress.org/wordpress-seo/trunk/frontend/class-breadcrumbs.php
 * -----------------------------------------------------------------------------------
 */

add_filter( 'wpseo_breadcrumb_links', 'wpse_100012_override_yoast_breadcrumb_trail' );

function wpse_100012_override_yoast_breadcrumb_trail( $links ) {
    global $post;

    if ( is_home() || is_singular( 'post' ) || is_archive() ) {
        $breadcrumb[] = array(
            'url' => get_permalink( get_option( 'page_for_posts' ) ),
            'text' => 'Blog',
        );

        array_splice( $links, 1, -2, $breadcrumb );
    }

    return $links;
}

Код отсюда: https://wordpress.stackexchange.com/a/121618/96806 Я уже изменил его, чтобы проверить, если я нахожусь на конечной точке WooCommerce.

Этот код работает нормально. Но как я могу изменить его, чтобы добавить страницу вместо ее удаления?

Я думаю, это как-то связано с array_splice; -)

1 Ответ

1 голос
/ 29 февраля 2020

ОК, у меня есть решение.

Большое благодаря ответу @WebElaine: https://wordpress.stackexchange.com/a/332300/96806

Вот мой полный код для изменения навигации по Yoast в разделе Моя учетная запись WooCommerce:

add_filter('wpseo_breadcrumb_links', 'woocommerce_account_breadcrumb_trail');
function woocommerce_account_breadcrumb_trail($links) {
    if ( is_wc_endpoint_url() or is_account_page() ) {

        $endpoint       = WC()->query->get_current_endpoint();
        $endpoint_title = WC()->query->get_endpoint_title( $endpoint );
        $endpoint_url   = wc_get_endpoint_url($endpoint);

        if ( is_account_page() && !is_wc_endpoint_url() ) :
            //$links[2] = array('text' => $endpoint_title, 'url' => $endpoint_url, 'allow_html' => 1);

        elseif ( is_wc_endpoint_url( 'edit-account' ) ) :
            $links[2] = array('text' => $endpoint_title, 'url' => $endpoint_url, 'allow_html' => 1);

        elseif ( is_wc_endpoint_url( 'orders' ) ) :
            $links[2] = array('text' => $endpoint_title, 'url' => $endpoint_url, 'allow_html' => 1);

            elseif ( is_wc_endpoint_url( 'view-order' ) ) :
                $endpoint_orders        = 'orders';
                $endpoint_orders_title  = WC()->query->get_endpoint_title( $endpoint_orders );
                $endpoint_orders_url    = wc_get_endpoint_url($endpoint_orders);

                $links[2] = array('text' => $endpoint_orders_title, 'url' => $endpoint_orders_url, 'allow_html' => 1);
                $links[3] = array('text' => $endpoint_title, 'url' => $endpoint_url, 'allow_html' => 1);

        elseif ( is_wc_endpoint_url( 'edit-address' ) ) :
            $links[2] = array('text' => $endpoint_title, 'url' => $endpoint_url, 'allow_html' => 1);

        elseif ( is_wc_endpoint_url( 'payment-methods' ) ) :
            $links[2] = array('text' => $endpoint_title, 'url' => $endpoint_url, 'allow_html' => 1);

            elseif ( is_wc_endpoint_url( 'add-payment-method' ) ) :
                $endpoint_payment_methods       = 'payment-methods';
                $endpoint_payment_methods_title = WC()->query->get_endpoint_title( $endpoint_payment_methods );
                $endpoint_payment_methods_url   = wc_get_endpoint_url($endpoint_payment_methods);

                $links[2] = array('text' => $endpoint_payment_methods_title, 'url' => $endpoint_payment_methods_url, 'allow_html' => 1);
                $links[3] = array('text' => $endpoint_title, 'url' => $endpoint_url, 'allow_html' => 1);

        endif;

    }

    return $links;

}

Я рад каждому отзыву.

...