#php #wordpress
#php #wordpress
Вопрос:
У меня есть сайт WordPress, и сегодня утром я заметил, что wp_head()
выводит содержимое в body
тег.
Вот код header.php
<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>">
<meta name="viewport" content="width=device-width">
<title><?php wp_title( '|', true, 'right' ); ?></title>
<link rel="profile" href="http://gmpg.org/xfn/11">
<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>">
<script>(function() {
var _fbq = window._fbq || (window._fbq = []);
if (!_fbq.loaded) {
var fbds = document.createElement('script');
fbds.async = true;
fbds.src = '//connect.facebook.net/en_US/fbds.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(fbds, s);
_fbq.loaded = true;
}
_fbq.push(['addPixelId', 'xxx']);
})();
window._fbq = window._fbq || [];
window._fbq.push(['track', 'PixelInitialized', {}]);
</script>
<noscript><img height="1" width="1" alt="" style="display:none" src="https://www.facebook.com/tr?id=xxxamp;amp;ev=NoScript" /></noscript>
<script type="text/javascript">
/* <![CDATA[ */
var google_conversion_id = xxxx;
var google_custom_params = window.google_tag_params;
var google_remarketing_only = true;
/* ]]> */
</script>
<script type="text/javascript" src="//www.googleadservices.com/pagead/conversion.js">
</script>
<noscript>
<div style="display:inline;">
<img height="1" width="1" style="border-style:none;" alt="" src="//googleads.g.doubleclick.net/pagead/viewthroughconversion/xxxx/?value=0amp;amp;guid=ONamp;amp;script=0"/>
</div>
</noscript>
<?php wp_head(); ?>
</head>
<body <?php body_class(); ?>>
<div id="page" class="hfeed site">
<?php do_action( 'before' ); ?>
<header id="masthead" class="site-header" role="banner">
<div class="container">
<div class="row">
<div class="site-branding col-sm-4">
<h1 class="site-title"><a href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"><img src="<?php echo home_url(); ?>/wp-content/uploads/2014/06/Logo-nov-.png" alt="<?php bloginfo( 'name' ); ?>"/></a></h1>
</div>
<div class="col-sm-8 mainmenu">
<div class="mobilenavi"></div>
<?php wp_nav_menu( array( 'container_id' => 'submenu', 'theme_location' => 'primary','container_class' => 'topmenu','menu_id'=>'topmenu' ,'menu_class'=>'sfmenu' ) ); ?>
</div>
</div> <!-- end row -->
</div>
</header><!-- #masthead -->
<?php if( is_page_template('homepage.php') ){ get_template_part( 'inc/feature' ); } ?>
<div id="content" class="site-content ">
Я пытался удалить теги ремаркетинга, но безрезультатно. Также я попытался отключить все плагины, и все равно безрезультатно
Комментарии:
1. Откуда вы знаете, что wp_head() выводит содержимое в тело? (Я бы также заподозрил, что это немного
<noscript>
связано сimg
in it: я бы сказал, вы бы не хотели этого в a<head>
… Это может привести к тому, что браузер реструктурирует DOM в памяти, чтобы в итоге не было недопустимого элемента вhead
. Кажется вероятным, что код Facebook, то есть как скрипт, так и без скрипта, был написан для размещения в теле, вероятно, непосредственно перед закрытием</body>
.)2. есть ли какие-либо проблемы или ошибки, с которыми вы столкнулись после этого
3. Я пытался удалить код перенацеливания с
noscript
помощью тега, но это не имеет значения. Также я знаю, что этоwp_head
потому, что все после последнегоnoscript
тега переходит вbody
4. Это может не означать, что проблема вызвана wp_head. Браузер попытается изменить недопустимый HTML, чтобы сделать его допустимым в памяти. Итак, по сути, когда он впервые обнаруживает недопустимый элемент
head
, напримерimg
, элемент, он закроетhead
и запуститbody
вместо этого. Так что возможно, что это что-то перед wp_head, вызывающее проблему. Вам нужно проверить фактический вывод HTML на наличие ошибок, а не смотреть на PHP, чтобы выяснить, что вызывает проблему. Попробуйте запустить сайт через validator.w3.org и, глядя на первые несколько проблем, которые он обнаруживает, тоже.5. (И имейте в виду, что я имею в виду, что вы, вероятно, просматриваете источник страницы с помощью инспектора браузера, который показывает вам DOM в памяти после того, как браузер исправил его, а не истинный источник страницы, который, вероятно, будет в другом порядке. Например, в Chrome сравните разницу между использованием веб-инспектора и View-> Developer-> View Page Source, который покажет вам фактический выходной код до его обработки браузером.)
Ответ №1:
Итак, согласно комментарию Мэтта Гибсона, я нашел решение. Не идеальное, но это решение, которое работает.
Я продвинулся wp_head()
вверх, сразу после <link rel="pingback">...
того, как ant теперь работает.
Комментарии:
1. Но это не указывает на виновника … который, я полагаю, был бы одним из сценариев…
2. На самом деле это часто вызываемый плагин
Social Sharing Toolkit
. Когда я переключаю его, напримерTweet like plusone
, он работает нормально