北极寒流 » 网络资源 » wordpress站内链接跳转到外部链接实现方法 - 2013.09.17

wordpress站内链接跳转到外部链接实现方法

再收藏一篇wordpress站内链接跳转到外部链接的实现方法。今天分享的外链转内链功能,主要是依靠wordpress的自定义域功能来实现。

1、添加外部链接

先给文章添加一个自定义字段用来输入一个要跳转的站外链接(自定义这里不详细介绍,大家可以自行百度)我们添加了一个名为_buy_link的自定义字段,用来输入我们的站外链接。

2、将站内链接重写到主题的go.php处理文件
在主题中新建一个go.php文件,然后在functins.php文件中添加下列代码:

//为不带http的地址添加 http  
function addhttp($url) {  
    if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {  
        $url = "http://" . $url;  
    }  
    return $url;  
}  
/********添加query变量************/ 
function ashuwp_query_vars($public_query_vars) {  
    $public_query_vars[] = 'my_custom_page_type';   
    $public_query_vars[] = 'pid';  
    return $public_query_vars;    
}  
/************重写规则*************/ 
function ashuwp_rewrite_rules( $wp_rewrite ){  
$new_rules = array(  
'go/?([0-9]{1,})/?$' => 'index.php?my_custom_page_type=buy_page&pid='.$wp_rewrite->preg_index(1),  
);  
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;  
}  
/************模板载入规则****************/ 
function ashuwp_template_redirect(){  
    global $wp,$wp_query,$wp_rewrite;  
    if( !isset($wp_query->query_vars['my_custom_page_type']) )  
        return;  
    $reditect_page =  $wp_query->query_vars['my_custom_page_type'];  
    if ($reditect_page == "buy_page"){  
        include(get_template_directory().'/go.php');  
        die();  
    }  
}  
/*********更新重写规则***************/ 
function ashuwp_flush_rewrite_rules() {  
    global $pagenow, $wp_rewrite;  
    if ( 'themes.php' == $pagenow && isset( $_GET['activated'] ) )  
        $wp_rewrite->flush_rules();  
}  
add_action( 'load-themes.php', 'ashuwp_flush_rewrite_rules' ); //启用主题的时候  
add_action('generate_rewrite_rules', 'ashuwp_rewrite_rules' ); //添加重写规则  
add_action('query_vars', 'ashuwp_query_vars');    
add_action("template_redirect", 'ashuwp_template_redirect');

上面的代码将站内所有类似 http://xxx.com/go/xxx 这种地址重写载入go.php文件来处理。

3、添加go.php中的跳转代码。

提供两种方式,任选一种即可。

第一种:通过js来跳转。

<?php     
/*******跳转模板*******/    
global $wp_rewrite,$wp_query;     
//从请求的地址中获取文章ID     
if( isset($wp_query->query_vars['pid']) && $wp_query->query_vars['pid']!='' )     
    $post_id = $wp_query->query_vars['pid'];     
else    
    $post_id = 0;     
//如果文章ID存在     
if( $post_id ){     
    //通过文章ID获取要跳转的站外链接--自定义字段     
    $buy_link = get_post_meta($post_id,'_buy_link',true);  
    $buy_link = htmlspecialchars_decode($buy_link);//将html实体换回预定义字符  
    $buy_link = trim($buy_link);  
    $buy_link = addhttp(trim($buy_link));  
    if($buy_link){ ?>     
        <?php //跳转到对应的链接?>     
        <script type="text/javascript">window.location.href="<?php echo $buy_link;?>";</script>     
    <?php }else{ ?>     
        <?php //如果没有设置跳转到奥首页?>     
        <script type="text/javascript">window.location.href="<?php echo home_url();?>";</script>     
    <?php }     
}else{ ?>     
<?php //无ID则跳转到首页 ?>     
    <script type="text/javascript">window.location.href="<?php echo home_url();?>";</script>     
<?php } ?>

第二种,使用wp_redirect函数

<?php  
/*******跳转模板*******/ 
global $wp_rewrite,$wp_query;  
//从请求的地址中获取文章ID  
if( isset($wp_query->query_vars['pid']) && $wp_query->query_vars['pid']!='' )  
    $post_id = $wp_query->query_vars['pid'];  
else 
    $post_id = 0;  
if( $post_id ){  
    //获取跳转链接  
    $buy_link = get_post_meta($post_id,'_buy_link',true);  
    $buy_link = htmlspecialchars_decode($buy_link);//将html实体换回预定义字符  
    $buy_link = trim($buy_link);  
    $buy_link = addhttp(trim($buy_link));  
    if($buy_link){  
        //跳转  
        wp_redirect($buy_link, 301);  
    }else{  
        //跳转到首页  
        wp_redirect(get_bloginfo('url'), 301);  
    }  
}else{  
    //无ID则重定向到首页  
    wp_redirect(get_bloginfo('url'), 301);  
} ?> 

用法:http://www.articn.com/go/xxx 这样的地址就会自动调用跳转规则进行跳转(其中XXX为文章的id),其他具体应用大家可以自行摸索,本站目前采用的非此种跳转。

最受欢迎的