Правило перезаписи для пользовательской таксономии

12 февр. 2014 г., 13:25:50
Просмотры: 15.5K
Голосов: 3

Я новичок в WordPress и пытаюсь создать блог с рецептами.

Я создал пользовательскую таксономию для ингредиентов:

register_taxonomy( 
    'ingredient', 
    'post', 
    array( 'label' => 'Ingredient', 
           'hierarchical' => true
         ), 
    array( 'rewrite' => array (
                            'slug'=>'recipes-with'
                        )
    );

Все работает, и мои URL выглядят так:

www.mysite.com/recipes-with/onion

Но я хочу, чтобы URL выглядели так:

www.mysite.com/recipes-with-onion

Я пытался использовать add_rewrite_rule(), но у меня не получается заставить это работать.

Буду очень благодарен за помощь!

РЕДАКТИРОВАНИЕ: Вот как я решил проблему с помощью toni_lehtimaki.

1) Я удалил массив rewrite в аргументах register_taxonomy, так что получилось:

register_taxonomy( 'ingredient', 'post', array('label'=>'Ingredient', 'hierarchical'=>true));

2) Затем я добавил правила перезаписи:

add_rewrite_rule('^recipes-with-(.*)/page/([0-9]+)?$','index.php?ingredient=$matches[1]&paged=$matches[2]','top');
add_rewrite_rule('^recipes-with-(.*)/?','index.php?ingredient=$matches[1]','top');

3) Последнее, что нужно было сделать - добавить фильтр:

add_filter( 'term_link', 'change_ingredients_permalinks', 10, 2 );

function change_ingredients_permalinks( $permalink, $term ) {
    if ($term->taxonomy == 'ingredient') $permalink = str_replace('ingredient/', 'recipes-with-', $permalink);
    return $permalink;
}

4) Сбросить правила перезаписи (достаточно просто зайти в настройки->постоянные ссылки и нажать сохранить)

0
Все ответы на вопрос 1
0

Я придумал это с помощью add_rewrite_rule():

add_rewrite_rule('^recipes-with-([^/]*)/?','index.php?ingredient=$matches[1]','top');

Я провел тестирование вышеуказанного кода, и он хорошо работает, когда вы используете его для одной таксономии за раз. Вот код из моего файла functions.php:

add_action( 'init', 'create_ingredient_tax' );
function create_ingredient_tax() {
    register_taxonomy( 
            'ingredient', 
            'post', 
             array( 'label' => 'Ингредиент', 
            'hierarchical' => true
            ), 
            array( 'rewrite' => array (
                        'slug'=>'recipes-with'
                    ))
        );
}
// Не забудьте выполнить flush_rewrite_rules(); или посетить страницу настроек структуры постоянных ссылок WordPress
add_rewrite_rule('^recipes-with-([^/]*)/?','index.php?ingredient=$matches[1]','top');

Затем я использовал файл шаблона taxonomy-post_format.php из темы WordPress twentyfourteen, чтобы проверить, что это работает. Я также сбросил правила перезаписи, чтобы новое правило вступило в силу.

12 февр. 2014 г. 16:11:47