Различать P-теги, обертывающие изображения, и P-теги, обертывающие текстовые узлы в Wordpress? - PullRequest
2 голосов
/ 14 ноября 2009

Мне нужно хорошее решение, чтобы иметь возможность по-разному стилизовать теги <p> в сообщении WordPress. Более конкретно мне нужно различать абзацы и изображения. Wordpress просто оборачивает все новые строки в теги <P>.

Вот несколько возможностей:

  • Удалите все теги <p> и добавьте теги <P>, где это необходимо (вокруг текста)
  • Добавить класс на <P> теги, которые переносят текст
  • Как-то различить их как есть (p img не работает .. Мне нужно выбрать теги p, у которых есть дочерний img ... Я бы не хотел использовать селекторы, которые не работают в IE 6)
  • Другие решения?

Я не хочу, чтобы участники блога должны были что-то делать вручную (добавление тегов div), я хочу, чтобы это делалось в фоновом режиме.

Я знаю, что у других людей возникают проблемы с этим. Пожалуйста, дайте мне знать ваши мысли!

Спасибо всем, Мэтт Мюллер

Ответы [ 3 ]

3 голосов
/ 25 января 2010

Вы можете создать функцию фильтра содержимого, как показано ниже, в файле functions.php вашей темы или в плагине. Обратите внимание, что это добавит класс к любому абзацу в теле сообщения с изображением в качестве первого дочернего элемента (при условии, что текст не идет первым), что может не соответствовать желаемому поведению.

function my_content_filter($content) {
    return preg_replace('|<p>(<img[^<]*)</p>|i', '<p class="foo">${1}</p>', $content);
}
add_filter('the_content', 'my_content_filter');
0 голосов
/ 04 ноября 2011

А как насчет простого плагина, который использует развёртку jQuery? http://wordpress.org/extend/plugins/unwrap-images/

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я разработал этот плагин для собственных нужд.

0 голосов
/ 14 ноября 2009
function format_content($content) {
    $contentArr = explode("\n", $content);
    $output = "";
    foreach ($contentArr as $entity) {
        $entity = trim($entity);
        $numChars = strlen($entity);
        if(substr($entity, 0, 1) != "<" && substr($entity, $numChars-1) != ">" && $numChars > 0)
            $entity = '<p>'.$entity.'</p>';
        $output .= $entity;
    }
    return $output;
}

Я уверен, что я столкнусь с некоторыми угловыми случаями, но на данный момент это работает довольно хорошо. Он использует get_the_content () для предотвращения добавления p-тегов, затем передает содержимое этой функции, которая переносит блуждающий текст, который не начинается с тега в тегах p, а затем возвращается.

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