0

WordPressショートコードにPHPを使用してJavaScriptを出力しています。私のphpは次のようになります:

$output="<script type='text/javascript' >
jQuery(document).ready(function() {
    jQuery('#photo{$photo_id}').on('click', function(){ 
      Shadowbox.open({
        content: '<div id=\'popup{$photo_id}\' class=\'popup\'>{$content}</div>',
        player:     'html',
        height:     500,
        width:      1200,
        handleOversize: 'drag'
        }); 
    });
});       
</script>";

return $output;

ただし、出力には、Shadowbox の content 引数の最初の引用符の後に改行があります。

このような:

jQuery(document).ready(function() {
    jQuery('#stylistphoto1').on('click', function(){    
      Shadowbox.open({
        content: '
<div> id=\'popup1\' class=\'popup\'> . . .

これにより、「未終了の文字列リテラル」エラーが発生し、スクリプトが失敗します。

何が起こっている?

注: これは BOM なしの UTF-8 でエンコードされています。b. これはある時点で機能しました。c. content 引数として空の文字列を渡すと問題なく動作しますが、もちろん、これはまったく役に立ちません。

4

3 に答える 3

0

まず第一に、php 変数で javascript 機能を定義してからどこかにエコーすることはありません。これは非常に悪い習慣です。

ここでの問題は、スタイリング上の何かがその行がかなり長いために改行されていることかもしれません. これを修正するためにできることは、次のことです。

$output="<script type='text/javascript' >
jQuery(document).ready(function() {
    jQuery('#photo{$photo_id}').on('click', function(){ 
      Shadowbox.open({
        content: '<div id=\'popup{$photo_id}\' ' +
                 'class=\'popup\'>{$content}</div>',
        player:     'html',
        height:     500,
        width:      1200,
        handleOversize: 'drag'
        }); 
    });
});       
</script>";

return $output;
于 2012-08-21T23:10:40.173 に答える
0

content: '<div id=\'popup{$photo_id}\' class=\'popup\'>{$content}</div>'パラメータの値contentが として解釈されているため、これは問題のよう'<div id=\'です。次の引用符で停止します。お使いのバージョンの PHP がこれを好まない場合 (一見したように)、変数のこの部分を連結して分離する必要があります。

    $output="<script type='text/javascript' >
jQuery(document).ready(function() {
    jQuery('#photo{$photo_id}').on('click', function(){ 
      Shadowbox.open({";

$output .= "
        content: '<div id=\"popup{$photo_id}\" class=\"popup\">{$content}</div>,'";

$output .= "
        player:     'html',
        height:     500,
        width:      1200,
        handleOversize: 'drag'
        }); 
    });
});       
</script>";

return $output;

また、可能であれば、echo ステートメントに ' を使用し、内部のすべてに " を使用して、引用符のエスケープを回避することをお勧めします。echo 'My friend says "hello", Tom.';

于 2012-08-21T23:15:44.603 に答える
0

WordPress の自動書式設定機能の 1 つである wpautop フィルタが問題を引き起こしていました。

私はすでに Chris Coyer の「生の」ショートコード (http://css-tricks.com/snippets/wordpress/disable-automatic-formatting-using-a-shortcode/) を使用していたので、答えはスクリプトを[raw][/raw] コンテンツ領域に出力する前のショートコード。

ハハハ!

于 2012-08-22T23:33:17.373 に答える