- 21, Oct 2024
- #1
Я создаю URL-адреса SEF для своего плагина. Логика такова: если на странице есть my_shortcode, то передайте остальную часть URL как параметр dir=
// if ($parent_page) { // if (preg_match('/\[my_shotrcode(.*?)\]/i', $content)) {
Этот код отлично работает на одной из моих установок WordPress и не работает на другой. У меня 404. Что на нем может быть не так?
P.s. правила перенаправления сброшены
add_action('init', array( $this, 'do_rewrite' ));
public function do_rewrite()
{
$page = get_page_by_path($_SERVER['REQUEST_URI']);
if (! isset($page->ID)) {
preg_match('#^/?(.*?)/(.+)/?$#', $_SERVER['REQUEST_URI'], $matches);
$parent_page = get_page_by_path($matches[1]);
if ($parent_page) {
$content = $parent_page->post_content;
if (preg_match('/\[my_shotrcode(.*?)\]/i', $content)) {
add_rewrite_rule('^/?(.*?)/(.+)/?$', 'index.php?pagename=$matches[1]&dir=$matches[2]', 'top');
add_rewrite_tag('%dir%', '([^&]+)');
}
}
}
}
ОБНОВЛЯТЬ:
Кто-нибудь может объяснить мне, что происходит? Я прокомментировал эти 2 if: