• Здравствуйте! Мучаюсь целый день сегодня.
    Есть код, что бы удалить ярлык категории из ссылки:

    add_filter('request', 'true_smenit_request', 1, 1 );
     
    function true_smenit_request( $query ){
     
    	$taxonomia_name = 'product_cat'; // укажите название таксономии здесь, это также могут быть рубрики category или метки post_tag
     
    	// запросы для дочерних элементов будут отличаться, поэтому нам потребуется дополнительная проверка
    	if( $query['attachment'] ) :
    		$dochernia = true; // эту переменную задаём для себя, она нам потребуется дальше
    		$urlyarlyk = $query['attachment']; // это ярлык данного термина/рубрики/метки
    	else:
    		$dochernia = false;
    		$urlyarlyk = $query['name']; // как видите, здесь ярлык хранится в другой переменной запроса
    	endif;
     
     
    	$termin = get_term_by('slug', $urlyarlyk, $taxonomia_name); // получаем элемент таксономии по ярлыку
     
    	if ( isset( $urlyarlyk ) && $termin && !is_wp_error( $termin )): // если такого элемента не существует, прекращаем выполнение кода
     
    		// для страниц дочерних элементов код немного отличается
    		if( $dochernia ) {
    			unset( $query['attachment'] );
    			$parent = $termin->parent;
    			while( $parent ) {
    				$parent_term = get_term( $parent, $taxonomia_name);
    				$urlyarlyk = $parent_term->slug . '/' . $urlyarlyk; // нам нужно получить полный путь, состоящий из ярлыка текущего элемента и всех его родителей
    				$parent = $parent_term->parent;
    			}
    		} else {
    			unset($query['name']);
    		}
     
    
     
    	endif;
     
    	return $query;
     
    }
     
    // смена самой ссылки
    add_filter( 'term_link', 'true_smena_permalink', 10, 3 );
     
    function true_smena_permalink( $url, $term, $taxonomy ){
     
    	$taxonomia_name = 'product_cat'; // название таксономии, тут всё понятно
    	$taxonomia_slug = 'product-category'; // ярлык таксономии - зависит от параметра rewrite, указанного при создании и может отличаться от названия,
    	// как например таксономия меток это post_tag, а ярлык по умолчанию tag
     
    	// выходим из функции, если указанного ярлыка таксономии нет в URL или если название таксономии не соответствует
    	if ( strpos($url, $taxonomia_slug) === FALSE || $taxonomy != $taxonomia_name ) return $url;
    	
    	$url = str_replace('/' . $taxonomia_slug, '', $url); // если мы ещё тут, выполняем замену в URL
     
    	return $url;
    }

    и есть код, что бы добавить в конец ссылки категории товара .html:

    function wpse_178112_category_permastruct_html( $taxonomy, $object_type, $args ) {
        if ( $taxonomy === 'product_cat' )
            add_permastruct( $taxonomy, "{$args['rewrite']['slug']}/%$taxonomy%.html", $args['rewrite'] );
    }
    
    add_action( 'registered_taxonomy', 'wpse_178112_category_permastruct_html', 40, 4 );

    По отдельности все работает как нужно. А вот вместе — ошибка 404… т.е. ссылка открывается в нужном формате, но страницы по этому адресу нет (она без .html на конце) 🙁
    Как бы все это совместить?

    • Тема изменена 7 лет назад пользователем SeVlad. Причина: перенос в подходящий раздел
    • Тема изменена 7 лет назад пользователем IgorIvanov.
Просмотр 4 ответов — с 1 по 4 (всего 4)
  • А кто мешает поставить плагин WP No Category Base, а в постоянных ссылках прописать что-то вроде /%category%/%postname%.html? Зачем весь этот огород городить?

    Автор IgorIvanov

    (@igorivanov)

    А кто мешает поставить плагин WP No Category Base, а в постоянных ссылках прописать что-то вроде /%category%/%postname%.html? Зачем весь этот огород городить?

    Это категории товаров — в постоянных ссылках html не прописывается

    Упс. Сорри, был невнимателен. Но обычно у всяких там woocommerce имеются расширения для этой цели.

    Автор IgorIvanov

    (@igorivanov)

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

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Тема «Удалить ярлык категории и добавить html в конец ссылки» закрыта для новых ответов.