add_permastruct()
Додає нову структуру ЧПК для постійних посилань.
Створює не одне правило, а дещо на основі однієї зазначеної пермаструктури, які правила створити визначається в параметрі $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() (предустановки)
Приклади
#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();
нотатки
- Дивіться: WP_Rewrite::add_permastruct()
- Global. WP_Rewrite. $wp_rewrite WordPress rewrite component.
список змін
З версії 3.0.0 | Введено. |
Код add_permastruct() 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 ); }