#php #wordpress #shortcode #custom-wordpress-pages #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>
Ответ №1:
Существует несколько способов настроить это. Следующий код обернет <div>
тег вокруг двух последних <li>
тегов, начинающихся после 5-го элемента, точно так, как вы просили в разделе «Предполагаемый вывод» вашего вопроса, НО, пожалуйста, обратите внимание, что вы можете использовать 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>