• DONATE to NULLED!
    Вы можете помочь Форуму и команде, поддержать финансово.
    starwanderer - модератор этого раздела будет Вам благодарен!

Помощь Breadcrumb - как сделать последний элемент ссылкой?

Deny29

Постоялец
Регистрация
12 Май 2017
Сообщения
62
Реакции
2
Друзья!
Такая проблема с этими хлебными крошками.
Wordpress 4.9.7
Woocommerce 3.4.3
По умолчанию, в хлебных крошках Woocommerce последний элемент идет без ссылки, то есть, без ссылки на самого себя. Наверное, это раньше было нормально, но с недавних пор это, походу, стало как грубая ошибка, и в Сеарч консоли уже 680 товаров с этой ошибкой.

Искал решение но не нашел. Как же добавить ссылку в этот последний элемент?

Вот шаблон вывода хлебных крошек
PHP:
<?php
/**
* Shop breadcrumb
*
* @author         WooThemes
* @package     WooCommerce/Templates
* @version     2.3.0
* @see         woocommerce_breadcrumb()
*/

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}
$delimiter = '';

if ( ! empty( $breadcrumb ) ) {

    echo $wrap_before;

    $count = count($breadcrumb);

    $i = 0;
    $class = '';

    foreach ( $breadcrumb as $key => $crumb ) {

        $i++;

        if( $i == $count - 1 ) {
            $class = 'breadcrumb-link-last';
        }

        echo $before;

        if ( ! empty( $crumb[1] ) && sizeof( $breadcrumb ) !== $key + 1 ) {
            echo '<a href="' . esc_url( $crumb[1] ) . '" class="breadcrumb-link ' . $class . '">' . esc_html( $crumb[0] ) . '</a>';
        } else {
            echo '<span class="breadcrumb-last"> ';
            echo esc_html( $crumb[0] );
            echo '</span>';
        }

        echo $after;

        if ( sizeof( $breadcrumb ) !== $key + 1 ) {
            echo $delimiter;
        }

    }

    echo $wrap_after;

}

Заранее большое спасибо!
 
потому что гугл видит это как ошибку, если бы просто предупреждение, я бы не парился...
Может наоборот? Ссылка на саму себя на странице - это ошибка.
Если не наоборот, то скрин и/или текст ошибки из Search Console приведите, это поможет разобраться что не так. Может вообще не в хлебных крошках проблема.
 
Может наоборот? Ссылка на саму себя на странице - это ошибка.
Если не наоборот, то скрин и/или текст ошибки из Search Console приведите, это поможет разобраться что не так. Может вообще не в хлебных крошках проблема.

Да, пожалуйста, вот скрин, может я чего-то не понимаю...
di-9PTP.png
 
Искал решение но не нашел. Как же добавить ссылку в этот последний элемент?
замените
PHP:
        if ( ! empty( $crumb[1] ) && sizeof( $breadcrumb ) !== $key + 1 ) {
            echo '<a href="' . esc_url( $crumb[1] ) . '" class="breadcrumb-link ' . $class . '">' . esc_html( $crumb[0] ) . '</a>';
        } else {
            echo '<span class="breadcrumb-last"> ';
            echo esc_html( $crumb[0] );
            echo '</span>';
        }
на
PHP:
        if ( ! empty( $crumb[1] ) && sizeof( $breadcrumb ) !== $key + 1 ) {
            echo '<a href="' . esc_url( $crumb[1] ) . '" class="breadcrumb-link ' . $class . '">' . esc_html( $crumb[0] ) . '</a>';
        } else {
            echo '<a href="' . esc_url( $crumb[1] ) . '" class="breadcrumb-link ' . $class . '">' . esc_html( $crumb[0] ) . '</a>';
        }
по мне так проще ссылку в else изменить, чем условие убирать
 
замените
PHP:
        if ( ! empty( $crumb[1] ) && sizeof( $breadcrumb ) !== $key + 1 ) {
            echo '<a href="' . esc_url( $crumb[1] ) . '" class="breadcrumb-link ' . $class . '">' . esc_html( $crumb[0] ) . '</a>';
        } else {
            echo '<span class="breadcrumb-last"> ';
            echo esc_html( $crumb[0] );
            echo '</span>';
        }
