2017-03-14 10 views
0

私はこの機能を持って:修正str_replace関数内の文字列への変換未定義の変数や配列

// load styles asynchronously - Transform stylesheet markup to loadCSS compatible 
add_filter('style_loader_tag', 'style_transform_loadCSS', 10, 2); 

function style_transform_loadCSS($html, $handle) { 
    if ($handle == CHILD_THEME_NAME ) 

     $search = array("rel='stylesheet' id='$handle-css'", "type='text/css' media='all'"); 
     $replace = array("rel=\"preload\"", "as=\"style\" onload=\"this.rel='stylesheet'\""); 

    return str_replace($search, $replace, $html)."<noscript>{$html}</noscript>"; 

} 

It'sが動作しますが、デバッグしながら、私はこのエラーを参照してください。

Notice: Undefined variable: search in /home3/me/public_html/wp-content/themes/child/functions.php on line 362

Notice: Array to string conversion in /home3/me/public_html/wp-content/themes/child/functions.php on line 362

ライン362は、次のとおりです。

return str_replace($search, $replace, $html)."<noscript>{$html}</noscript>"; 

どうすればこの問題を解決できますか?

答えて

2

問題はいくつかの括弧がありません。あなたの例では、ステートメントは最初の次の行にのみ行き、これは$searchの変数です。ステートメントがfalseの場合、変数は定義されておらず、文字列を置き換える次の行に問題が発生します。

function style_transform_loadCSS($html, $handle) { 
    if ($handle == CHILD_THEME_NAME) { 
     $search = array("rel='stylesheet' id='$handle-css'", "type='text/css' media='all'"); 
     $replace = array("rel=\"preload\"", "as=\"style\" onload=\"this.rel='stylesheet'\""); 
     $html = str_replace($search, $replace, $html)."<noscript>{$html}</noscript>" 
    } 
    return $html; 
} 
+0

検索と置換の両方が 'if'ステートメント内で定義されています。これで2つのエラーが発生します。欠落したvarごとに1つのエラーが発生します。 –

+0

これは例です:)私はいくつかのコードを追加しました。 – Stony

+0

テーマが一致しない場合は、 '$ html'(str_replaceと同じになります)を返すとします。しかしそれはただの前提です。 –

関連する問題