Intereting Posts
неправильный URL-адрес почтового архива Internet Explorer не может отобразить веб-страницу Редактирование исходного кода в WordPress Ограничения при изменении wp_title с фильтром Удалить все удаленные страницы из WordPress Параметр "tax_query" не работает с WP_Query Как разместить изображения в моем блоге с заранее определенной границей слишком короткий вывод кода Добавить новый флажок в настройках темы Как настроить сущность (post-type?) Со многими зависимыми объектами (больше post-types?) Моя поисковая форма находит результаты страницы 1, но показывает «ошибка 404 страница не найдена» на страницах 2 или Эхо простая строка в плагине Фиксирование репозитория плагина не отображается в действии Масштабируемая настройка рамки Функциональность контроллера – если пользователь не выполнил вход в систему, отправьте их на определенную страницу (а не wp_login)

Контент против шаблона в пользовательской почте

Я просто написал пользовательский пост ( suppliers ) в качестве плагина (с мета-контентом), который отлично работает. Я также создал страницу шаблона ( single-suppliers.php ) в том же плагине для отображения данных. Я написал его таким образом, что, если кто-то так захочет, они могут создать свою собственную страницу single-suppliers.php в своем шаблоне и получить собственный внешний вид. (Для этого я использую фильтр template_include ).

Пример фильтра template_include.

 // Register a my Membership Template. function my_membership_include_template_function( $template_path ) { if ( get_post_type() == 'my_members' ) { if ( is_single() && is_main_query() ) { // Check if the file exists in the theme first, otherwise // serve the file from the plugin. if ( $theme_file = locate_template( array ( 'single-my_members.php' ) ) ) { $template_path = $theme_file; } else { $template_path = plugin_dir_path( __FILE__ ) . '/single-my_members.php'; } } } return $template_path; } add_filter( 'template_include', 'my_membership_include_template_function', 1 ); 

Пример single-my_members.php .

 <?php get_header(); ?> <h1>Test Header - Does not appear within the theme's "content" area.</h1> <?php get_sidebar(); get_footer(); 

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

Фактическое местоположение + Желаемое местоположение

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

Я не уверен, как наилучшим образом разрешить это, или если есть лучшая практика, которую я должен использовать. Если это помогает, я использую Genesis с дочерней темой, но я специально не хочу кодировать в Genesis hooks, поскольку это приведет к поражению цели общего плагина.

Вы не можете заменить половину шаблона с помощью фильтров и перехватов, если сам шаблон не поддерживает.

template_include переопределяет весь шаблон, это означает заголовок, тело, содержимое, боковую панель, нижний колонтитул и все такое.

Теперь у вас есть следующие возможности:

Стиль вашего шаблона

Создайте полный файл single-my_member.php а затем single-my_member.php его с помощью CSS и, вероятно, JS. Вы должны думать об этом как о полном шаблоне, а не о странице, чтобы отображать несколько строк контента.

Использовать preg_replace()

Не совсем хорошая идея, но вы можете сделать preg_replace() сочетании с буферизацией вывода и добавить контент в обычные места страницы, такие как <body> или <header> . Это может сильно замедлить ваш сайт и не всегда точно.

Предоставление коротких кодов

Если вы пытаетесь добавить ограниченный контент (а не полную структуру HTML) к шаблонам, то вы можете предоставить некоторые короткие коды для пользователей. Здесь очень рискованно смешивать шаблоны.