如何访问变量之外的变量?

我目前正在为WordPress创建一个简单的插件,以便使用[newsletter]简码。短代码有​​很多可以定义的属性,所以我在$ atts数组中捕获它们。如何访问变量之外的变量?

现在,我想要这些属性来定义按钮的外观。为此,我想将“填充”的CSS添加到标签中。为此,我使用的是add_action('wp_head', 'append_css_to_head'),但这不起作用,因为add_action似乎根本没有从show_newsletter_signup_btn()函数中触发。

所以我试图把add_action('wp_head', 'append_css_to_head')外的函数,而不是和它触发就好,而是通过短代码设置的变量是不是他们所定义的功能外可用。

所以这基本上是我在问什么:如何使这些变量脱离使用功能?你可以从我的下面的代码中看到,我已经在使用$ GLOBALS(我知道这不是最佳实践,但我不知道如何去做),但即使这样也没有帮助。

我在这个网站上看过很多帖子,但还没有设法找到一个包含适合我的解决方案。

我的代码如下。

<?php 

add_shortcode('newsletter', 'show_newsletter_signup_btn');

function show_newsletter_signup_btn($atts) {

$atts = shortcode_atts(

array(

'link_text' => '',

'text_color' => '#fff',

'border_color' => '#e02d7f',

'background_color' => '#e02d7f',

'bg_gradient_color1' => '#e02d7f',

'bg_gradient_color2' => '#a31c57',

'hover_text_color' => '#fff',

'hover_border_color' => '#e02d7f',

'hover_background_color' => '#e7599a',

'hover_bg_gradient_color1' => '#e7599a',

'hover_bg_gradient_color2' => '#cf236e'

),

$atts

);

// Requirements:

$active_link = '/newsletter';

$link_text = $atts['link_text'];

// Colors:

$GLOBALS['nl_text_color'] = $atts['text_color'];

$GLOBALS['nl_border_color'] = $atts['border_color'];

$GLOBALS['nl_background_color'] = $atts['background_color'];

$GLOBALS['nl_bg_gradient_color1'] = $atts['bg_gradient_color1'];

$GLOBALS['nl_bg_gradient_color2'] = $atts['bg_gradient_color2'];

$GLOBALS['nl_hover_text_color'] = $atts['hover_text_color'];

$GLOBALS['nl_hover_border_color'] = $atts['hover_border_color'];

$GLOBALS['nl_hover_background_color'] = $atts['hover_background_color'];

$GLOBALS['nl_hover_bg_gradient_color1'] = $atts['hover_bg_gradient_color1'];

$GLOBALS['nl_hover_bg_gradient_color2'] = $atts['hover_bg_gradient_color2'];

function append_css_to_head() {

echo '<style type="text/css">

a.newsletter-button {

font-size: 170%;

font-weight: 100;

line-height: 1.8em;

display: block;

text-transform: uppercase;

text-align: center;

margin: 1em 0;

-webkit-transition: .5s all ease;

-moz-transition: .5s all ease;

transition: .5s all ease;

color: '.$GLOBALS['nl_text_color'].';

border: 1px solid '.$GLOBALS['nl_border_color'].';

background: '.$GLOBALS['nl_background_color'].';

background: linear-gradient(to bottom,'.$GLOBALS['nl_bg_gradient_color1'].' 0,'.$GLOBALS['nl_bg_gradient_color2'].' 100%)

}

a.newsletter-button::after {

content: url(' .plugin_dir_url(__FILE__). 'img/arrow.svg);

height: 0.8em;

width: 0.8em;

display: inline-block;

vertical-align: middle;

margin-left: 0.3em;

margin-top: -0.1em;

line-height: 0em;

-webkit-transition: .5s all ease;

-moz-transition: .5s all ease;

transition: .5s all ease;

}

a.newsletter-button:hover {

color: '.$GLOBALS['nl_hover_text_color'].';

border: 1px solid '.$GLOBALS['nl_hover_border_color'].';

background: '.$GLOBALS['nl_hover_background_color'].';

background: linear-gradient(to bottom,'.$GLOBALS['nl_hover_bg_gradient_color1'].' 0,'.$GLOBALS['nl_hover_bg_gradient_color2'].' 100%)

}

a.newsletter-button:hover::after {

-webkit-transform: translateX(0.3em);

transform: translateX(0.3em);

}

</style>';

}

add_action('wp_head', 'append_css_to_head');

$output = '

<div class="newsletter-signup">

<a class="newsletter-button" href="' . $active_link . '">' .$link_text. '</a>

</div>';

return $output;

}

编辑:是的,我知道有WordPress的特定代码中这一点,但我的问题是关于PHP为主,我觉得。

回答:

您的问题不是可变范围,而是时间。 CSS代码在wp_head中运行,而短代码在执行the_content时执行。

你得检查$post->post_content(不要忘了global $post),看看你的短代码是否是在那里,如果你内wp_head需要它的属性。如果它存在(has_shortcode($shortcode)),则可以使用output buffers和do_shortcode()或使用get_shortcode_regex()及其shortcodes.php的同级函数来获取属性。

以上是 如何访问变量之外的变量? 的全部内容, 来源链接: utcz.com/qa/258830.html

回到顶部