Есть ли способ создания дублированных слагов подкатегорий на WordPress?

Я гуглил это как сумасшедший, но не могу найти не слишком устаревший ответ на этот вопрос или что-то, что действительно работает.

Моя проблема такая же, как та, которую этот парень описывает в этом сообщении на форуме (из 4, святой ЧЕТВЕРТЫЙ много лет назад!):
https://wordpress.org/support/topic/duplicate-subcategory-slug-problem

В настоящее время я использую последнюю версию WordPress 4.1, и я пытаюсь добиться этого:

Допустим, у меня есть 2 категории на моем сайте, которые называются ботинки а также обувь.
Внутри них я хочу сделать категорию с именем красный. Вот так будет выглядеть моя структура категорий:

 - Boots // -> URL: http://example.com/boots
| ----- Red // -> URL: http://example.com/boots/red (GREAT!)

- Shoes // -> URL: http://example.com/shoes
| ----- Red // -> URL: http://example.com/shoes/red-shoes (cmon, wp, nooo !)

Когда то, что я хотел бы достичь, это:

 - Boots // -> URL: http://example.com/boots
| ----- Red // -> URL: http://example.com/boots/red

- Shoes // -> URL: http://example.com/shoes
| ----- Red // -> URL: http://example.com/shoes/red

Этот путь был бы идеальным !!!

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

Я думаю, мне, вероятно, придется изменить ядро, не имея возможности обновить WordPress, если я это сделаю, я знаю, но у меня нет проблем с этим, если мне это нужно.

Но если есть другой способ создать эту иерархию, которая не включает категории и не нарушает мои URI, я тоже могу попробовать это. Любая помощь или совет приветствуется, ребята, большое спасибо!

2

Решение

Если ваша структура подкатегории не идет глубже, чем shoes/red (не shoes/red/hiking например), вы можете использовать конечные точки постоянных ссылок моделировать категории. Конечные точки постоянных ссылок переписаны с domain.com/request/url/?endpoint,

После того, как каждый цвет или аналог устанавливается в качестве конечной точки EP_CATEGORYURL-адреса категорий могут быть дополнены /red, /blue и так далее. Применение конечных точек к EP_ALL_ARCHIVES позволяет конечные точки в архивах CPT и даты тоже.

Затем в фильтре или действии, таком как template_include Вы можете прочитать добавленную конечную точку, используя глобальную $wp_query объект и фильтровать элементы категории соответственно.

Если пользователь вводит другой суффикс к URL (например, /red/hiking), $wp_query распознает их как пару ключ / значение как red => hiking (?red=hiking в виде необработанной строки запроса) в переменных запроса ($wp_query -> get( 'red' ); возвращается hiking). Это может быть хорошо или плохо в зависимости от того, как вы реализуете логику.

После добавления конечных точек с постоянными ссылками необходимо сбросить правила перезаписи вашей установки, используя функцию flush_rewrite_rules() или зайдя в раздел управления постоянными ссылками админ-панели и нажав один раз обновить.

Примечание. Вы не можете использовать динамические имена для конечных точек. Вам необходимо определить статическую конечную точку для каждого варианта (красный, синий и т. Д.).

1

Другие решения

У меня была такая же проблема с моими таксономиями, и я только что исправил ее, надеюсь, это поможет.

Во-первых, у вас есть таксономии ваших родителей, и когда вы создаете детей, вы должны быть уверены, что родительский слаг добавлен в слаг подкатегории. В вашем примере это будет выглядеть так:

  • сапоги-красный
  • сапоги-синий
  • обувь-красный
  • обувь-синий

Это должно иметь уникальный слаг для каждой подкатегории.

Теперь важная вещь, правила переписывания и ссылки таксономии:

Когда вы определяете таксономию, вы должны сделать это следующим образом:

register_taxonomy('mytaxonomy',array('mycustompost'), array(
'hierarchical'      => true,
'sort'              => true,
'labels'            => $labels,
'show_ui'           => true,
'show_admin_column' => true,
'query_var'         => true,
'rewrite'     => array(
'slug'        => '/%parent%'
)
));

Кроме того, вы должны изменить постоянные ссылки, чтобы они имели необходимую вам структуру, если это пользовательская таксономия (как в моем случае), вы делаете это с помощью фильтра term_link. Моя функция выглядит так:

function mytaxonomy_link( $permalink, $term, $taxonomy )
{
if ( $taxonomy !== 'mytaxonomy'  && false === strpos( $permalink, '%parent%' ) )
return $permalink;

$temp_padre = $term->parent;
$padre = get_term_by('id', $temp_padre, 'mytaxonomy');$cat_name = 'general';
if(isset($padre) && !empty($padre))
{
$cat_name  = $padre->slug;
$termslug  = $term->slug;
$new_slug  = str_replace( $cat_name , '' , $termslug);
$new_slug  = ltrim($new_slug, '-');

$permalink  = str_replace( '%parent%' , $cat_name , $permalink );
$permalink  = str_replace( $termslug , $new_slug , $permalink );

}

return $permalink;
}

add_filter( 'term_link', 'mytaxonomy_link', 10, 3 );

Эта функция преобразует ссылку подкатегории в: http://example.com/boots/red

И переписать правило, которое делает все волшебство:

  add_rewrite_rule('([^/]+)/([^/]+)/?$', 'index.php?mytaxonomy=$matches[1]-$matches[2]','top');
add_rewrite_rule('([^/]+)/([^/]+)', 'index.php?mytaxonomy=$matches[1]-$matches[2]','top');

В моем случае мои отношения между постами и таксономиями были намного сложнее, но я думаю, что это решение поможет вам.

Надеюсь, это поможет, потому что я действительно ужасно пытался найти решение этой проблемы.

1

По вопросам рекламы [email protected]