Изменение постоянной ссылки для произвольного типа записей
У меня есть категория проектов в моей теме (произвольный тип записей).
Моя ссылка выглядит так
Требуемая ссылка должна быть такой
У меня также есть страница
Я не понимаю, как это реализовать.
Есть ли предложения по правилам перезаписи (rewrite rules)

Вы можете использовать аргумент rewrite в register_post_type. Это позволяет иметь название типа записи отличное от slug в URL. Например, вот пример кода с пользовательским типом записи project, который отображает страницы по адресу http://shaowtriger.com/brands/naim/
Обратите внимание на rewrite в $args
add_action( 'init', 'codex_brand_init' );
function codex_brand_init() {
$labels = array(
'name' => _x( 'Бренды', 'название типа записи (общее)', 'your-plugin-textdomain' ),
'singular_name' => _x( 'Бренд', 'название типа записи (единственное число)', 'your-plugin-textdomain' ),
'menu_name' => _x( 'Бренды', 'админ-меню', 'your-plugin-textdomain' ),
'name_admin_bar' => _x( 'Бренд', 'добавить новую в админ-баре', 'your-plugin-textdomain' ),
'add_new' => _x( 'Добавить новый', 'бренд', 'your-plugin-textdomain' ),
'add_new_item' => __( 'Добавить новый бренд', 'your-plugin-textdomain' ),
'new_item' => __( 'Новый бренд', 'your-plugin-textdomain' ),
'edit_item' => __( 'Редактировать бренд', 'your-plugin-textdomain' ),
'view_item' => __( 'Просмотреть бренд', 'your-plugin-textdomain' ),
'all_items' => __( 'Все бренды', 'your-plugin-textdomain' ),
'search_items' => __( 'Искать бренды', 'your-plugin-textdomain' ),
'parent_item_colon' => __( 'Родительские бренды:', 'your-plugin-textdomain' ),
'not_found' => __( 'Бренды не найдены.', 'your-plugin-textdomain' ),
'not_found_in_trash' => __( 'В корзине брендов не найдено.', 'your-plugin-textdomain' )
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'brands' ),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => null,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
);
register_post_type( 'project', $args );
flush_rewrite_rules();
}
Хотя наличие только базовой страницы http://shaowtriger.com/brands/
не должно мешать работе с slug и функциональностью CPT, но наличие подстраниц у страницы brands работать не будет, так как WordPress будет искать элемент CPT вместо подстраницы.

У меня это уже есть в моем functions.php, где вместо Brands используется Projects... Я изменил этот slug, но это не работает

Вам также нужно выполнить flush_rewrite_rules();
и затем снова посетить страницу настроек постоянных ссылок.

Вы можете использовать это при регистрации CPT. Я обновил свой код выше и добавил flush_rewrite_rules();
. Вы можете добавить это в свою функцию аналогичным образом.

Никогда не оставляйте flush_rewrite_rules();
в коде. Это очень ресурсоемкая функция. Используйте её один раз и затем удалите, либо подключите к действию, которое выполняется однократно, например при активации темы или плагина.

Если вы знакомы с интерфейсом командной строки, вы можете установить wp-cli и использовать команду wp rewrite flush

Что если я хочу изменить постоянную ссылку на http://shaowtriger.com/brands/2018/naim/
То есть: /brands/%year%/%postname%
?
Я нашел это: https://wordpress.stackexchange.com/questions/216337/change-permalink-structure-for-custom-post-type/216470#216470
Но почему-то это никогда не срабатывает. Кто-нибудь знает пример с большим количеством кода, например, включая регистрацию записи, как указано выше? Возможно, это помогло бы мне...
