0

我正在使用 PHP 为 WordPress 短代码输出一些 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 的内容争论中的第一个引号之后有一个换行符。

像这样:

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

这给了我一个“未终止的字符串文字”错误并使我的脚本失败。

到底是怎么回事?

备注:一。这是在没有 BOM 的 UTF-8 中编码的。湾。这在某一时刻确实奏效了。C。如果我传递一个空字符串作为内容争论,它就可以正常工作,当然,这对我没有帮助。

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 的自动格式化功能之一,wpautop 过滤器导致了问题。

我已经在使用 Chris Coyer 的“原始”短代码(http://css-tricks.com/snippets/wordpress/disable-automatic-formatting-using-a-shortcode/)所以答案就像将脚本包装在[raw][/raw] 短代码在将其输出回内容区域之前。

哈哈哈!

于 2012-08-22T23:33:17.373 回答