Получить значение ссылки только из содержимого()?


У меня есть новости в сообщениях, и я пытаюсь отобразить две последние новостные статьи (сообщения) на своей главной странице. Я решил эту проблему, получив название с помощью the_title() и получить немного текста, используя the_excerpt().

Я хочу показать подробнее... ссылку, которая приведет вас к сообщению. Тем не менее, в некоторых новостных статьях, которые я публикую, есть текст в тексте сообщения, который является ссылкой, как мне получить ссылку только в тексте сообщения, чтобы что моя дополнительная... ссылка приведет вас туда напрямую?

Например, иногда мы будем ссылаться на новостные статьи в PDF-файлах, которые находятся на другом сервере.

Я использую следующий код.

<?php query_posts('category_name=news2011'); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    <?php /* the_ID(); */ ?> 
    <?php /* the_date('F Y'); */ ?>
    <ol class="news">
        <strong><p><?php the_title()?></p></strong>
        <li><?php the_content(); ?></li>
    </ol>
<?php endwhile; endif; ?>
Author: s_ha_dum, 2011-03-29

2 answers

Вы можете просмотреть содержимое, чтобы увидеть, содержит ли оно ссылку, а затем проанализировать его, чтобы найти атрибут href. Есть много способов сделать это, в этом примере используется встроенная функциональность kses, , как продемонстрировал Отто:

$post_link = get_the_permalink();
if ( preg_match('/<a (.+?)>/', get_the_content(), $match) ) {
    $link = array();
    foreach ( wp_kses_hair($match[1], array('http')) as $attr) {
        $link[$attr['name']] = $attr['value'];
    }
    $post_link = $link['href'];
}
 1
Author: Jan Fabry, 2011-04-05 12:48:32

Приведенное выше решение идеально, но для него потребуются только http-ссылки. Используя приведенный ниже код, он будет использовать как http, так и https-ссылки.

$post_link = get_the_permalink();
if ( preg_match('/<a (.+?)>/', get_the_content(), $match) ) {
    $link = array();
    foreach ( wp_kses_hair($match[1], array('https','http')) as $attr) {
        $link[$attr['name']] = $attr['value'];
    }
    $post_link = $link['href'];
}
 1
Author: Waleed, 2019-12-05 11:30:06