2016-03-11 2 views
1

Я пытаюсь написать короткий код Wordpress в php. Тем не менее, у меня возникли проблемы с передачей значений из короткого кода в отображаемый контент.Передача значений в короткий код Wordpress

function tweet($atts) { 

extract(shortcode_atts(array(
       'id'   => '', 
       'width'   => '520', 
       'height'  => '600', 
       'theme'   => 'light', 
       'link_color' => '#333333', 
       'border_color' => '#e8e8e8', 
       'header'  => 'true', 
       'footer'  => 'true', 
       'border'  => 'true', 
       'scrollbar'  => 'true', 
       'transparent' => 'false', 
       'tweet_limit' => '10', 
     ), $atts)); 



return '<a class="twitter-timeline" 
data-widget-id="<?php echo $this->id; ?>" 
width="<?php echo $this->width; ?>" 
height="<?php echo $this->height; ?>" 
data-theme="<?php echo $this->theme; ?>" 
data-link-color="<?php echo $this->linkColor; ?>" 
data-border-color=<?php echo $this->borderColor; ?> 
data-chrome="<?php echo $this->chrome; ?>" 
data-tweet-limit="<?php echo $this->tweetLimit; ?>" 
lang="<?php echo $this->lang; ?>"></a>'; 
} 
add_shortcode('twitter', 'tweet'); 

Если I жесткие значения кода в таких областях, как, data-widget-id, то он будет работать. . Однако, если я просто пишу [twitter id="707980844590342144"] значение не получить передается в

Похоже, что-то вдоль этих линий может быть решение, но я не смог получить его работу до сих пор:

 $this->id   = $id; 
     $this->width  = $width; 
     $this->height  = $height; 
     $this->theme  = $theme; 
     $this->linkColor = $link_color; 
     $this->borderColor = $border_color; 
     $this->tweetLimit = $tweet_limit; 
     $this->chrome  = ""; 
     $this->chrome  .= ($header == 'false')  ? 'noheader ' : ''; 
     $this->chrome  .= ($footer == 'false')  ? 'nofooter ' : ''; 
     $this->chrome  .= ($borders == 'false')  ? 'noborders ' : ''; 
     $this->chrome  .= ($scrollbar == 'false')  ? 'noscrollbar ' : ''; 
     $this->chrome  .= ($transparent == 'true') ? 'transparent ' : ''; 

ответ

3

Если вы хотите, чтобы вставить переменные внутри строки в двойные кавычки и имя переменной в фигурные скобки (не обязательно, если вы не используете массивы или объекты):

return "<a class=\"twitter-timeline\" 
    data-widget-id=\"{$id}\" 
    width=\"{$width}\" 
    height=\"{$height}\" 
    data-theme=\"{$theme}\" 
    data-link-color=\"{$linkColor}\" 
    data-border-color=\"{$borderColor}\" 
    data-chrome=\"{$chrome}\" 
    data-tweet-limit=\"{$tweetLimit}\" 
    lang=\"{$lang}\"></a>"; 

Но я предпочитаю sprintf функции для него:

return sprintf(
    '<a class="twitter-timeline" data-widget-id="%s" width="%s" height="%s" data-theme="%s" data-link-color="%s" data-border-color="%s" data-chrome="%s" data-tweet-limit="%s" lang="%s"></a>', 
    $id, 
    $width, 
    $height, 
    $theme, 
    $linkColor, 
    $borderColor, 
    $chrome, 
    $tweetLimit, 
    $lang 
); 
+0

Удивительно, большое вам спасибо! –

-1

Попробуйте это в обратном заявление ...

return '<a class="twitter-timeline" 
    data-widget-id="<?php echo $id; ?>" 
    width="<?php echo $width; ?>" 
    height="<?php echo $height; ?>" 
    data-theme="<?php echo $theme; ?>" 
    data-link-color="<?php echo $linkColor; ?>" 
    data-border-color=<?php echo $borderColor; ?> 
    data-chrome="<?php echo $chrome; ?>" 
    data-tweet-limit="<?php echo $tweetLimit; ?>" 
    lang="<?php echo $lang; ?>"></a>'; 
+0

Я попробовал это, и это все еще не работает. –

+0

какая ошибка при размещении короткого кода ??? – WisdmLabs

Смежные вопросы