Извлечь первые теги <li>из содержимого сообщения? - PullRequest
0 голосов
/ 26 апреля 2020

Я хочу создать пользовательскую выдержку для образовательного сайта. Он имеет сообщения, которые содержат <ul> и <ol> список. Я хочу напечатать из сообщения первый дочерний элемент тегов ul и ol . В настоящее время у меня есть следующий код, который может печатать только первый абзац.

    function wpden_excerpt()
    {
        global $post;

       $output = get_the_content();

    $wanted_number_of_paragraph = 1;

    $tmp = explode ('</li>', $output);
    for ($i = 0; $i < $wanted_number_of_paragraph; ++$i) {
       if (isset($tmp[$i]) && $tmp[$i] != '') {
           $tmp_to_add[$i] = $tmp[$i];
       }
    }
    $output = implode('</li>', $tmp_to_add) . '</li>';

        echo $output;

    }

HTML Содержимое:

<p>Once in a blue moon</p>
<p>Meaning</p>
<ul>
  <li>not very often</li>
  <li>rarely</li>
  <li>once after a long time</li>
</ul>
<p>Examples</p>
<ol>
  <li>My sister lives in Alaska, so I only see her once in a blue moon.</li>
  <li>Once in a blue moon, there's an issue I can't resolve.</li>
  <li>That company puts on a good performance only once in a blue moon.</li>
</ol>

Печать пользовательской выдержки с:

<?php wpden_excerpt(); ?>

Теперь я хочу напечатать что-то подобное из HTML Содержимое:

<p>
<b>Meaning:</b> not very often<br /> <!-- Content from first <li> of first <ul> -->
<b>Example:</b> My sister lives in Alaska, so I only see her once in a blue moon. <!-- Content from first <li> of first <ol> -->
</p>

Ответы [ 3 ]

0 голосов
/ 26 апреля 2020

Вы можете использовать DOMDocument, загрузить HTML и затем получить дочерние элементы каждого блока. используя childNodes и nodeValues. Поместив ваш HTML в переменные, это позволяет вам анализировать каждую переменную отдельно. Просто отобразите свою переменную на странице, чтобы отобразить ее содержимое.

$ulcontent = "
Once in a blue moon
Meaning

  not very often
  rarely
  once after a long time

";
$olcontent = "
Examples

  My sister lives in Alaska, so I only see her once in a blue moon.
  Once in a blue moon, there's an issue I can't resolve.
  That company puts on a good performance only once in a blue moon.

";
$uldom = new DOMDocument;
$uldom->loadHTML($ulcontent);

$oldom = new DOMDocument;
$oldom->loadHTML($olcontent);

$firstChildOfUl = $uldom->getElementsByTagName('li')->item(0)->childNodes->item(0);
$ulvalue = $firstChildOfUl->nodeValue;

$firstChildOfOl = $oldom->getElementsByTagName('li')->item(0)->childNodes->item(0);
$olvalue = $firstChildOfOl->nodeValue;

echo "",var_dump($ulvalue),"
"; echo"
",var_dump($olvalue),"
";

ВЫХОД:

Первый дочерний элемент UL: string(14) "not very often" Первый Ребенок OL: string(65) "My sister lives in Alaska, so I only see her once in a blue moon."

HTML на PHP странице:

<?=$ulcontent?>
<?=$olcontent?>

HTML ВЫХОД: <?=$ulcontent?> & <?=$olcontent?>

Однажды на голубой луне

Значение

не очень часто, редко, раз в долгое время Примеры

Моя сестра живет на Аляске, поэтому я вижу ее только один раз в голубая луна. Однажды на голубой луне есть проблема, которую я не могу решить. Эта компания демонстрирует хорошие результаты только один раз на голубой луне.

0 голосов
/ 26 апреля 2020

попробуйте это:

<?php
$post = "<p>Once in a blue moon</p>
<p>Meaning</p>
<ul>
<li>not very often</li>
<li>rarely</li>
<li>once after a long time</li>
</ul>
<p>Examples</p>
<ol>
<li>My sister lives in Alaska, so I only see her once in a blue moon.</li>
<li>Once in a blue moon, there's an issue I can't resolve.</li>
<li>That company puts on a good performance only once in a blue moon.</li>
</ol>";

$arr1 = explode("</li>",explode("<ul>", $post)[1]);
$arr2 = explode("</li>",explode("<ol>",$post)[1]); 



echo "<p>
<b>Meaning:</b>".substr($arr1[0],4)."<br /><b>Example:</b>".substr($arr2[0],4)."</p>";
?>
0 голосов
/ 26 апреля 2020

Этот метод работает у вас?

<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
   var _ul_f = $('ul li:first').text();
   var _ol_f = $('ol li:first').text();

   $('#output').html('<p><b>Meaning:</b>'+_ul_f+'</br><b>Example:</b>'+_ol_f+'</p>');
});
</script>

<div id="output">
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...