Скрываем /?taxonomy=

153
28 ноября 2019, 18:20

Как скрыть в адресной строке таксономию?

Ссылка такого вида

Ссылка_сайта/каталог/товар/?brand=doosan

Нужно сделать:

Ссылка_сайта/каталог/товар/doosan

Используются произвольные поля Advanced Custom Fields и Toolset.

Есть возможность заменить таксономию, но не отключить.

Answer 1

Решил вопрос данным кодом(Поместить в functions.php):

// смена запроса
add_filter('request', 'true_smenit_request', 1, 1 );

function true_smenit_request( $query ){

$taxonomia_name = 'brand'; // укажите название таксономии здесь, это также могут быть рубрики 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-> $urlyarlyk; // нам нужно получить полный путь, состоящий из ярлыка текущего элемента и всех его родителей
            $parent = $parent_term->parent;
        }
    } else {
        unset($query['name']);
    }
    switch( $taxonomia_name ): // параметры запроса для рубрик и меток отличаются от других таксономий
        case 'category':{
            $query['category_name'] = $urlyarlyk;
            break;
        }
        case 'post_tag':{
            $query['tag'] = $urlyarlyk;
            break;
        }
        default:{
            $query[$taxonomia_name] = $urlyarlyk;
            break;
        }
    endswitch;
endif;
return $query;

}

// смена самой ссылки
add_filter( 'term_link', 'true_smena_permalink', 10, 3 );

function true_smena_permalink( $url, $term, $taxonomy ){

$taxonomia_name = 'brand'; // название таксономии, тут всё понятно
$taxonomia_slug = 'brand'; // ярлык таксономии - зависит от параметра 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;
}
READ ALSO
В каком формате должна быть запись в wp_posts > post_name?

В каком формате должна быть запись в wp_posts > post_name?

Есть задача, добавлять новые записи напрямую в базу WordPressДля этого создал в отдельном файле подключение к базе и выполняю запрос на добавление...

122
Как пользоваться REST API Битрикс24 в Drupal?

Как пользоваться REST API Битрикс24 в Drupal?

У клиента сайт на друпале/уберкартеИз интернет-магазина нужно отправлять запросы к API Битрикс24

139
Удаление файлов в Wordpress

Удаление файлов в Wordpress

Всем доброе время суток, есть следующая ситуация - на сайте которые построен на Wordpress вирусный код удаляет все файлы с папок wp-admin и wp-includes,...

123
Почему код не может найти файл?

Почему код не может найти файл?

GetLastError возвращает ERROR_FILE_NOT_FOUND, хотя в папке есть файлы попадающие под маскуВ чем проблема? Буду благодарен за помощь!

135