2009-12-31 110 views
1

當然,我也可以隨時修改WordPress的.htaccess文件,但會有種讓我的WP插件有點不標準。相反,在WordPress中通過自定義插件劫持URL的方式是什麼?插件如何在WordPress中劫持URL?

舉例來說,假設我想建立一個可以安裝在WordPress的插件,一個精心製作的產品目錄。一旦被激活,你可以進入插件的管理面板,並告訴它,所有以「/ catalog」(或任何你選擇的)開頭的URL都會轉到該產品目錄應用程序。現在應用程序將駐留在wp-content/plugins/mycatalog文件夾中。因此,/ catalog/product/400會轉到wp-content/plugins/mycatalog/app.php,然後它會從URL中解析「product」和「400」。

回答

1

我在路的wp-content /插件/劫持創建的插件文件夾,然後裏面卡住這個文件plugin.php。

<?php 
/* 
Plugin Name: Hijack 
Plugin URI: http://example.com/contact 
Description: Sample URL Hijacker Plugin 
Author: John Doe 
Version: 1.1 
Author URI: http://example.com/contact 
*/ 

add_filter('init','Hijack'); 

function Hijack() { 
    $URL = get_bloginfo('wpurl'); 
    $PLUGIN = $_SERVER['SCRIPT_FILENAME']; 
    $PLUGIN = str_replace('/index.php','',$PLUGIN); 
    $PLUGIN = $PLUGIN . '/wp-content/plugins/hijack'; 

    $sHijack = '/catalog'; 

    $sURL = $_SERVER['REDIRECT_URL']; 
    if (strpos(' ' . $sURL,$sHijack)>0) { 
     $sYank = $URL; 
     $sYank = str_replace('http://','',$sYank); 
     $sYank = str_replace('https://','',$sYank); 
     $sYank = str_replace($_SERVER['SERVER_NAME'] . '/','',$sYank); 
     $sYank = $sYank . $sHijack; 
     $sTemp = str_replace($sYank,'',$sURL); 
     $sTemp = str_replace($sYank . '/','',$sTemp); 
     $sTemp = str_replace('//','/',$sTemp); 
     if ((substr($sTemp,-1,1) == '/') and ($sTemp != '/')) { 
      $sTemp = substr($sTemp, 0, -1); 
     } 
     define('VARS',$sTemp); 
     include($PLUGIN . '/index.php'); 
     exit(0); 
    } 
} 

然後,從那裏,我加入可溼性粉劑內容/插件/劫持/ index.php的只是一個測試用例以及使用該代碼:

<?php 

echo VARS; 
echo "<br />\n"; 
print_r($_GET); 

在該點,當所述插件被激活,我可以將/ catalog,/ catalog/products/400等所有URL重定向到我的劫持插件文件夾中的index.php文件,然後index.php會像我的Web應用的前端控制器一樣加載WordPress的。 (我希望您熟悉PHP編程的MVC模型。)然後可以重寫前端控制器,以根據VARS中的內容調用頁面控制器。

+1

你應該看看add_rewrite_rule功能和query_vars過濾器。它僅僅是爲了這個目的。 – jmacinnes 2012-12-12 13:43:56

0

我不確定我是否完全明白你想要什麼,但是你總是可以使用$_SERVER['REQUEST_URI']檢查請求的PHP文檔的URL,並使用諸如parse_urlexplode("/", $_SERVER['REQUEST_URI'])之類的東西來剖析它。

至於重定向你可以使用一個header()調用與HTTP重定向或元重定向的頁面。沒有一個具體的WordPress雖然。該redirection插件可能做你需要什麼:

http://wordpress.org/extend/plugins/redirection/