Вопрос или проблема
Я хочу показать iframe
в верхней части страницы определенного тега, поэтому, когда я использую is_tag('my_tag')
, я добавлю iframe
перед title
страницы.
Я пытался использовать этот код, чтобы показать iframe перед содержимым страницы, но он не сработал:
// Показать iFrame в начале страницы
function show_iframe($content) {
if ( is_tag('my_tag') ) {
$before="<iframe src=\"https://www.example.com\" sandbox=\"allow-scripts allow-same-origin\"></iframe>";
return $before . $content;
}
return $content;
}
add_filter('the_content', 'show_iframe');
Существует ли какой-либо хуки, которые выполняются перед выводом заголовка страницы? Или существует ли способ echo
HTML
кода перед выбранным div
на странице?
Во-первых, в терминах WordPress ‘содержимое’ не включает ‘заголовок’. (Также будьте осторожны с ‘заголовком’. Иногда это означает ‘заголовок над основным содержимым, и ниже навигации сайта и/или шапки’, а иногда это означает html-заголовок, который является текстовым элементом, который браузер показывает в верхней части окна или вкладки, в его истории и т.д. В данном случае, похоже, вы имеете в виду первое.
Во-вторых, в данном случае нет хука для изменения заголовка. Вместо этого измените шаблон. Вы можете беспокоиться о том, что вам придется изменять несколько файлов шаблонов, поскольку веб-страницы сайта будут выглядеть по-разному. К счастью, для единообразия верхняя часть разных видов веб-страниц обычно выглядит одинаково. Так что, скорее всего, вам нужно будет изменить header.php
или какую-то часть шаблона (вероятно, в template-parts/header
).
Используйте JavaScript в браузере. Вот решение с использованием jQuery. Обратите внимание, что детали зависят от характеристик темы, ваших тегов, желаемого URL iframe и т.д.
В functions.php
добавьте
add_action( 'wp_enqueue_scripts', 'my_theme_enqueue_scripts' );
function my_theme_enqueue_scripts() {
wp_enqueue_script('title-tweak',
get_stylesheet_directory_uri() . '/js/title-tweak.js',
array('jquery'));
}
и создайте файл (в вашей теме) js/title-tweak.js
, содержащий
(function( $ ) {
$(document).ready(
function(){
if ($("body").hasClass("tag-my_tag")) {
$(".page-title").before ('<iframe src="http://www.gravatar.com/avatar"></iframe>');
}
} );
})(jQuery);
Дополнение
Я сделал это немного более сложным способом, потому что в какой-то момент простой способ не сработал. Но (по крайней мере, в моем браузере) это теперь работает.
(function( $ ) {
$(document).ready(
function(){
$(".body.tag-my_tag page-title").before ('<iframe src="http://www.gravatar.com/avatar"></iframe>');
} );
})(jQuery);
Это действительно будет зависеть от вашей темы.
Если ваша тема использует основную функцию the_archive_title() для отображения заголовка тега, вы можете подключиться к фильтру get_the_archive_title, чтобы изменить вывод.
Пример:
add_filter( 'get_the_archive_title', function( $title ) {
if ( is_tag('my_tag') ) {
return '<iframe src="https://www.example.com" sandbox="allow-scripts allow-same-origin"></iframe>' . $title;
}
return $title;
} );
Если ваша тема не использует эту основную функцию для заголовка, вам нужно будет поделиться темой, которую вы используете (если она бесплатная), чтобы мы могли взглянуть на нее и увидеть, как она закодирована. Или вам придется обратиться к разработчику темы, если это премиум тема.
Ответ или решение
Чтобы разместить iframe
перед заголовком страницы тегов в WordPress, можно использовать несколько различных подходов. Все зависит от того, как ваша тема обрабатывает заголовки. Рассмотрим несколько вариантов решения этой задачи.
1. Использование фильтра get_the_archive_title
Если ваша тема использует стандартную функцию the_archive_title()
для отображения заголовка, вы можете воспользоваться фильтром get_the_archive_title
. Пример кода для добавления в файл functions.php
вашей темы:
add_filter('get_the_archive_title', function($title) {
if (is_tag('my_tag')) {
return '<iframe src="https://www.example.com" sandbox="allow-scripts allow-same-origin"></iframe>' . $title;
}
return $title;
});
Этот код добавит iframe
перед заголовком страницы, когда выставлен тег my_tag
.
2. Изменение шаблона
Если ваша тема не использует функцию the_archive_title
, вам, возможно, потребуется изменить шаблон страницы. Обычно это делается в файле header.php
или в файлах шаблона, которые отвечают за вывод заголовка. Вставьте следующий код перед выводом заголовка:
if (is_tag('my_tag')) {
echo '<iframe src="https://www.example.com" sandbox="allow-scripts allow-same-origin"></iframe>';
}
the_archive_title('<h1 class="page-title">', '</h1>');
Этот код проверит, является ли текущая страница страницей с тегом my_tag
, и, если это так, выведет iframe
перед заголовком.
3. Использование JavaScript/jQuery
Если вы хотите использовать JavaScript, то можно добавить jQuery-скрипт, который будет вставлять iframe
перед заголовком. Для этого добавьте в файл functions.php
следующее:
add_action('wp_enqueue_scripts', 'my_theme_enqueue_scripts');
function my_theme_enqueue_scripts() {
wp_enqueue_script('title-tweak', get_stylesheet_directory_uri() . '/js/title-tweak.js', array('jquery'));
}
Создайте файл js/title-tweak.js
в вашей теме и добавьте следующий код:
(function($) {
$(document).ready(function() {
if ($("body").hasClass("tag-my_tag")) {
$(".page-title").before('<iframe src="https://www.example.com" sandbox="allow-scripts allow-same-origin"></iframe>');
}
});
})(jQuery);
Этот код будет проверять наличие класса tag-my_tag
у body
и вставлять iframe
перед элементом с классом page-title
.
Заключение
Выбор способа зависит от того, как именно ваша тема построена. Если у вас не получается реализовать один из указанных подходов, напишите, какая тема у вас используется, и мы сможем рассмотреть дополнительные решения.