на
PHP:
        if ( ! empty( $crumb[1] ) && sizeof( $breadcrumb ) !== $key + 1 ) {
            echo '<a href="' . esc_url( $crumb[1] ) . '" class="breadcrumb-link ' . $class . '">' . esc_html( $crumb[0] ) . '</a>';
        } else {
            echo '<a href="' . esc_url( $crumb[1] ) . '" class="breadcrumb-link ' . $class . '">' . esc_html( $crumb[0] ) . '</a>';
        }
по мне так проще ссылку в else изменить, чем условие убирать

Ссылка появилась, как и разделитель которого в конце не должно быть, но проблема в консоли не решена.
Изменил, очистил кэш, и проверил, результат тот же(
Может как-то по другому?

Вот еще сама микроразметка
PHP:
    /**
     * Generates BreadcrumbList structured data.
     *
     * Hooked into `woocommerce_breadcrumb` action hook.
     *
     * @param WC_Breadcrumb $breadcrumbs Breadcrumb data.
     */
    public function generate_breadcrumblist_data( $breadcrumbs ) {
        $crumbs = $breadcrumbs->get_breadcrumb();

        if ( empty( $crumbs ) || ! is_array( $crumbs ) ) {
            return;
        }

        $markup                    = array();
        $markup['@type']           = 'BreadcrumbList';
        $markup['itemListElement'] = array();

        foreach ( $crumbs as $key => $crumb ) {
            $markup['itemListElement'][ $key ] = array(
                '@type'    => 'ListItem',
                'position' => $key + 1,
                'item'     => array(
                    'name' => $crumb[0],
                ),
            );

            if ( ! empty( $crumb[1] ) && count( $crumbs ) !== $key + 1 ) {
                $markup['itemListElement'][ $key ]['item'] += array( '@id' => $crumb[1] );
            }
        }

        $this->set_data( apply_filters( 'woocommerce_structured_data_breadcrumblist', $markup, $breadcrumbs ) );
    }
 
Последнее редактирование:
Да, пожалуйста, вот скрин, может я чего-то не понимаю...

Посмотрел код страницы сайта, по-моему у вас просто неверное значение поля "@id" (слэши лишние) :
"https:\/\/Для просмотра ссылки Войди или Зарегистрируйся"

Ссылка с хлебных крошек в html коде тут не при чём.
 
Посмотрел код страницы сайта, по-моему у вас просто неверное значение поля "@id" (слэши лишние) :
"https:\/\/Для просмотра ссылки Войди или Зарегистрируйся"

Ссылка с хлебных крошек в html коде тут не при чём.

В микроразметке сделал так, может кому-то пригодится...
PHP:
if ( ! empty( $crumb[1] ) && count( $crumbs ) !== $key + 1 ) {
            $markup['itemListElement'][ $key ]['item'] += array( '@id' => $crumb[1] ); } else {
                $markup['itemListElement'][ $key ]['item'] += array( '@id' => $crumb[1] );
            }
Проверил, ошибки и предупреждения пропали, вроде все правильно выводится в тесте.
Только я не знаю, правильно ли я сделал, что скажете?
 
В микроразметке сделал так, может кому-то пригодится...
PHP:
if ( ! empty( $crumb[1] ) && count( $crumbs ) !== $key + 1 ) {
            $markup['itemListElement'][ $key ]['item'] += array( '@id' => $crumb[1] ); } else {
                $markup['itemListElement'][ $key ]['item'] += array( '@id' => $crumb[1] );
            }
Проверил, ошибки и предупреждения пропали, вроде все правильно выводится в тесте.
Только я не знаю, правильно ли я сделал, что скажете?

Только что проверил - изменений не вижу, всё так же лишние слэши отображаются (может серверный кеш и поэтому изменений не вижу).
Да и вообще не уверен, что это правильный способ урл через id передавать, как по мне правильней как-то так:
Код:
<script type='application/ld+json'>
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "url": "http://your-website.com/"
}
</script>
 
Назад
Сверху