php在外部时从函数内部获取变量

时间:2015-01-19 13:06:55

标签: php jquery wordpress global shortcode

我之前从未这样做过,所以我希望学习如何做到这一点。我在wordpress工作并创建一个插件。我在我的文档顶部有一个函数,它将一些jQuery代码添加到我的页面的页脚,其简化版本如下:

function slug_masonry_init() { ?>
<script>
jQuery(function($) {
var container = document.querySelector("#skizzar_masonry_loop");
var msnry = new Masonry( container, {
    columnWidth: <?php echo $masonry_item_width ?>,
    gutter: <?php echo $masonry_item_padding ?>,
    itemSelector: ".skizzar_masonry_entry"
});

});
</script>
<?php }
//add to wp_footer
add_action( 'wp_footer', 'slug_masonry_init' );

你会注意到<script>内有一些php变量:$masonry_item_width$masonry_item_padding

这些变量是用户定义的,处理这些变量的函数在我的文档中稍微偏低,如下所示:

function skizzar_masonry_shortcode($atts,$content = null) {
    global $skizzar_masonry_item_width, $skizzar_masonry_item_padding;
    $el_class = '';
        extract(shortcode_atts(array(
            "masonry_item_width" => '240',
            "masonry_item_padding" => '5',
            "el_class" => '',
        ),$atts));

        $skizzar_masonry_item_width = $masonry_item_width;
        $skizzar_masonry_item_padding = $masonry_item_padding;

        $output .= '<style>.skizzar_masonry_entry, .skizzar_masonry_entry img {width:'.$masonry_item_width.'px;} .skizzar_masonry_entry.skizzar_ma_double, .skizzar_masonry_entry.skizzar_ma_double img {width:560px; /* + padding */} .skizzar_masonry_entry {margin-bottom:'.$masonry_item_padding.'px; overflow:hidden;}</style>';
        $output .= '<div id="skizzar_masonry_loop" class="'.$el_class.'">';
        $output .= do_shortcode($content);
        $output .= '</div>';

        return $output;
    }

SIDE注意:您在此处看到的两个全局变量:$skizzar_masonry_item_width$skizzar_masonry_item_width在文档中稍微定义(在两个代码段之间) - 这是用于输入宽度和填充,您在此处看到的代码会创建一个短代码。

我不知道怎么做的是将$masonry_item_paddingmasonry_item_width添加到页面顶部的jQuery脚本中 - 目前它们只是返回空白。

2 个答案:

答案 0 :(得分:3)

您必须输出echo个变量

columnWidth: <?php echo $masonry_item_width ?>,
gutter: <?php echo $masonry_item_padding ?>,

至于如何获取你的价值...... Wordpress使插件变得如此混乱,所有这些独立的回调。通常我会厌恶这样做,但我不能想到任何其他方式来使这项工作。我将它们放入一个数组中以减少全局变量。这部分内容在您的skizzar_masonry_shortcode

$GLOBAL['skizzarvar'] = array(
   'width' => $masonry_item_width, 
   'padding' => $masonry_item_padding
);

然后您可以在slug_masonry_init

中执行此操作
<?php echo $GLOBAL['skizzarvar']['width'] ?>

答案 1 :(得分:1)

你所要做的就是:

function slug_masonry_init() 
{ 
    global $masonry_item_width, $masonry_item_padding;
    ...

在此处详细了解global关键字:http://php.net/manual/en/language.variables.scope.php