2017-12-02 2 views
0

저는 현재 [뉴스 레터] 단축 코드를 사용할 수있는 간단한 플러그인을 WordPress에 만들고 있습니다. 단축 코드는 정의 할 수있는 많은 특성을 가지고 있으므로 $ atts 배열에 모두 들어 있습니다.정의 된 함수 밖의 변수에 어떻게 액세스합니까?

이제 버튼의 look-n-feel을 정의하는 속성이 필요합니다. 이를 위해 "채우는"CSS를 태그에 추가하고 싶습니다. 이렇게하려면 add_action('wp_head', 'append_css_to_head')을 사용하고 있는데, add_actionshow_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; 
} 

편집 : 그리고 그래, 내가 거기에 워드 프레스 특정 코드이 내이지만, 내 질문이 느낌, 주로 PHP에 관한 알고있다.

+0

왜 중첩 기능을 사용합니까? –

+0

@ MarkBaker 원래 단축 코드 기능 –

답변

1

문제의 범위는 가변적 인 것이 아니라 타이밍입니다. CSS 코드는 wp_head에서 실행되는 반면 단축 코드는 the_content이 실행될 때 실행됩니다.

$post->post_content (global $post을 잊지 말아야합니다.) wp_head 내에서 속성이 필요한 경우 짧은 코드가 포함되어 있는지 확인해야합니다. 존재하는 경우 (has_shortcode($shortcode)) output buffersdo_shortcode()을 사용하거나 get_shortcode_regex()과 그 형제 함수를 으로 사용하여 속성을 가져올 수 있습니다.

+0

한숨을 벗어나 원래는 ... (원래 있어야합니다.) ... 나는이 시간이 너무 길고 잘못된 시간대에있을 수도 있습니다. WP가 어떻게 작동하는지 (잔인한) 알림을 주셔서 감사합니다 ...-) –

관련 문제