1

我正在使用自定义简码在我的内容中显示引导模式。问题是,这<div>打破了内容。请参阅此处:在文本和页脚中输出 WordPress 简码的内容

No2 我想更改简码并仅显示模态的链接并<div>在内容之后显示模态。

为此,我检查内容字段是否有简码,如果是这样,我会在内容之后显示所有模式。

这是代码:(部分来自这里:https ://stackoverflow.com/a/18196564/1788961 )

$content = get_sub_field("textfield");
//write the begining of the shortcode
$shortcode = 'term';

$check = strpos($content,$shortcode);
if($check=== false) {
    //echo '<h1>NO Shortcode</h1>';
} else {
    //echo '<h1>HAS Shortcode</h1>';


    $str = '[term value="Term Name" id="600"][term value="Another Term" id="609"]';

    preg_match_all('~\[term value="(.+?)" id="(.+?)"]~', $str, $matches);

    var_dump($matches[2]);

    foreach($matches[2] as $match){
        echo 
            '<div class="modal fade" id="termModal_'.$match.'" tabindex="-1" role="dialog" aria-labelledby="termModal_'.$match.'_Title" aria-hidden="true">
                (rest of modal)
            </div>
        ';


    }


}

到目前为止一切正常。但现在我需要内容字段中的简码。

我不知道如何得到它们。这是我的简码:

[term value="Custom Link Title" id="123"]

我需要内容中每个简码的 id 并将它们存储在 `$str' 变量中。

4

1 回答 1

1

使用该preg_match()功能的这种方法应该有效:

$id = 0;
$matches = array();
preg_match('#\[term(.*) id="([0-9]{1,})"(.*)\]#', $content, $matches);
if (count($matches) > 2) {
    $id = $matches[2];
}

无论短代码属性的顺序如何,这都会起作用,但它假定您在id属性值周围有双引号,并且该值仅包含数字。

于 2019-06-18T03:24:58.283 回答