wp_head загружается в тег body в WordPress

#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 , он работает нормально