WordPress как на ладони
Наставник Трепачёв Д.П., phphtml.net wordpress jino

add_permastruct() WP 3.0.0

Добавляет новую структуру ЧПУ для постоянных ссылок.

Объяснение.

Структура постоянных ссылок - это абстрактное понятие и означает установку (определение) правил того, как должна выглядеть ЧПУ (человеко-понятная УРЛ).

add_permastruct() дает возможность быстро создать группу правил с регулярными выражениями которые разберут и перезапишут URL во внутренние параметры запроса. Новые правила будут добавленные массив WP_Rewrite::$extra_permastructs.

Когда правила перезаписи создаются функцией WP_Rewrite::rewrite_rules(), все эти новые пермаструктуры передаются в функцию WP_Rewrite::generate_rewrite_rules(), которая в свою очередь изменяет их в регулярные выражения.

Параметр $args дает возможность контролировать как WP_Rewrite::generate_rewrite_rules() будет преобразовывать новую пермаструктуру.

Объяснение еще раз, другими словами.

Добавленная структура, например, kniga/%book% разбирается и на основе нее добавляются нужные правила перезаписи ЧПУ в настройки ЧПУ (смотрите глобальную переменную $wp_query). Теги указанные в структуре, например %book%, заменяются на соответствующую часть регулярного выражения, которая указывается при регистрации тега перезаписи в add_rewrite_tag(). add_permastruct() создает не одно правило, а несколько на основе одной указанной пермаструктуры, какие правила создать определяется в параметре $args...

Обычно используется в связке с функциями: add_rewrite_tag() и add_rewrite_rule()

Работает на основе метода WP_Rewrite::add_permastruct( $name, $struct, $args )

Работает на основе: WP_Rewrite()

Хуков нет.

Возвращает

null. Ничего.

Использование

add_permastruct( $name, $struct, $args );
$name(строка) (обязательный)
Название структуры ЧПУ.
$struct(строка) (обязательный)
Сама структура ЧПУ.
$args(массив)

Параметры построения ссылки из указанной структуры. Подробнее смотрите: WP_Rewrite::add_permastruct(). Возможные элементы массива:

  • with_front (логический)
    Нужно ли предварять структуру параметром WP_Rewrite::$front.
    По умолчанию true.

  • ep_mask (число)
    Конечная точка в структуре. Может быть: EP_NONE, EP_PERMALINK, EP_ATTACHMENT, EP_DATE, EP_YEAR, EP_MONTH, EP_DAY, EP_ROOT, EP_COMMENTS, EP_SEARCH, EP_CATEGORIES, EP_TAGS, EP_AUTHORS, EP_PAGES, EP_ALL_ARCHIVES, и EP_ALL.
    По умолчанию EP_NONE.

  • paged (логический)
    Нужно ли добавлять регулярки для страниц пагинации?
    По умолчанию true.

  • feed (логический)
    Нужно ли добавлять регулярки для страниц фидов?
    По умолчанию true.

  • forcomments (логический)
    Сделать ссылку фидов как запрос на фид комментариев
    По умолчанию false.

  • walk_dirs (логический)
    Если указать true, то правило перезаписи будет создано для каждой директории указанной в структуре. Например, если структура указана как /%year%/%month%/%day/, то правила будут созданы для директорий: /%year%/, /%year%/%month%/ и /%year%/%month%/%day%/.
    По умолчанию true.

  • endpoints (логический)
    Нужно ли добавлять конечные точки в конец правил перезаписи ЧПУ?
    По умолчанию true.

По умолчанию указываются следующие параметры:

$defaults = array(
	'with_front' => true,
	'ep_mask' => EP_NONE,
	'paged' => true,
	'feed' => true,
	'forcomments' => false,
	'walk_dirs' => true,
	'endpoints' => true,
);

По умолчанию: array() (предустановки)

Примеры

#1 Структура ЧПУ для произвольного типа записи book

Допустим при регистрации типа записи с помощью register_post_type() в параметре rewrite мы указали false. И теперь мы хотим вручную установить ЧПУ для этого типа записи, тогда добавим такой код.

add_action('init', function(){
	$post_type = 'book';

	// добавим тег перезаписи, чтобы add_permastruct() его поняла
	// он потом будет заменен на часть регулярки указанной во втором параметре
	add_rewrite_tag( "%book%", '([^/]+)', "post_type=$post_type&name=" );

	$permastruct = "kniga/%book%"; // наша структура ЧПУ

	$args = array(
		'with_front'  => true,
		'paged'       => true,
		'ep_mask'     => EP_NONE,
		'feed'        => false,
		'forcomments' => false,
		'walk_dirs'   => false,
		'endpoints'   => false,
	);

	add_permastruct( $post_type, $permastruct, $args );
});

// третий параметр в add_permastruct() можно не указывать, тогда аргументы будут по умолчанию

После установки кода, нужно сбросить правила ЧПУ, для этого нужно просто сохраниться в настройках постоянных ссылок в админке.

Код add permastruct: wp-includes/rewrite.php WP 4.8.1

<?php
function add_permastruct( $name, $struct, $args = array() ) {
	global $wp_rewrite;

	// Back-compat for the old parameters: $with_front and $ep_mask.
	if ( ! is_array( $args ) )
		$args = array( 'with_front' => $args );
	if ( func_num_args() == 4 )
		$args['ep_mask'] = func_get_arg( 3 );

	$wp_rewrite->add_permastruct( $name, $struct, $args );
}

Cвязанные функции

Из метки: Rewrite (ЧПУ перезапись)

add_permastruct 3 комментария
  • Денис

    Здравствуйте! У меня для структуры

    $permastruct = '/persons/%post_id%'

    генерируется на постах типа 'persons' пермалинк www.example.com/persons/%post_id%. Никак не могу разобраться что не так...sorry

    Ответитьгод назад #
    • Алексей

      Поддерживаю вопрос.
      Тоже интересно как делать, хочется сделать структуру с ID.

      Ответитьгод назад #
      • Kama4477

        Код того как создается тип записи приложите...

        Ответитьгод назад #

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

Ваш комментарий