Intereting Posts
Нежелательные или нежелательные файлы в папке uploads У меня проблема при использовании антиспамбота для других языков Custom Post Type – Главная страница для определенных сообщений Функция get_terms не возвращает ничего Использование WAMP, попытка создания плагина, получение ошибки: у вас нет достаточных разрешений для доступа к этой странице Удаляет ли WordPress Word свои значения базы данных? Как правильно передать значения в wpdb-> prepare ()? Почему мои плагины обновляются автоматически? Пользовательский короткий код с динамическим переписыванием Обновление групповой категории не обновляется Таксономия запросов по названию страницы 404 ошибок после обновления параметров плагина и изменения базовой категории Насколько хорошо масштабируется WordPress? добавление существующей страницы меню в новую роль пользователя пользователя Пользовательские поля не сохраняются в базе данных при добавлении новой страницы профиля пользователя

Шаблоны страниц из плагина не работают после обновления WP до 4.7 или верхней версии

Я работаю над плагином, который нам нужен для образования. Я добавил 3-4 шаблона страницы в свой плагин, чтобы мы могли звонить, когда активирован плагин.

До WordPress 4.7 он работал отлично; но поскольку я обновил WordPress до последней версии (из 4.6.3 ), шаблоны страниц даже не отображаются в разделе атрибутов страницы.

Вот код, который отлично работает со старыми версиями (до 4.7 ):

 add_action( 'wp_loaded', 'add_my_templates' ); function add_my_templates() { if( is_admin() ){ global $wp_object_cache; $current_theme = wp_get_theme(); $templates = $current_theme->get_page_templates(); $hash = md5( $current_theme->theme_root . '/'. $current_theme->stylesheet ); $templates = $wp_object_cache->get( 'page_templates-'. $hash, 'themes' ); $templates['templates/exams.php'] = __('Exams'); $templates['templates/colleges.php'] = __('Colleges'); $templates['templates/study_home.php'] = __('Study Home'); $templates['templates/study_job_home.php'] = __('Study Job Home'); wp_cache_replace( 'page_templates-'. $hash, $templates, 'themes' ); } else { add_filter( 'page_template', 'get_my_template', 1 ); } } function get_my_template( $template ) { $post = get_post(); $page_template = get_post_meta( $post->ID, '_wp_page_template', true ); if( $page_template == 'templates/study_home.php' ) { $template = plugin_dir_path(__FILE__) . "templates/study_home.php"; } if( $page_template == 'templates/study_job_home.php' ) { $template = plugin_dir_path(__FILE__) . "templates/study_job_home.php"; } if( $page_template == 'templates/exams.php' ) { $template = plugin_dir_path(__FILE__) . "templates/exams.php"; } if( $page_template == 'templates/colleges.php' ) { $template = plugin_dir_path(__FILE__) . "templates/colleges.php"; } return $template; } 

Я ищу решение за последние 2 дня, но не повезло!

Проблема:

Как уже указывал Марк , загрузка шаблона при манипулировании кешем далека от стандартной практики. При 4.7+ изменении кеша, даже если вы измените свой КОД для работы с WordPress 4.7+ , нет никакой гарантии, что вы не найдете подобных проблем в будущих обновлениях. Поэтому лучше используйте любое из решений, упомянутых ниже:

Тематическое решение:

Вместо того, чтобы назначать шаблоны из плагина, вы можете иметь фактические шаблоны страниц в активной теме. Активная тема – это рекомендуемое место для размещения этих шаблонов.

Плагин-решение

Однако, если вам нужно назначить эти шаблоны с вашим плагином по какой-либо причине, используйте для этого theme_page_templates . Он будет работать для WordPress 4.4+ .

Ниже приведена переписка с вашим CODE с помощью theme_page_templates фильтра:

 function get_my_template( $template ) { $post = get_post(); $page_template = get_post_meta( $post->ID, '_wp_page_template', true ); if( $page_template == 'templates/study_home.php' ){ return plugin_dir_path(__FILE__) . "templates/study_home.php"; } if( $page_template == 'templates/study_job_home.php' ){ return plugin_dir_path(__FILE__) . "templates/study_job_home.php"; } if( $page_template == 'templates/exams.php' ){ return plugin_dir_path(__FILE__) . "templates/exams.php"; } if( $page_template == 'templates/colleges.php' ){ return plugin_dir_path(__FILE__) . "templates/colleges.php"; } return $template; } function filter_admin_page_templates( $templates ) { $templates['templates/exams.php'] = __('Exams'); $templates['templates/colleges.php'] = __('Colleges'); $templates['templates/study_home.php'] = __('Study Home'); $templates['templates/study_job_home.php'] = __('Study Job Home'); return $templates; } function add_my_templates() { if( is_admin() ) { add_filter( 'theme_page_templates', 'filter_admin_page_templates' ); } else { add_filter( 'page_template', 'get_my_template', 1 ); } } add_action( 'wp_loaded', 'add_my_templates' ); 

Используйте приведенный выше код, а не код, который вы предоставили. Он будет работать для любого WordPress версии 4.4 и более поздних версий. Я тестировал его для WordPress 4.7.2 и он отлично работает.

Ваш код вставки кеширования выглядит очень странно и в зависимости от определенного способа ядро ​​вычисляет хэши для кеша и использует их. Вам нужно переписать эту часть кода (который я предполагаю добавить шаблоны виртуальных страниц), чтобы найти более надежный метод вставки или просто отказаться от него полностью (почему бы не просто создать фактические шаблоны страниц?)

В общем шаблоне страницы есть тема, и плагины не должны иметь ее, а вместо этого предоставлять короткие коды или другие способы позволить пользователям иметь страницы с их данными.