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