За последние 24 часа нас посетили 32973 программиста и 1821 робот. Сейчас ищут 876 программистов ...

Удалить ярлык категории товара и добавить html в конец ссылки

Тема в разделе "PHP для новичков", создана пользователем igorsrt, 22 сен 2017.

  1. igorsrt

    igorsrt Активный пользователь

    С нами с:
    17 сен 2015
    Сообщения:
    65
    Симпатии:
    1
    Здравствуйте! Мучаюсь целый день сегодня.
    Сайт на Wordpress. Есть код, что бы удалить ярлык категории из ссылки:
    PHP:
    1. add_filter('request', 'true_smenit_request', 1, 1 );
    2. function true_smenit_request( $query ){
    3.     $taxonomia_name = 'product_cat'; // укажите название таксономии здесь, это также могут быть рубрики category или метки post_tag
    4.     // запросы для дочерних элементов будут отличаться, поэтому нам потребуется дополнительная проверка
    5.     if( $query['attachment'] ) :
    6.         $dochernia = true; // эту переменную задаём для себя, она нам потребуется дальше
    7.         $urlyarlyk = $query['attachment']; // это ярлык данного термина/рубрики/метки
    8.     else:
    9.         $dochernia = false;
    10.         $urlyarlyk = $query['name']; // как видите, здесь ярлык хранится в другой переменной запроса
    11.     endif;
    12.  
    13.     $termin = get_term_by('slug', $urlyarlyk, $taxonomia_name); // получаем элемент таксономии по ярлыку
    14.     if ( isset( $urlyarlyk ) && $termin && !is_wp_error( $termin )): // если такого элемента не существует, прекращаем выполнение кода
    15.         // для страниц дочерних элементов код немного отличается
    16.         if( $dochernia ) {
    17.             unset( $query['attachment'] );
    18.             $parent = $termin->parent;
    19.             while( $parent ) {
    20.                 $parent_term = get_term( $parent, $taxonomia_name);
    21.                 $urlyarlyk = $parent_term->slug . '/' . $urlyarlyk; // нам нужно получить полный путь, состоящий из ярлыка текущего элемента и всех его родителей
    22.                 $parent = $parent_term->parent;
    23.             }
    24.         } else {
    25.             unset($query['name']);
    26.         }
    27.  
    28.         switch( $taxonomia_name ): // параметры запроса для рубрик и меток отличаются от других таксономий
    29.             case 'category':{
    30.                 $query['category_name'] = $urlyarlyk;
    31.                 break;
    32.             }
    33.             case 'post_tag':{
    34.                 $query['tag'] = $urlyarlyk;
    35.                 break;
    36.             }
    37.             default:{
    38.                 $query[$taxonomia_name] = $urlyarlyk;
    39.                 break;
    40.             }
    41.         endswitch;
    42.     endif;
    43.     return $query;
    44. }
    45. // смена самой ссылки
    46. add_filter( 'term_link', 'true_smena_permalink', 10, 3 );
    47. function true_smena_permalink( $url, $term, $taxonomy, $args ){
    48.     $taxonomia_name = 'product_cat'; // название таксономии, тут всё понятно
    49.     $taxonomia_slug = 'product-category'; // ярлык таксономии - зависит от параметра rewrite, указанного при создании и может отличаться от названия,
    50.     if ( strpos($url, $taxonomia_slug) === FALSE || $taxonomy != $taxonomia_name ) return $url;
    51.          //$url = $url . '.html';
    52.    
    53.     $url = str_replace('/' . $taxonomia_slug, '', $url); // если мы ещё тут, выполняем замену в URL
    54.  
    55.     return $url;
    56.  
    57. }
    и есть код, что бы добавить в конец ссылки категории товара .html:
    PHP:
    1. function wpse_178112_category_permastruct_html( $taxonomy, $object_type, $args ) {
    2.     if ( $taxonomy === 'product_cat' )
    3.         add_permastruct( $taxonomy, "{$args['rewrite']['slug']}/%$taxonomy%.html", $args['rewrite'] );
    4. }
    5.  
    6. add_action( 'registered_taxonomy', 'wpse_178112_category_permastruct_html', 20, 3 );
    По отдельности все работает как нужно. А вот вместе — ошибка 404… т.е. ссылка отображается в нужном формате (с .html), но страницы по этому адресу нет (она без .html на конце)
    Как бы все это совместить?
     
  2. igorsrt

    igorsrt Активный пользователь

    С нами с:
    17 сен 2015
    Сообщения:
    65
    Симпатии:
    1
    Подозреваю, что дело в этой строчке
    Код (Text):
    1. add_permastruct( $taxonomy, "{$args['rewrite']['slug']}/%$taxonomy%.html", $args );
    , а именно {$args[‘rewrite’][‘slug’]} — т.к. если я это выражения удаляю, то категории выводятся как надо… но все остальные страницы тогда — ошибка 404.. (
    Кто-нибудь может подсказать?