igoryPank40 17.11.2023 13:16

Как изменить URL-адрес поста в WordPress?

Здравствуйте!

У меня возникла проблема с изменением URL-адреса поста в WordPress. Я использую следующий код:


function change_post_url($url, $post) {
    // Код, который позволяет изменять URL-адрес поста
    return $url;
}
add_filter('post_link', 'change_post_url', 10, 2);

Моя цель - изменить URL-адрес поста на основе его категории. Например, если категория поста "новости", URL-адрес должен выглядеть следующим образом: "https://example.com/news/%postname%".

Однако, я не могу разобраться, как реализовать это правильно в своем коде. Я хотел бы узнать, как можно изменить URL-адрес поста в соответствии с его категорией с помощью фильтра 'post_link'.

Буду благодарен за любую помощь и советы!

Ответы:

SofiaFomina1986 17.11.2023 13:40
Вы можете использовать функцию get_category_link() для получения URL-адреса категории по ее ID и затем добавить его к URL-адресу поста с помощью функции add_query_arg().
ekaterina35 17.11.2023 13:45
Попробуйте использовать функцию get_category_link() для получения URL-адреса категории и добавьте его к URL-адресу поста внутри вашей функции change_post_url().
Julian35Organized 17.11.2023 13:52

Чтобы изменить URL-адрес поста на основе его категории с использованием фильтра 'post_link' в WordPress, вам понадобится следующий код:


function change_post_url($url, $post) {
    // Проверяем, является ли пост частью категории
    if (has_category('новости', $post)) {
        // Получаем ссылку на категорию
        $category = get_category_by_slug('новости');
        
        // Проверяем, существует ли категория
        if ($category) {
            // Формируем новый URL-адрес поста
            $new_url = home_url('/' . $category->slug . '/' . $post->post_name . '/');
            
            // Заменяем исходный URL-адрес
            $url = $new_url;
        }
    }
    
    return $url;
}
add_filter('post_link', 'change_post_url', 10, 2);

В этом коде мы используем функцию 'has_category', чтобы проверить, является ли пост частью категории 'новости'. Затем мы используем функцию 'get_category_by_slug', чтобы получить объект категории по ее слагу (slug). Если категория существует, мы формируем новый URL-адрес поста, добавляя слаг категории и слаг поста. Наконец, мы заменяем исходный URL-адрес новым URL-адресом.

Примечание: В коде я использовал категорию 'новости' в качестве примера. Вам необходимо заменить ее на нужную вам категорию.

Надеюсь, это поможет вам изменить URL-адрес поста в соответствии с его категорией! Если у вас возникнут еще вопросы, не стесняйтесь задавать.

Creativewidow40 17.11.2023 14:02

Для изменения URL-адреса поста в соответствии с его категорией, вам необходимо использовать фильтр 'post_link' и функцию, которая будет выполнять эту задачу.

Вот пример кода, который позволит вам изменить URL-адрес поста на основе его категории:


function change_post_url($url, $post) {
    // Проверяем, является ли пост частью категории "новости"
    if (in_category('новости', $post)) {
        // Получаем URL-адрес базовой страницы новостей
        $base_url = get_permalink(get_page_by_title('Новости'));
        
        // Добавляем %postname% к базовому URL-адресу
        $new_url = trailingslashit($base_url) . $post->post_name;
        
        // Возвращаем новый URL-адрес
        return $new_url;
    }
    
    // Возвращаем исходный URL-адрес для всех остальных постов
    return $url;
}
add_filter('post_link', 'change_post_url', 10, 2);

В этом примере мы сначала проверяем, является ли пост частью категории "новости" с помощью функции 'in_category'. Затем мы получаем URL-адрес базовой страницы новостей с помощью функции 'get_permalink' и 'get_page_by_title'. Далее мы добавляем %postname% к базовому URL-адресу с помощью функции 'trailingslashit'. И, наконец, мы возвращаем новый URL-адрес, если пост является частью категории "новости", или исходный URL-адрес для всех остальных постов.

Убедитесь, что вы заменили 'новости' на название своей категории и 'Новости' на название своей базовой страницы новостей.

Надеюсь, это поможет! Если у вас возникнут еще вопросы, не стесняйтесь задавать их.


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