Intereting Posts
Форма поиска WordPress Issue | Ошибка ввода URL-адреса. | Указание на неправильный URL Как назначить функции пользователю НЕ роли пользователя Список категорий для пользовательского типа сообщения Планирование сообщений для обновления один раз в день с помощью wp_cron Как преобразовать все временные метки php custom_field в базу данных в js timestamps? Как публиковать новый пост и таксономический термин с одинаковым названием вместе? Детская тема показывает пустую страницу Как добавить атрибут HTML5 'required' к wp_dropdown_categories () без JavaScripts? Admin: глобальный $ post empty Постоянная ссылка на пользовательский тип сообщения / пользовательскую таксономию. Застрял с 404 в одном посте Как я могу автоматически создавать сообщения подкастов из содержимого конкретного каталога? Поверните фрагмент HTML и PHP в короткий код Как отображать дочерние страницы в ограниченном детском контенте? Есть ли способ добавить FLV видео в player.js в WordPress? Откуда текст заголовка может быть изменен в пользовательском заголовке WordPress?

Какова самая ранняя точка, с которой я могу получить идентификатор запрашиваемого объекта?

Я пишу дополнительный плагин для WordPress Mobile Pack, потому что я хотел бы использовать тему по умолчанию на страницах, которым назначен определенный шаблон страницы. Мой плагин будет иметь дело только с частью мобильного коммутатора этого плагина, поэтому другие компоненты могут быть проигнорированы (я думаю).

Глядя на источник для wpmp_switcher.php , все вызовы add_action и add_filter релевантности не находятся в функции – они выполняются, когда файл включен как таковой:

 add_action('init', 'wpmp_switcher_init'); add_action('admin_menu', 'wpmp_switcher_admin_menu'); add_action('wp_footer', 'wpmp_switcher_wp_footer'); add_filter('stylesheet', 'wpmp_switcher_stylesheet'); add_filter('template', 'wpmp_switcher_template'); add_filter('option_home', 'wpmp_switcher_option_home_siteurl'); add_filter('option_siteurl', 'wpmp_switcher_option_home_siteurl'); 

Я удалил действия / фильтры, связанные с тем, что делает плагин WPMP тикающим с помощью plugins_loaded hook:

 function remove_all_wpmp_switchers() { remove_action('init', 'wpmp_switcher_init'); remove_action('admin_menu', 'wpmp_switcher_admin_menu'); remove_action('wp_footer', 'wpmp_switcher_wp_footer'); remove_filter('stylesheet', 'wpmp_switcher_stylesheet'); remove_filter('template', 'wpmp_switcher_template'); remove_filter('option_home', 'wpmp_switcher_option_home_siteurl'); remove_filter('option_siteurl', 'wpmp_switcher_option_home_siteurl'); } add_action('plugins_loaded', 'remove_all_wpmp_switchers'); 

Все идет нормально.

Теперь я хотел бы использовать следующий код для добавления действий / фильтров, когда мой шаблон не используется:

 function wpmp_switcher_exclusions_init(WP_Query $wp_query) { $template_file_name = get_post_meta($wp_query->get_queried_object_id(), '_wp_page_template', true); if ($template_file_name != 'my-responsive-template.php') { wpmp_switcher_init(); add_action('admin_menu', 'wpmp_switcher_admin_menu'); add_action('wp_footer', 'wpmp_switcher_wp_footer'); add_filter('stylesheet', 'wpmp_switcher_stylesheet'); add_filter('template', 'wpmp_switcher_template'); add_filter('option_home', 'wpmp_switcher_option_home_siteurl'); add_filter('option_siteurl', 'wpmp_switcher_option_home_siteurl'); } } add_action('parse_query', 'wpmp_switcher_exclusions_init'); 

Проблема заключается в том, что даже уже с помощью parse_query hook функция wpmp_switcher_init называется слишком поздней. Файлы functions.php для рабочего стола и мобильных шаблонов пытаются загрузить, что приводит к фатальным ошибкам из-за переопределенных функций.

Если шаблон можно получить раньше, чем это, я не уверен, как это сделать. Похоже, мне нужно каким-то образом запустить мой код с помощью setup_theme . Если я смогу понять, как это сделать, мне, вероятно, понадобится только одна функция в моем плагине, так как setup_theme вызывается перед init .

Любая помощь с этим ОЧЕНЬ высоко ценится!

Solutions Collecting From Web of "Какова самая ранняя точка, с которой я могу получить идентификатор запрашиваемого объекта?"

Более компактный и способ WordPress-ish, используя url_to_postid() :

 function wpmp_switcher_exclusions_init() { $pid = url_to_postid( home_url( add_query_arg( array() ) ) ); if ( (int) $pid > 0 && get_post_meta( $pid, '_wp_page_template', TRUE ) === 'my-responsive-template.php' ) { remove_action('init', 'wpmp_switcher_init'); remove_action('admin_menu', 'wpmp_switcher_admin_menu'); remove_action('wp_footer', 'wpmp_switcher_wp_footer'); remove_filter('stylesheet', 'wpmp_switcher_stylesheet'); remove_filter('template', 'wpmp_switcher_template'); remove_filter('option_home', 'wpmp_switcher_option_home_siteurl'); remove_filter('option_siteurl', 'wpmp_switcher_option_home_siteurl'); } } add_action( 'setup_theme', 'wpmp_switcher_exclusions_init' ); 

Я нашел ответ на StackOverflow (как насчет этого?). В принципе, мой код выглядит следующим образом:

 function wpmp_switcher_exclusions_init() { // Try to get post slug from the URL since the global $post object isn't available this early $post = get_page_by_path($_SERVER['REQUEST_URI'], OBJECT, 'page' ); if (!$post) $post = get_page_by_path(untrailingslashit($_SERVER['REQUEST_URI']), OBJECT, 'page' ); if (!$post) $post = get_page_by_path(substr(untrailingslashit($_SERVER['REQUEST_URI']),1), OBJECT, 'page' ); if (!$post) return; $template_file_name = get_post_meta($post->ID, '_wp_page_template', true ); if ($template_file_name == 'my-responsive-template.php') { remove_action('init', 'wpmp_switcher_init'); remove_action('admin_menu', 'wpmp_switcher_admin_menu'); remove_action('wp_footer', 'wpmp_switcher_wp_footer'); remove_filter('stylesheet', 'wpmp_switcher_stylesheet'); remove_filter('template', 'wpmp_switcher_template'); remove_filter('option_home', 'wpmp_switcher_option_home_siteurl'); remove_filter('option_siteurl', 'wpmp_switcher_option_home_siteurl'); } } add_action('setup_theme', 'wpmp_switcher_exclusions_init'); 

Надеюсь, это поможет кому-то еще!