В Wordpress, как я могу получить немедленный абзац после первого тега h2 в каждом сообщении? - PullRequest
0 голосов
/ 01 марта 2019

Как мне выбрать целевой абзац после первого тега h2 в каждом сообщении?(Они структурированы особым образом)

<!-- Example 1 -->

<p>Lorem Ipsum</p>
<p>Lorem Ipsum</p>
<h2>Title</h2>
<p>Lorem Ipsum</p><!-- PHP gets this paragraph -->
<p>Lorem Ipsum</p>


<!-- Example 2 -->

<p>Lorem Ipsum</p>
<p>Lorem Ipsum</p>
<h2>Title</h2>
<p>Lorem Ipsum</p><!-- PHP gets this paragraph -->
<p>Lorem Ipsum</p>
<h2>Title</h2>
<p>Lorem Ipsum</p>

Обычно я бы использовал preg_match или preg_split, но Wordpress не хранит post_content с тегами p, на которые я могу ориентироваться, так что это не выглядит жизнеспособным.

РЕДАКТИРОВАТЬ:

Я понял, как это сделать, код ниже работает:

<?php
    $texts = preg_split( '/\r\n|\r|\n/', get_the_content() );
    // Loop through items
    foreach($texts as $text) {
      // If $stop has been set true by presence of H2 in previous item, then break after echoing paragraph
      if ($stop == true) {
        echo $text;
        break;
      }
      // If first h2 present, then set $stop to true to stop loop after next item
      if (strpos($text, 'h2')) {
      $stop = true;
      }
    }

1 Ответ

0 голосов
/ 01 марта 2019

Исходя из моего комментария, используйте simplexml_load_string

$str = '
<div>
    <p>Lorem Ipsum1</p>
    <p>Lorem Ipsum2</p>

    <h2>Title</h2>
    <p>Lorem Ipsum3</p><!-- PHP gets this paragraph -->
    <p>Lorem Ipsum4</p>

    <h2>Title</h2>
    <p>Lorem Ipsum5</p>
</div>';

$xml = simplexml_load_string($str);
$headings = $xml->xpath('h2');

$contents = [];
foreach ($headings as $heading) {
    $contents[] = (string)$heading->xpath('following-sibling::p')[0];
}

Живая демоверсия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...