将值传递给Wordpress短代码

时间:2016-03-11 20:02:23

标签: php wordpress wordpress-plugin

我正在尝试在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');

如果我将值硬编码到像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 ' : '';

2 个答案:

答案 0 :(得分: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
);

答案 1 :(得分:-1)

尝试使用return语句...

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>';