Вопрос или проблема
Мой сайт с изображениями настроен так, что посты не имеют заголовка и содержат только теги.
Я хотел бы узнать, как использовать все теги в настройках постоянных ссылок?
Чтобы использовать все теги в постоянной ссылке поста, попробуйте изменить мой аналогичный ответ на вопрос Как использовать первый тег в постоянных ссылках
-
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, вы можете воспользоваться пользовательским кодом, который добавляет новый тег-плейсхолдер. Ниже приведены подробные инструкции по этому процессу.
Шаги для использования всех тегов в постоянных ссылках:
-
Создайте новый плагин:
- Войдите в админку WordPress и перейдите в раздел "Плагины" -> "Добавить новый".
- Нажмите на "Создать плагин" или создайте новый файл PHP в каталоге
wp-content/plugins
.
-
Добавьте следующий код:
Скопируйте и вставьте следующий код в файл вашего плагина. Этот код добавляет новый плейсхолдер%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 ]; } }
-
Активируйте плагин:
- После добавления кода, перейдите в раздел "Плагины".
- Найдите ваш плагин "All Tags Permalink" и активируйте его.
-
Настройте постоянные ссылки:
- Перейдите в "Настройки" -> "Постоянные ссылки".
- В разделе "Настройки постоянных ссылок" добавьте ваш новый плейсхолдер
%tags%
в форматах постоянных ссылок, например:/%tags%/
.
-
Сохраните изменения:
- Нажмите на кнопку "Сохранить изменения", чтобы обновить настройки.
Теперь все ваши посты будут иметь постоянные ссылки, которые включают все теги, связанные с данными постами. Если у поста нет тегов, будет использоваться значение по умолчанию, заданное в коде.
Примечания:
- Убедитесь, что у каждого поста, для которого вы хотите создать ссылку, есть хотя бы один тег.
- Вы можете изменить строку
$default
на любое другое значение или оставить пустым, в зависимости от ваших предпочтений.
Таким образом, следуя этим шагам, вы успешно настроите использование всех тегов в своих постоянных ссылках.