如何获取WordPress文章中的第一条外链?

因为老Q比较懒,写文章的时候,不喜欢将外链地址,不喜欢将外链地址单价要粘贴到Custom Fields。 更是喜欢注重在文章内容上,所以在插入外链地址到文章里的时候,不喜欢特别去处理;
另外一点就是老Q站有一个分类专门是用来整理所有的工具的链接地址的, 所以我喜欢需要将最重要的,需要展示出来的外链网址放到文章中第一条就行了,后台自动会抓取这一条来展示。

最先使用的是以下代码,这个代码有几个问题:

  • 如果第一条链接是站内链接,它无法识别出来
  • 要展示的外链地址必须要放在所有链接的前面,也就是第一条
  • 另外使用的是get_the_content()函数,它会识别More标签,从而可能只在More前面内容查找链接,而得不到文章中的所有链接

function colinqi_get_link_url() {
$content = get_the_content();
$has_url = get_url_in_content( $content );
$colinqi = cq_get_root_domain();

//return ( $has_url ) ? $has_url : apply_filters( 'the_permalink', get_permalink() );
if( strpos( $has_url, '#more-' ) == false ) {
return $has_url;
}
}

更新后的代码如下,它的优点是:

    • 会自动识别内链地址,而不显示
    • 会自动搜索整篇文章内的链接,过滤了More标签
    • 外链地址可以不放在内链地址前面,要展示的外链地址只要放在其它外链前面就行

// Get first url from content
function colinqi_get_link_url() {
$query = get_post(get_the_ID()); 
$content = apply_filters('the_content', $query->post_content);
$colinqi = cq_get_root_domain();

if ( empty( $content) || empty( $colinqi ) ) {
return false;
}
$urls = wp_extract_urls( $content );
foreach ($urls as $val) {
if ( stripos( $val, $colinqi ) == false) {
return $val;
break;
} 
} 
}
function cq_get_root_domain() {
$url_parts = parse_url( cq_get_main_site_url() );
if ( $url_parts && isset( $url_parts['host'] ) ) {
return $url_parts['host'];
}
return false;
}
function cq_get_main_site_url() {
global $current_site;
if ( is_multisite() && $current_site ) {
$main_site_blog_id = $current_site->blog_id;
return get_home_url( $main_site_blog_id );
}
return home_url();
}

感觉好啰唆,打住。

后注:

wp_extract_url( $content) 搜寻的网址种类比较多,如果只是单纯的搜寻网址,建议用以下代码


$regex = '/<a\s[^>]*?href=([\'"])(.+?)\1/is';
preg_match_all($regex, $content, $post_links ); 
$post_links = array_unique( array_map( 'html_entity_decode', $post_links[2] ) ); 
$urls = array_values( $post_links );
« 利用爬虫XPath来获取客户网址的工具:Scraper 专利信息服务平台 »

Say Something!

Leave a Reply