Получить значение ссылки только из содержимого()?
У меня есть новости в сообщениях, и я пытаюсь отобразить две последние новостные статьи (сообщения) на своей главной странице. Я решил эту проблему, получив название с помощью 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; ?>
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'];
}
Приведенное выше решение идеально, но для него потребуются только 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'];
}