Question

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; ?>
Was it helpful?

Solution

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'];
}
Licensed under: CC-BY-SA with attribution
Not affiliated with wordpress.stackexchange
scroll top