2009-12-31 111 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/