WooCommerce — Удалить название продукта из breadcrumbs, но сохранить все гиперссылки на категории

#php #wordpress #woocommerce #breadcrumbs

#php #wordpress #woocommerce #breadcrumbs

Вопрос:

Я использую следующую функцию, чтобы удалить название продукта из breadcrumbs, отображаемых на странице продукта:

 add_filter( 'woocommerce_get_breadcrumb', 'ed_change_breadcrumb' );

function ed_change_breadcrumb( $breadcrumb ) {
    
  if(is_singular()){
        array_pop($breadcrumb);
    }
  
  return $breadcrumb;
}
  

Это работает в том смысле, что удаляет заголовок, но также не позволяет последней категории / подкатегории быть гиперссылкой. Как я могу это исправить?

Например:

  • Оригинальный breadcrumb

    <a> Главная страница </a> / <a> Категория </a> / <a> Подкатегория </a> / Название продукта

  • Результат вышеупомянутой функции

    <a> Главная страница </a> / <a> Категория </a> / Подкатегория

Мне нужно, чтобы подкатегория оставалась доступной для просмотра после удаления названия продукта из breadcrumbs.

Спасибо

Ответ №1:

Ваш код работает, но последний элемент в breadcrumbs никогда не содержит ссылки через код, используемый в global/breadcrumb.php файле шаблона в строке 34

  • Этот шаблон можно переопределить, скопировав его в yourtheme/woocommerce/global/breadcrumb.php .

Таким образом, вы можете удалить свой фильтр-хук и применить следующий код в файле шаблона, чтобы он предоставлял ссылку на последний элемент, когда is_product() значение true

Примечание: is_product() — Возвращает true на одной странице продукта. Оболочка для is_singular()

Заменить

 if ( ! empty( $breadcrumb ) ) {

    echo $wrap_before;

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

        echo $before;

        if ( ! empty( $crumb[1] ) amp;amp; sizeof( $breadcrumb ) !== $key   1 ) {
            echo '<a href="' . esc_url( $crumb[1] ) . '">' . esc_html( $crumb[0] ) . '</a>';
        } else {
            echo esc_html( $crumb[0] );
        }

        echo $after;

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

    echo $wrap_after;

}
  

С помощью

 if ( ! empty( $breadcrumb ) ) {

    echo $wrap_before;

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

        echo $before;

        if ( ! empty( $crumb[1] ) amp;amp; sizeof( $breadcrumb ) !== $key   1 ) {
            echo '<a href="' . esc_url( $crumb[1] ) . '">' . esc_html( $crumb[0] ) . '</a>';
        } else {
            if ( is_product() ) {       
                unset($crumb);
            } else {
                echo esc_html( $crumb[0] );
            }
        }

        echo $after;

        if ( sizeof( $breadcrumb ) !== $key   1 ) {
            if ( is_product() amp;amp; sizeof( $breadcrumb ) == $key   2 ) {
                echo '';
            } else {
                echo $delimiter;
            }
        }
    }

    echo $wrap_after;

}