Как создать кастомный постоянный линк для пользовательского типа записи WordPress?
Здравствуйте! У меня возникла проблема при создании кастомного постоянного линка для пользовательского типа записи в WordPress. Нужна помощь со следующим кодом:
function custom_permalink() {
global $post;
if ($post->post_type == 'custom_post_type') {
$permalink = home_url('/custom_base/' . $post->post_name . '/');
return $permalink;
}
return $permalink;
}
add_filter('post_type_link', 'custom_permalink', 10, 2);
Проблема заключается в том, что я хочу задать кастомную базу для URL пользовательского типа записи "custom_post_type". В примере выше, я пытаюсь добавить "/custom_base/" к постоянному линку. Однако, при переходе по ссылке, я получаю ошибку 404.
Я уже проверила, что "custom_post_type" зарегистрирован корректно и содержит записи. Я также убедилась, что правила перезаписи обновлены после добавления кода. Но, несмотря на это, ссылка все равно не работает. Что я делаю не так? Как можно исправить эту проблему?
Заранее благодарю за помощь!
Ответы:
function custom_post_type_registration() {
$args = array(
'labels' => array(
'name' => 'Custom Post Type',
'singular_name' => 'Custom Post',
),
'public' => true,
'has_archive' => true,
'publicly_queryable' => true,
);
register_post_type( 'custom_post_type', $args );
}
add_action( 'init', 'custom_post_type_registration' );
2. Убедитесь, что вы обновили правила перезаписи после добавления своего кода. Для этого вам нужно перейти на страницу Настройки -> Постоянные ссылки в административной панели WordPress и просто нажать кнопку "Сохранить изменения". Это обновит правила перезаписи и поможет вашим ссылкам работать правильно.
3. Проверьте, что у вас нет других функций или плагинов, которые могут заменять или изменять правила перезаписи в вашем WordPress сайте. Иногда другие функции или плагины могут перезаписывать ваши настройки и вызывать проблемы с ссылками. Попробуйте временно отключить другие плагины или функции, чтобы проверить, исправляется ли проблема.
4. Если ничего из вышеперечисленного не помогло, вы можете попробовать использовать другой подход к изменению пермалинков для вашего пользовательского типа записи. Вместо использования фильтра 'post_type_link', вы можете использовать фильтр 'rewrite_rules_array' для непосредственного изменения правил перезаписи. Вот пример кода, который показывает, как это сделать:
function custom_rewrite_rules( $rules ) {
$new_rules = array(
'custom_base/([^/]+)/?$' => 'index.php?custom_post_type=$matches[1]'
);
return $new_rules + $rules;
}
add_filter( 'rewrite_rules_array', 'custom_rewrite_rules' );
Этот код добавит новое правило перезаписи для вашего пользовательского типа записи, чтобы WordPress правильно обрабатывал ссылки вида "/custom_base/название-записи/". Не забудьте обновить правила перезаписи после добавления этого кода.
Я надеюсь, что эти рекомендации помогут вам исправить проблему с кастомным постоянным линком для вашего пользовательского типа записи в WordPress. Если у вас остались вопросы, пожалуйста, дайте мне знать. Удачи!
function custom_post_type() {
$args = array(
'public' => true,
'label' => 'Custom Post Type',
'rewrite' => array( 'slug' => 'custom_base' ),
);
register_post_type( 'custom_post_type', $args );
}
add_action( 'init', 'custom_post_type' );
В данном примере мы указываем, что URL пользовательского типа записи должен иметь базу "custom_base". Обратите внимание на параметр 'rewrite' в массиве аргументов. Он отвечает за создание правил перезаписи URL.
После регистрации пользовательского типа записи и добавления указанных выше правил, необходимо обновить правила перезаписи в WordPress. Для этого можно использовать функцию flush_rewrite_rules(). Пример кода для обновления правил:
function update_rewrite_rules() {
flush_rewrite_rules();
}
add_action( 'after_switch_theme', 'update_rewrite_rules' );
Обратите внимание, что обновление правил перезаписи происходит при активации темы. После обновления правил перезаписи, ссылки на пользовательский тип записи должны работать корректно.
Если после выполнения всех этих шагов проблема все еще не решена, попробуйте проверить настройки сервера. Убедитесь, что веб-сервер правильно настроен для работы с правилами перезаписи URL.
Надеюсь, эта информация поможет вам решить проблему. Если у вас возникнут еще вопросы, не стесняйтесь задавать их. Удачи!