Использование ID вместо слага в дружественном URL для типа поста – “POSTTYPE/ID”
В этой статье мы рассмотрим, как настроить дружественные URL для кастомного типа поста, например, для заказов. Мы будем использовать ID поста вместо слага в URL.
Настройка кастомного типа поста
Когда вы регистрируете свой тип поста, например 'orders', с помощью функции register_post_type()
, помните, что если параметр rewrite
установлен в false
, то правила перезаписи не создаются автоматически и их нужно настраивать вручную.
URL должен выглядеть следующим образом:
example.com/orders/123
, где 123
— это ID поста.
Пример кода
Вот пример, как можно настроить URL:
add_action( 'init', function() {
// Создание правил для дружественного URL
add_rewrite_tag( '%order_id%', '([0-9]+)', "post_type=orders&p=" );
// Регистрация структуры для типа поста
add_permastruct( 'orders', 'order/%order_id%', array(
'with_front' => false,
'paged' => false,
'feed' => false,
'forcomments' => false,
'walk_dirs' => false,
'endpoints' => false,
) );
// Замена слага в URL на ID
add_filter( 'post_type_link', 'orders_permalink', 1, 2 );
function orders_permalink( $permalink, $post ) {
// Проверяем, содержит ли адрес URL %order_id%
if( false === strpos( $permalink, '%order_id%' ) ){
return $permalink; // Если нет, возвращаем оригинальный permalink
}
// Заменяем %order_id% на настоящий ID поста
return str_replace( '%order_id%', $post->ID, $permalink );
}
});
Объяснение кода
-
add_rewrite_tag: Эта функция создает новый тег для URL, который будет использоваться для передачи ID заказа.
-
add_permastruct: Здесь мы определяем структур�� нашего URL, указывая, что вместо слова "order" должен появляться ID заказа.
-
add_filter: Этот фильтр позволяет изменять формат ссылки на пост, чтобы вместо
%order_id%
ставился фактический ID.
Заключение
Теперь, когда вы настроили свои URL, ссылки на заказы будут выглядеть более дружелюбно и будут включать ID вашего поста. Это упрощает работу с URL и улучшает их читаемость.
Если у вас возникнут вопросы или потребуется помощь, не стесняйтесь обращаться к документации WordPress!