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

php get variables from inside a function when outside

我以前从未这样做过,所以我想学习如何做。我在 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;
    }

旁注:您在此处看到的两个全局变量:$skizzar_masonry_item_width$skizzar_masonry_item_width 的定义稍远一点(在两个代码片段之间)——这是用于输入的用户界面宽度和填充,您在此处看到的代码创建了一个简码。

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

你必须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'] ?>

您所要做的就是:

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

在此处查看有关 global 关键字的更多信息:http://php.net/manual/en/language.variables.scope.php