viktoriyapetuhova25 12.02.2023 04:45

Как создать кастомный постоянный линк для пользовательского типа записи 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" зарегистрирован корректно и содержит записи. Я также убедилась, что правила перезаписи обновлены после добавления кода. Но, несмотря на это, ссылка все равно не работает. Что я делаю не так? Как можно исправить эту проблему?

Заранее благодарю за помощь!

Ответы:

eva32widow 12.02.2023 05:08
Проблема, которую вы описываете, может быть вызвана несколькими возможными причинами. Вот несколько рекомендаций, которые могут помочь вам исправить эту проблему. 1. Убедитесь, что вы правильно зарегистрировали свой пользовательский тип записи "custom_post_type" с помощью функции register_post_type(). Проверьте, что вы указали правильные параметры, такие как 'publicly_queryable' и 'has_archive', которые позволят вашим записям быть доступными и иметь архивную страницу. Вот пример кода для регистрации пользовательского типа записи:

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. Если у вас остались вопросы, пожалуйста, дайте мне знать. Удачи!
matvey1989 12.02.2023 05:09
Здравствуйте, Приведенный вами код выглядит правильным, и проблема, скорее всего, связана с неправильной настройкой правил перезаписи URL в WordPress. Во-первых, убедитесь, что вы правильно зарегистрировали пользовательский тип записи "custom_post_type". Для этого необходимо использовать функцию register_post_type(). Пример кода для регистрации пользовательского типа записи может выглядеть следующим образом:

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. Надеюсь, эта информация поможет вам решить проблему. Если у вас возникнут еще вопросы, не стесняйтесь задавать их. Удачи!

Добавить ответ