Как использовать все теги в постоянных ссылках постов

Вопрос или проблема

Мой сайт с изображениями настроен так, что посты не имеют заголовка и содержат только теги.

Я хотел бы узнать, как использовать все теги в настройках постоянных ссылок?

Чтобы использовать все теги в постоянной ссылке поста, попробуйте изменить мой аналогичный ответ на вопрос Как использовать первый тег в постоянных ссылках

  • add_rewrite_tag( $tag, $regex ) добавляет новый временный маркер, который вы можете использовать в Настройки/Постоянные ссылки.

  • Фильтр на post_link преобразует временный маркер во что-то полезное, а именно в список всех слуг тегов, разделённых -.

  • Настройте статические переменные $default и $placeholder в соответствии с вашими потребностями.

  • Затем установите и активируйте код в виде плагина, перейдите в Настройки/Постоянные ссылки и используйте новый временный маркер следующим образом:

    введите описание изображения здесь

add_action( 'init', array ( 'T5_All_Tags_Permalink', 'init' ) );

/**
 * Добавляет '%tag%' как временный маркер (placeholder) для постоянных ссылок.
 */
class T5_All_Tags_Permalink
{
    /**
     * Что использовать, когда нет тега.
     *
     * @var string
     */
    protected static $default="tag";

    /**
     * Используется в Настройки/Постоянные ссылки
     *
     * @var string
     */
    protected static $placeholder="%tags%";

    /**
     * Добавляет тег и регистрирует фильтр 'post_link'.
     *
     * @wp-hook init
     * @return  void
     */
    public static function init()
    {
        add_rewrite_tag( self::$placeholder, '([^/]+)' );
        add_filter( 'post_link', array( __CLASS__, 'filter_post_link' ) , 10, 2 );
    }

    /**
     * Разбирает ссылку на пост и заменяет временный маркер.
     *
     * @wp-hook post_link
     * @param   string $link
     * @param   object $post
     * @return  string
     */
    public static function filter_post_link( $link, $post )
    {
        static $cache = array (); // Не повторяйте себя.

        if ( isset ( $cache[ $post->ID ] ) )
            return $cache[ $post->ID ];

        if ( FALSE === strpos( $link, self::$placeholder ) )
        {
            $cache[ $post->ID ] = $link;
            return $link;
        }

        $tags = get_the_tags( $post->ID );

        if ( ! $tags )
        {
            $cache[ $post->ID ] = str_replace( self::$placeholder, self::$default, $link );
            return $cache[ $post->ID ];
        }

        $slugs = wp_list_pluck( $tags, 'slug' );
        $cache[ $post->ID ] = str_replace( self::$placeholder, join( '-', $slugs ), $link );

        return $cache[ $post->ID ];
    }
}

Ответ или решение

Чтобы использовать все теги в permalink (постоянных ссылках) на вашем сайте WordPress, вы можете воспользоваться пользовательским кодом, который добавляет новый тег-плейсхолдер. Ниже приведены подробные инструкции по этому процессу.

Шаги для использования всех тегов в постоянных ссылках:

  1. Создайте новый плагин:

    • Войдите в админку WordPress и перейдите в раздел "Плагины" -> "Добавить новый".
    • Нажмите на "Создать плагин" или создайте новый файл PHP в каталоге wp-content/plugins.
  2. Добавьте следующий код:
    Скопируйте и вставьте следующий код в файл вашего плагина. Этот код добавляет новый плейсхолдер %tags% в настройки постоянных ссылок и заменяет его списком всех тегов, разделенных дефисами.

    <?php
    /*
    Plugin Name: All Tags Permalink
    Description: Использует все теги в постоянных ссылках постов.
    Author: Ваше имя
    Version: 1.0
    */
    
    add_action( 'init', array( 'T5_All_Tags_Permalink', 'init' ) );
    
    class T5_All_Tags_Permalink {
       protected static $default = "tag"; // Значение по умолчанию, если нет тегов
       protected static $placeholder = "%tags%"; // Плейсхолдер для тегов
    
       public static function init() {
           add_rewrite_tag( self::$placeholder, '([^/]+)' );
           add_filter( 'post_link', array( __CLASS__, 'filter_post_link' ), 10, 2 );
       }
    
       public static function filter_post_link( $link, $post ) {
           static $cache = array(); // Кэш для избежания повторного выполнения
    
           if ( isset( $cache[ $post->ID ] ) )
               return $cache[ $post->ID ];
    
           if ( FALSE === strpos( $link, self::$placeholder ) ) {
               $cache[ $post->ID ] = $link;
               return $link;
           }
    
           $tags = get_the_tags( $post->ID );
    
           if ( ! $tags ) {
               $cache[ $post->ID ] = str_replace( self::$placeholder, self::$default, $link );
               return $cache[ $post->ID ];
           }
    
           $slugs = wp_list_pluck( $tags, 'slug' );
           $cache[ $post->ID ] = str_replace( self::$placeholder, join( '-', $slugs ), $link );
    
           return $cache[ $post->ID ];
       }
    }
  3. Активируйте плагин:

    • После добавления кода, перейдите в раздел "Плагины".
    • Найдите ваш плагин "All Tags Permalink" и активируйте его.
  4. Настройте постоянные ссылки:

    • Перейдите в "Настройки" -> "Постоянные ссылки".
    • В разделе "Настройки постоянных ссылок" добавьте ваш новый плейсхолдер %tags% в форматах постоянных ссылок, например: /%tags%/.
  5. Сохраните изменения:

    • Нажмите на кнопку "Сохранить изменения", чтобы обновить настройки.

Теперь все ваши посты будут иметь постоянные ссылки, которые включают все теги, связанные с данными постами. Если у поста нет тегов, будет использоваться значение по умолчанию, заданное в коде.

Примечания:

  • Убедитесь, что у каждого поста, для которого вы хотите создать ссылку, есть хотя бы один тег.
  • Вы можете изменить строку $default на любое другое значение или оставить пустым, в зависимости от ваших предпочтений.

Таким образом, следуя этим шагам, вы успешно настроите использование всех тегов в своих постоянных ссылках.

Оцените материал
Добавить комментарий

Капча загружается...