add_permastruct() WP 3.0.0

Додає нову структуру ЧПК для постійних посилань.

Створює не одне правило, а дещо на основі однієї зазначеної пермаструктури, які правила створити визначається в параметрі $args та тегах самої структури…

Пояснення

Структура постійних посилань – це абстрактне поняття і означає встановлення (визначення) правил того, як має виглядати ЧПУ (людина-зрозуміла УРЛ).

Ця функція дозволяє швидко створити групу правил (з регулярними виразами), які перезапишуть URL-адресу у внутрішні параметри запиту. Нові правила будуть додані до властивості WP_Rewrite::$extra_permastructs (масив).

Коли правила перезапису створюються функцією WP_Rewrite::generate_rewrite_rules() , яка в свою чергу перетворює їх на регулярні вирази і то який УРЛ повинен вийде, якщо запиту.

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

Пояснення ще раз, тобто.

Додана структура, наприклад, book/%book%розбирається і на основі неї додаються потрібні правила перезапису ЧПУ в налаштування ЧПУ (дивіться глобальну змінну $wp_query ).

Теги вказані в структурі, наприклад %book%, замінюються на відповідну частину регулярного виразу, яка вказується при реєстрації тега перезапису add_rewrite_tag() .

Якщо в структурі вказані невідомі теги, то вони не будуть замінені на групи регулярного вираження та залишаться у правилах перезапису як є. Наприклад, ЧПУ вийде наступний, якщо вказано незареєстрований тег %order_id% :

[order/%order_id%/?$] => index.php?%order_id%$matches[1]

Реєструвати тег (плейсхолдер) потрібно окремо за допомогою функції 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() (предустановки)

Приклади

0

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

Допустимо при реєстрації типу запису за допомогою register_post_type() у параметрі rewrite ми вказали false. І тепер ми хочемо вручну встановити ЧПУ для цього типу запису, тоді додамо такий код.

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

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

	$args = [
		'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_rewrite_tag( "%book%", '([^/]+)', "post_type=$post_type&name=" );
} );

Третій параметр add_permastruct() можна не вказувати, тоді аргументи будуть за замовчуванням.

Після встановлення коду потрібно скинути правила ЧПУ, для цього потрібно просто зберегтися в налаштуваннях постійних посилань в адмінці. Або запустити функцію flush_rewrite_rules() :

// Лише flush rewrite rules, якщо ваша permalink змінюється (eg on plugin activation):
flush_rewrite_rules();

нотатки

список змін

З версії 3.0.0Введено.

Код add_permastruct() WP 6.0.2

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 );
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *