我在我的网站上用不同的参数重复了一句话。
示例:NAME在第天读了一本书|标题
每个帖子的大写单词各不相同,我希望DAY成为一个链接——七个单独链接中的一个(一周中的每一天一个)。
我有七个短代码用于一周中的每一天的链接,还有一个句子的短代码,但我不能让它们一起工作。
function books($atts, $content = null) {
extract(shortcode_atts(array(
"name" => \'\',
"day" => \'\',
"title" => \'\',
), $atts));
$output = \'<div class="cite">\';
if($name) { $output .= \'\'.$name.\' read a book\';}
if($day) { $output .= \' on \'.do_shortcode($content).\'\';}
$output .= \' | \'.$title.\'</div>\';
return $output;
}
add_shortcode("books", "books");
然后,一周中几天的代码非常简单:
function monday() {
return \'<a href="http://website.com/" target="_blank">Monday</a>\';
}
add_shortcode("monday", "monday");
在我的帖子里
[books name="Mary Sue" title="See Jane Run"]
工作很好,输出:玛丽·苏读了一本书|见简·润
但是
[books name="Mary Sue" title="See Jane Run" day="[monday]"]
摇摇晃晃地说:“玛丽读了一本关于|的书”,参见
我觉得我可能在处理这个问题时出错了,但我不知道如何在每篇文章中定义几个不同的变量,并保持重复使用相同文本的一致性和简单性。
最合适的回答,由SO网友:Nathan Johnson 整理而成
一周中的几天不需要短代码。而且the way you\'re trying to use them isn\'t allowed. 为什么不直接使用书名,在书中做你想做的事呢?
function books($atts, $content = null) {
$atts = shortcode_atts( [
"name" => \'\',
"day" => \'\',
"title" => \'\',
], $atts );
$atts[ \'day\' ] = ucfirst( strtolower( $atts[ \'day\' ] ) );
//* If you want to change the URL, you could switch on the day
switch( $atts[ \'day\' ] ) {
case \'Monday\':
$url = \'https://example.com/\';
break;
case \'Tuesday\':
$url = \'https://someotherurl.com/\';
break;
//* etc.
}
return sprintf(
\'<div class="cite">%1$s%2$s | %3$s</div>\',
\'\' === $atts[ \'name\' ] ? \'\' : $atts[ \'name\' ] . \' read a book\',
\'\' === $atts[ \'day\' ] ? \'\' :
sprintf( \' on <a href="%1$s" target="_blank">%2$s</a>\', $atts[ \'day\' ], $url ),
$atts[ \'title\' ]
);