如果指定了属性,如何让快捷代码自动填充内容?

时间:2022-01-23 作者:Ooker

我想有一个可以根据其参数值填充内容的快捷码。这是我的代码:

function test( $attr, $content ){
    $args = shortcode_atts( array(
            \'content\' => \'Not loading\',
        ), $attr );
    if ( $args[\'content\'] == \'foo\' ) { $content = \'bar\' ;}
    return \'A\' . $content . \'B\';
}
add_shortcode( \'test\', \'test\' );
它是如何做到的:

预计输出实际输出[test content="foo" ]AbarBAbarB[test]blabla[/test]AblablaB[test] 或
[test][/test]ANot loadingBAB

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

如果你mixed self-closing and enclosing shortcodes for the same tag/shortcode, e、 g.您将有问题的短代码放在相同的帖子内容中,如下所示:

1) Self-closing: [test content="foo" ] and 2) Enclosing: [test]blabla[/test]
.. 在这种情况下,WordPress的短代码解析器会将这两个短代码视为只有一个短代码,即它开始于[test content="foo" ] 结束于[/test], 因此$content 价值将是 and 2) Enclosing: [test]blabla.

因此,尝试创建一个全新的帖子,只添加上述短代码中的一个,例如。just the [test]blabla[/test], 然后你会得到预期的输出,即。AblablaB.

看见https://codex.wordpress.org/Shortcode_API#Enclosing_vs_self-closing_shortcodes 了解更多详细信息。

如果您想在自动关闭和封闭表单中使用您的短代码,那么您可以通过使用/ 如中所示[test /] (或[test/]), 其功能与/ 在自动关闭HTML标记中,如<br />, <hr />, <img ... />, 等

例如,(注意/])

1) Self-closing: [test content="foo" /] and 2) Enclosing: [test]blabla[/test]
.. 这样,您就可以得到正确的输出-1) Self-closing: AbarB and 2) Enclosing: AblablaB.

对于[test /] (或只是[test] 未与封闭形式混合时),或[test][/test] (附件形式),基于代码的正确输出实际上是AB 而不是ANot loadingB.

因为使用的快捷码没有任何内容,其中;“内容”;此处指的是开头和结尾标记之间的内容,例如。[test]this is the CONTENT[/test].

其次,短代码没有content 属性/参数(例如[test content="foo"]), 因此$content 保持为空,然后输出AB.

如果你真的想要Not loading 永远是$content 当内容和content 属性都为空或未指定,则可以执行以下操作。。

$content = $content ? $content : \'Not loading\'; // add this line
return \'A\' . $content . \'B\';
那样的话,[test /][test][/test] 会给你ANot loadingB.

相关推荐

列出短码(DO_SHORTCODE)中的分类术语段

我想在我的短代码中列出分类术语。这是我获取术语列表的方式(用逗号分隔):<?php $terms = get_the_terms( $post->ID , array( \'shoptype\' ) ); $i = 1; foreach ( $terms as $term ) { $term_link = get_term_link( $ter