Вопрос или проблема
Я хочу изменить slug пользовательского типа записи. Я использовал этот фрагмент кода, но он не работает.
add_filter( 'register_post_type_args', 'wpse247328_register_post_type_args', 10, 2 );
function wpse247328_register_post_type_args( $args ) {
if ( 'stores' === $post_type ) {
$args['rewrite']['slug'] = 'location';
}
return $args;
}
Я сталкивался с похожей проблемой некоторое время назад и решил ее, следуя этому гиду.
По сути, что вам нужно сделать, это две функции: 1) Пользовательское правило перезаписи WordPress и 2) Ссылка на пользовательский тип записи.
Функция правила перезаписи обеспечит корректную обработку пользовательского slug для вашего CPT на всем сайте. А вторая функция обеспечит отображение URL так, как вам нужно – вы также можете включить переменные таксономии, если хотите. В любом случае, посмотрите на статью, так как она сильно помогла мне, и я надеюсь, что она поможет и вам.
Только на действие перезаписи slug в вашем коде пользовательского типа записи?
$rewrite = array(
'slug' => 'Ваш-новый-slug',
'with_front' => true,
'pages' => true,
'feeds' => true,
);
Согласно исходному коду, это явно связано с отсутствующим аргументом
https://developer.wordpress.org/reference/hooks/register_post_type_args/
Просто добавьте $post_type
в качестве второго параметра в вашу функцию
add_filter( 'register_post_type_args', 'wpse247328_register_post_type_args', 10, 2 );
function wpse247328_register_post_type_args( $args, $post_type ) {
if ( 'stores' === $post_type ) {
$args['rewrite']['slug'] = 'location';
}
return $args;
}
Еще одна вещь, пожалуйста, установите WP_DEBUG
в true во время работы на локальном сервере, чтобы видеть все предупреждения.
Ответ или решение
Для изменения слага пользовательского типа записи в WordPress вы можете использовать фильтр register_post_type_args
, а также убедиться, что вы правильно передаете параметры в функцию. В вашем первоначальном коде отсутствовал один важный параметр – это $post_type
. Давайте исправим это и предоставим вам более полное решение проблемы.
Исправленный код
Вот правильный код, который вы можете использовать для изменения слага вашего пользовательского типа записи:
add_filter( 'register_post_type_args', 'wpse247328_register_post_type_args', 10, 2 );
function wpse247328_register_post_type_args( $args, $post_type ) {
if ( 'stores' === $post_type ) {
$args['rewrite'] = array(
'slug' => 'location', // Новый слаг
'with_front' => true,
'pages' => true,
'feeds' => true,
);
}
return $args;
}
Объяснение кода
-
Фильтр: Мы используем хук
register_post_type_args
, чтобы изменить аргументы, переданные при регистрации типа записи. -
Параметры: Ваша функция принимает два параметра:
$args
– массив аргументов пользовательского типа записи, и$post_type
– строку, представляющую название регистрационного типа записи (в данном случае это ‘stores’). -
Изменение слага: Мы проверяем, совпадает ли
$post_type
с ‘stores’, и если это так, изменяем'rewrite'['slug']
на ‘location’.
Дополнительные шаги
После внесения изменений в ваш код, не забудьте выполнить следующие действия:
-
Сброс пермалинков: Перейдите к Настройки > Постоянные ссылки в админ-панели WordPress и просто нажмите "Сохранить изменения". Это необходимо для того, чтобы обновить правила перезаписи в WordPress.
-
Проверка на ошибки: Если вы работаете в локальной среде, рекомендуется установить
WP_DEBUG
вtrue
в файлеwp-config.php
, чтобы отображать все предупреждения и ошибки. Это поможет вам быстрее находить и исправлять ошибки в коде. -
Проверка работы: После внесения изменений попробуйте создать новый пост в своем пользовательском типе записи и убедитесь, что ссылка выглядит так, как вы ожидаете (например,
вашсайт.com/location/пост
).
Следуя этим шагам и правильно применяя код, вы сможете успешно изменить слаг вашего пользовательского типа записи в WordPress.