2015-02-04 3 views
0

У меня есть встроенный плагин Wordpress, который я унаследовал, который выплескивает часть кода и помещает таблицу стилей в зависимости от того, что пользователь указывает в своих настройках. Он работал нормально до нескольких дней назад, и теперь таблица стилей все еще попадает в очередь и загружается нормально, но html ($ identityWrapper и $ footerLogo) не загружаются на страницу. Это говорит мне, что это не ошибка разрешений на сервере, поскольку скрипт что-то делает. Я отредактировал некоторую идентифицирующую информацию, и я также оставил часть настроек, поскольку все, кажется, работает нормально.Wordpress Plugin Не выдает HTML

Я знаю, что это много кода, но я не хотел оставлять часть, которая может быть важной. Я потратил много времени, пытаясь понять это сам и узнал, что EOS - это «конец строки», но я не видел примеров использования этого в каких-либо других плагинах Wordpress ... Я думаю, что это может быть проблемой.

<?php 
    /** 
    * @package Branding Bar 
    * @version 1.0 
    */ 

    /* 
    Plugin Name: [Redacted] 
    Description: Uses output buffering to insert the branding bar after the body tag opens. 
    Version: 1.0 
    */ 

    add_action('wp_enqueue_scripts', array('BrandingBar', 'enqueue_stylesheet'), 10, 1); 
    add_action('wp_head', array('BrandingBar', 'echo_styles'), 1000, 1); 
    add_action('wp_footer', array('BrandingBar', 'add_real_logo'), 1000, 1); 

    // Start output buffering in wp_head and try to flush ASAP. It will be 
    // flushed when the request ends if, for some strange reason, no further 
    // actions are called. 
    add_action('wp_head', array('BrandingBar', 'start_output_buffering'), 10, 1); 
    add_action('get_search_form', array('BrandingBar', 'end_output_buffering'), 10, 1); 
    add_action('loop_start', array('BrandingBar', 'end_output_buffering'), 10, 1); 
    add_action('get_sidebar', array('BrandingBar', 'end_output_buffering'), 10, 1); 
    add_action('dynamic_sidebar', array('BrandingBar', 'end_output_buffering'), 10, 1); 
    add_action('wp_meta', array('BrandingBar', 'end_output_buffering'), 10, 1); 
    add_action('wp_footer', array('BrandingBar', 'end_output_buffering'), 10, 1); 

class BrandingBar 
{ 
    private static $styles = array(
    "body" => "background-position-y:60px", 
    "#footerLogo h1 a" => "background-size: 280px 30px", 
    "#footerLogo h2 a" => "background-size: 280px 15px", 
    ); 

    public static $identityWrapper =<<<EOS 
    <div id="IdentityWrapper"> 
     <header id="Identity"> 
      <hgroup> 
       <h1> 
        <a target="_blank" href="#">[Redacted]</a> 
       </h1> 
       <h2> 
        <a target="_blank" href="#">[Redacted]</a> 
       </h2> 
      </hgroup> 
     </header> 
    </div> 
    EOS; 

    public static $footerLogo =<<<EOS 
    <div id="footerLogo"> 
     <hgroup> 
      <h1> 
       <a target="_blank" href="#">[Redacted]</a> 
      </h1> 
      <h2> 
       <a target="_blank" href="#">[Redacted]</a> 
      </h2> 
     </hgroup> 
    </div> 
    EOS; 

public function enqueue_stylesheet() 
{ 
    $color = get_option('branding_bar_color', 'black'); 
    $format = get_option('branding_bar_format', 'responsive'); 
    wp_enqueue_style('BrandingCss', plugins_url("widgets/branding/$color/$format/css/branding-main-2.0.css", __FILE__)); 
} 

public function start_output_buffering() 
{ 
    ob_start(array(self, 'insert_branding_bar')); 
} 

public function insert_branding_bar($buffer) 
{ 
    return (preg_replace('/(<body[^>]+>)/', "$1\n".self::$identityWrapper, $buffer)); 
} 

function end_output_buffering() 
{ 
    $status = ob_get_status(); 
    if ($status['name'] === 'self::insert_branding_bar') { 
     ob_end_flush(); 
    } 
} 

function echo_styles() 
{ 
    echo "<style>\n"; 
    foreach (self::$styles as $selector => $declaration) { 
     printf("%s{%s}\n", $selector, $declaration); 
    } 
    echo "@media screen and (max-width: 767px) {"; 
     echo<<<EOS 
    #Identity h1 a { background-size: 99px 35px !important; } 
EOS; 
    echo "</style>\n"; 
} 

public function add_real_logo() 
{ 
    if ('responsive' === get_option('BrandingBarFormat', 'responsive'))  { 
     echo self::$footerLogo; 
    } 
} 
} 

ответ

0

Синтаксис вы видите:

$var =<<<EOS OR echo <<<EOS 
    ... 
EOS; 

является РНР heredoc syntax для строк.

Это хороший способ встраивания большой строки в ваш код, но для этого требуется очень специфический синтаксис.

Терминатор (EOS; в вашем случае), не может иметь пропущенных или конечных пробелов. Поэтому убедитесь, что E находится в столбце 1 вашего редактора и убедитесь, что между ; и концом строки нет пробелов.

Если в вашем редакторе есть опция «Непривязанные символы управления шоу», включите это. Это помогает при отладке heredocs. Хороший синтаксический маркер должен поймать недопустимый терминатор и показать остальную часть вашего кода как часть строки.

+0

Это определенно полезно знать, как это называется! Я проверил проблемы с пробелами и строкой, и они кажутся правильными. Теперь я думаю, что это проблема с установкой wordpress, поскольку плагин работает локально, но на сервере. – Moose

+0

Это может быть проблема с пробелами, если на вашем локальном сервере работает другая операционная система, чем ваша производственная среда ... – cpilko

+0

Я проверил разницу на примерах разработчика и производства кода плагина, и они точно такие же. .. Я в недоумении. Я не коснулся этого кода, и внезапно он не работает. Я отключил все другие плагины и переключился на тему 2013 по умолчанию, но до сих пор не повезло. странно. – Moose

0

Похоже, что какой-то код, который вы не предоставили, фактически вызывает вывод, вызывая эти функции (enqueue_stylesheet, start_output_buffering, end_output_buffering). Так что кажется, что этот код делает что-то другое по какой-то причине, мы не можем догадаться, посмотрев на это.