0

I have my news in posts and I am trying to display the two latest news articles (posts) on my main page. I've got that solved by getting the title using the_title() and getting a little bit of the text using the_excerpt().

I want to show a more... link that takes you to the post. However, some of the news articles that I am posting have some text in the post body that's a link, how do I only get the link within the body of a post so that my more... link takes your there directly?

For example, sometimes we will link to news articles in PDFs that are on another server.

I'm using the following code.

<?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; ?>
1

You can scan the content to see whether it contains a link and then parse it to find the href attribute. There are many ways to do this, this example uses the built-in kses functionality, as demonstrated by Otto:

$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'];
}
  • Worked like a charm, sorry for the really late reply. – Beto Jun 28 '11 at 17:17
0

The above solution is perfect but it will only take http links. By using the below code it will take both http and https links.

$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'];
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.