Я пишу плагин, который создает пользовательский тип записи с именем "my_plugin_lesson":
$args = array (
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'lessons', 'with_front' => false)
);
register_post_type ('my_plugin_lesson', $args);
Пользовательский тип записи имеет архив, а URL-адрес архива:
http://example.com/lessons
Я хочу настроить внешний вид этого архива; Я хочу перечислить сообщения в табличном формате, а не в стандартном архиве сообщений блога WordPress. Я понимаю, что пользовательский шаблон архива может быть создан в теме путем создания archive-my_plugin_lesson.php
файла; Тем не менее, я хотел бы, чтобы плагин работал с любой темой.
Как я могу изменить содержимое страницы архива без добавления или изменения файлов темы?
Изменить:
я понимаю, что я мог бы использовать archive_template
фильтр крючок. Однако все, что это делает, это заменяет шаблон темы, который все еще должен быть специфичным для темы. Например, почти каждому шаблону темы потребуются функции get_header
, get_sidebar
и get_footer
, но каким должен быть идентификатор контента <div>
? Это отличается в каждой теме.
То, что я хотел бы сделать, это заменить сам контент своим собственным контентом и использовать его вместо страницы архива для моего пользовательского типа поста.
источник
Вы можете использовать
archive_template
ловушку для обработки содержимого архивного шаблона темы, используя схему ниже, но очевидно, что вы когда-либо сможете обработать только часть тем, учитывая, что шаблон может в основном содержать любую старую вещь. ,Схема состоит в том, чтобы загрузить шаблон в строку (
$tpl_str
) вarchive_template
фильтре, заменить ваш контент, включить строку (используя трюкeval( '?>' . $tpl_str );
), а затем вернуть пустой файл, чтобыinclude
в «wp-includes / template-loader.php» становится неоперативным.Ниже приведена взломанная версия кода, которую я использую в плагине, который нацелен на «классические» шаблоны, которые используют
get_template_part
и больше занимается обработкой отдельных шаблонов, чем архивом, но должен помочь вам начать работу. Настройка заключается в том, что плагин имеет подкаталог с именем «templates», в котором содержится пустой файл («null.php») и шаблоны содержимого (например, «content-single-posttype1.php», «content-archive-postype1.php»). а также запасной шаблон "single.php" для отдельного случая и использует пользовательскую версию,get_template_part
которая выглядит в этом каталоге.Обычай
get_template_part
:Для полноты вот запасной вариант "single.php", который использует кастом
get_template_part
:источник
Я размышлял над тем же вопросом, и вот гипотетическое решение, которое я нашел:
После активации плагина создайте страницу, используя wp_insert_post с именем, являющимся типом поста, а контентом - шорткодом.
Вы можете предоставить опции в шорткоде для дополнительных стилевых соображений или добавить классы в почтовый контейнер, чтобы соответствовать конкретным или пользовательским стилям темы. Пользователь также может добавить дополнительный контент до / после цикла, отредактировав страницу.
источник
Вы можете использовать фильтр
single_template
. Основной пример взят из Кодекса :источник
archive_template
, но я не думаю, что это сработает для того, что я пытаюсь сделать. Я отредактировал свой вопрос с дополнительной информацией.