如何过滤传递给 WordPress 简码的内容
How to Filter Content passed to a WordPress Shortcode
我正在使用以下自定义 WordPress shortcode
在页面上显示列表,我试图找到第 5 个 LI 元素并在此时注入 DIV。
[expander]
<ul>
<li>step1</li>
<li>step 2</li>
<li>step 3</li>
<li>step 4</li>
<li>step 5</li>
<li>step 6</li>
<li>step 7</li>
</ul>
[/expander]
简码:
add_shortcode( 'expander', 'my_function' );
function my_function($atts, $content) {
echo substr_count($content, '<li>'); // 7
return $content;
}
预期输出:
<ul>
<li>step1</li>
<li>step 2</li>
<li>step 3</li>
<li>step 4</li>
<li>step 5</li>
<div>
<li>step 6</li>
<li>step 7</li>
</div>
</ul>
有多种设置方法。以下代码将在第 5 个元素之后的最后两个 <li>
标签周围包裹一个 <div>
标签,就像您在问题的“预期输出”部分中所请求的那样,但请注意您可以使用shordcode attributes
通过将开始和结束数字作为属性传递来使其动态而不是硬编码。
以下代码是您所要求的硬编码版本!
add_shortcode('expander', 'my_function');
function my_function($atts, $content)
{
$lists_itmes = substr_count($content, '<li>');
$list_array = explode('<li>', $content); // This will return an array containing of the values between each <li> tag starting from index 1
$main_content = "";
for ($i = 0; $i < $lists_itmes + 1; $i++) {
switch ($i) {
case 6:
$main_content .= "<div><li>" . $list_array[6] . "</li>";
break;
case 7:
$main_content .= "<li>" . $list_array[7] . "</li></div>";
break;
default:
$main_content .= "<li>" . $list_array[$i] . "</li></div>";
break;
};
}
return $main_content;
}
它会输出:
<ul>
<li>step 1</li>
<li>step 2</li>
<li>step 3</li>
<li>step 4</li>
<li>step 5</li>
<div>
<li>step 6</li>
<li>step 7</li>
</div>
</ul>
我正在使用以下自定义 WordPress shortcode
在页面上显示列表,我试图找到第 5 个 LI 元素并在此时注入 DIV。
[expander]
<ul>
<li>step1</li>
<li>step 2</li>
<li>step 3</li>
<li>step 4</li>
<li>step 5</li>
<li>step 6</li>
<li>step 7</li>
</ul>
[/expander]
简码:
add_shortcode( 'expander', 'my_function' );
function my_function($atts, $content) {
echo substr_count($content, '<li>'); // 7
return $content;
}
预期输出:
<ul>
<li>step1</li>
<li>step 2</li>
<li>step 3</li>
<li>step 4</li>
<li>step 5</li>
<div>
<li>step 6</li>
<li>step 7</li>
</div>
</ul>
有多种设置方法。以下代码将在第 5 个元素之后的最后两个 <li>
标签周围包裹一个 <div>
标签,就像您在问题的“预期输出”部分中所请求的那样,但请注意您可以使用shordcode attributes
通过将开始和结束数字作为属性传递来使其动态而不是硬编码。
以下代码是您所要求的硬编码版本!
add_shortcode('expander', 'my_function');
function my_function($atts, $content)
{
$lists_itmes = substr_count($content, '<li>');
$list_array = explode('<li>', $content); // This will return an array containing of the values between each <li> tag starting from index 1
$main_content = "";
for ($i = 0; $i < $lists_itmes + 1; $i++) {
switch ($i) {
case 6:
$main_content .= "<div><li>" . $list_array[6] . "</li>";
break;
case 7:
$main_content .= "<li>" . $list_array[7] . "</li></div>";
break;
default:
$main_content .= "<li>" . $list_array[$i] . "</li></div>";
break;
};
}
return $main_content;
}
它会输出:
<ul>
<li>step 1</li>
<li>step 2</li>
<li>step 3</li>
<li>step 4</li>
<li>step 5</li>
<div>
<li>step 6</li>
<li>step 7</li>
</div>
</ul>