我正在尝试在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 ' : '';
答案 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>';