WordPress修改所有文章的鏈接
WordPress使用過濾器add_filter()修改所有文章的鏈接。
DistantMemory
DistantMemory

有某個客戶需求,要把WordPress網站所有文章的鏈接地址全部換成一個指定的外部鏈接,還要自己可以在后臺隨時更換鏈接地址。

當然,我不知道客戶想要干什么,總之客戶的需求去實現就對了。


收到客戶的需求后,馬上有一個思路:

1、后臺添加選項用于輸入外部鏈接地址。

2、修改客戶使用的主題文件,讀取后臺輸入的鏈接地址,替換掉所有A標簽中原來的鏈接地址。


看起來應該是解決了客戶需求了,不過細想一下,還是有存在一些問題的:

1、客戶在后臺升級了主題怎么辦?每升級一次再修改一次代碼?

2、客戶在其他地方調用了文章怎么辦?比如用了小工具什么的在邊欄或者底部來顯示文章。


于是就產生了第二個思路:

1、同上,后臺加個選項用來輸入外部鏈接地址。

2、使用WordPress的 add_filter() 過濾器函數,替換文章的鏈接地址。


具體代碼如下:

1、添加一個設置選項用來輸入外部鏈接的地址

/*=== 添加設置選項 ===*/
if ( ! function_exists( 'tm_add_options' ) ) :

    function tm_add_options() {

        register_setting( 'general', 'tm_article_link' );
        add_settings_field( 'tm_article_link', '<label for="tm_article_link">文章鏈接</label>', 'tm_article_link', 'general' );
        
    }

endif;

if ( ! function_exists( 'tm_article_link' ) ) :

    function tm_article_link() {

        $value = get_option( 'tm_article_link', '' );
        _e( '<input type="text" name="tm_article_link" id="tm_article_link" class="large-text" value="' . $value . '">' );
        echo '<p class="description">文章外部鏈接地址</p>';
        
    }

endif;

add_filter( 'admin_init' , 'tm_add_options' );



2、添加過濾器,替換文章鏈接

/*=== 替換文章鏈接 ===*/
if ( ! function_exists( 'timoo_replace_article_link' ) ) : 
    
    function timoo_replace_article_link( $url, $post, $leavename=false ){
        
        $url = get_option( 'tm_article_link', '' );
        return $url;
        
    }

endif;

add_filter( 'post_link', 'timoo_replace_article_link', 10, 3 );


完美!就算以后客戶不需要這個功能了,只要注釋掉 add_filter() 這個函數,就恢復原來的文章鏈接了,而且還不影響主題的升級。

甘肃快3,甘肃快三开奖结果,甘肃快三走势图