如何在帖子或小工具中找到特定的快捷代码并将其传递给变量?

时间:2018-09-12 作者:D. Merchant

我在插件中创建了一个短代码,并在一些页面中使用了它。现在我必须在包含短代码的帖子上获取这些短代码的属性。

示例短代码是[图书id=“432”]。当我将这个短代码写入帖子或小部件时,我必须得到这个432值。

我看到此函数是为了从短代码字符串中获取属性:

function get_shortcode_atts( $tag, $text ){
    preg_match_all( \'/\' . get_shortcode_regex() . \'/s\', $text, $matches );
    $out = array();
    if( isset( $matches[2] ) )
    {
        foreach( (array) $matches[2] as $key => $value )
        {
            if( $tag === $value )
                $out[] = shortcode_parse_atts( $matches[3][$key] );
        }
    }
    return $out;
}
没关系。但在此之前,我应该做什么detect a shortcode and get it 从post或i小部件?

有一个名为has_shortcode 但我认为这对于我的目的是不够的。

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

我不太清楚你到底想做什么。每页是否有多个短代码?需要获取图书id时,您是否在页面上?

如果您所在的页面上有短代码,则此函数将返回一个图书id数组:

function book_id() {
    return preg_match_all( \'/(?<=\\[book id=").+?(?="])/\', get_post()->post_content, $match )[0];
}
如果发布内容为[book id="432"][book id="434"] 这将返回:

array(2) {
  [0]=>
  string(3) "432"
  [1]=>
  string(3) "434"
}
如果每页只有一个图书id,则可以使用preg_match 而不是preg_match_all 上面的函数将返回字符串而不是数组。

结束

相关推荐

Shortcode with foreach

我不能对foreach使用shortcode。它给了我语法错误。我错在哪里?function create_galeri_shortcode($atts) { $atts = shortcode_atts( array( ), $atts, \'galeri\' ); if ( has_post_format( \'gallery\' )) { $images = get_post_