如何获取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 );
0
Say Something!