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

16 сент. 2014 г., 10:35:11
Просмотры: 26K
Голосов: 1

У меня есть категория проектов в моей теме (произвольный тип записей).

Моя ссылка выглядит так

http://shaowtriger.com/project/naim/

Требуемая ссылка должна быть такой

http://shaowtriger.com/brands/naim/

У меня также есть страница

http://shaowtriger.com/brands

Я не понимаю, как это реализовать.

Есть ли предложения по правилам перезаписи (rewrite rules)

1
Комментарии

Не просите рекомендаций по плагинам. Это не по теме

Pieter Goosen Pieter Goosen
16 сент. 2014 г. 11:58:20
Все ответы на вопрос 1
7

Вы можете использовать аргумент 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 вместо подстраницы.

16 сент. 2014 г. 10:51:16
Комментарии

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

user1145009 user1145009
16 сент. 2014 г. 11:12:19

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

Robert hue Robert hue
16 сент. 2014 г. 11:25:39

Не понял... Где я должен использовать flush_rewrite_rules();

user1145009 user1145009
16 сент. 2014 г. 12:02:17

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

Robert hue Robert hue
16 сент. 2014 г. 12:17:28

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

Pieter Goosen Pieter Goosen
16 сент. 2014 г. 12:48:14

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

Slam Slam
10 окт. 2017 г. 00:07:17

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

Merc Merc
2 нояб. 2018 г. 12:44:36
Показать остальные 2 комментариев