Я разрабатываю свой первый по-настоящему большой плагин для WordPress, и пока почти все идет гладко.Единственное, что у меня есть, - это затруднение подделки текущего поста, чтобы макет пользователя продолжал работать нормально.Позвольте мне объяснить.
Я использую стратегию структуры постоянных ссылок книги Wrox Profesionnal Wordpress Plugin Development.Для этого я делаю следующее:
//Used to detect when the plugin gets actuvated
public function pluginActivatedAction(){
//Send commands to install the rewrite rules
add_rewrite_tag('%sgmpage%', '([^/]+)');
add_permastruct('sgmpage', 'sgm/%sgmpage%');
flush_rewrite_rules();
}
И, таким образом, мой плагин отвечает на все / sgm / ** URL.И это хорошо, потому что я хочу иметь возможность сделать несколько странных переписываний URL, чтобы получить что-то хорошее.Проблема заключается в том, что при использовании этого метода WordPress не может сказать, под какой страницей он находится, и это портит компоновку, сделанную интегратором, такую как изображение заголовка, активный пункт меню, боковая панель.
Я пытался подключитьна несколько хуков без успеха, таких как:
- wp (глобальный $ post и переопределить его)
- pre_post_selection (и изменить запрос)
- template_redirect (global $ postи переопределить его)
И ничего не меняется ... Шаблон использует The_Id () в качестве функции для получения идентификатора текущего сообщения, который эффективно использует $ post-> id (я думаю, закрытоисточник), но либо есть что-то, что переопределяет $ post ПОСЛЕ того, как я его изменил, либо моя техника не работает должным образом.
Так что мой вопрос, можете ли вы перехватить или переопределить в любом случае текущий пост, соответствующий URL-адресуиспользуя технику "add_rewrite_tag" ... Я хотел бы сделать что-то вроде этого:
global $post;
$post_id = 440; //Or get_option() later obviously
$post = get_post($post_id);
Но это не работает.
Спасибо за вашу помощь ...
ОБНОВЛЕНИЕ
//Used to detect when the plugin gets actuvated
public function pluginActivatedAction(){
//Send commands to install the rewrite rules
add_rewrite_rule('sgm(/(([a-z0-9]+)(/([a-z]+)/?)?)?)', 'index.php?p=440&sgmevent=$matches[3]&sgmpage=$matches[5]');
flush_rewrite_rules();
}
Я удалил все остальное и просто добавил правило перезаписи, чтобы запустить p = 440, все по-прежнему работает нормально, за исключением того, что переменная P-запроса, кажется, не существует, что-то говорит мне, что переписать не работает.Я вставил ту же самую вещь и в мой переписчик, и в функцию активации, и я деактивировал / активировал свой плагин.