我正在使用自定义简码在内容中显示Bootstrap Modal。问题是<div>
破坏了内容。参见此处:Output content of WordPress Shortcode in text and footer
No2我想更改简码,仅显示模态的链接,并在内容后显示模态-<div>
。
为此,我检查content字段中是否包含短代码,如果是这种情况,我将在内容之后显示所有模式。
这是代码: (部分来自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中。
答案 0 :(得分:1)
使用preg_match()
函数的此方法应该有效:
$id = 0;
$matches = array();
preg_match('#\[term(.*) id="([0-9]{1,})"(.*)\]#', $content, $matches);
if (count($matches) > 2) {
$id = $matches[2];
}
不管短代码属性的顺序如何,该方法都可以使用,但是它假定您在id
属性值的两边加上双引号,并且该值仅由数字组成。