在参数中包含参数的快捷码

时间:2018-03-06 作者:A J

我在我的网站上用不同的参数重复了一句话。

示例: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]"]
摇摇晃晃地说:“玛丽读了一本关于|的书”,参见

我觉得我可能在处理这个问题时出错了,但我不知道如何在每篇文章中定义几个不同的变量,并保持重复使用相同文本的一致性和简单性。

1 个回复
最合适的回答,由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\' ]
);

结束

相关推荐

Shortcode produces blank page

我在使用的主题中添加了短代码,但当我尝试在页面中使用它们时,它会给我一个空白页面。我看到了一个解决这个问题的方法remove_filter(\"the_content\", \"wpautop\"); 但我不确定这是否有效。如果会,请让我知道,请让我知道该代码放在哪里。否则,如何解决此问题。如果您需要查看我正在尝试添加哪些短代码,请告诉我,我将随它们一起发布一个文件。提前谢谢。EDIT 下面是我用来添加短代码的函数:function facebook($atts) { extract(sh