根目录下的Wordpress自定义帖子类型永久链接

时间:2013-08-15 07:50:04

标签: content-management-system wordpress-plugin wordpress

我在我的网络服务器上的/ blog /目录中安装了wordpress,因此Wordpress主页位于,例如http://www.example.com/blog/

我正在为内容管理创建一些自定义帖子类型。我希望“产品”自定义类型的网址为http://www.example.com/product/ ...并且“人员”自定义类型为http://www.example.com/people/ ...

现在服务器端这很简单。问题是让Wordpress生成(重写)永久链接,因此它们位于Wordpress安装/根目录(/ home / site / public_html / blog - > http://www.example.com/blog/)之下。

我可以通过使用PHP输出缓冲区来搜索n替换,以便将字符串“http://www.example.com/blog/product”替换为“http://www.example.com/product”,但这很麻烦,会耗尽很多更多内存。如果有正式或正确的非黑客方式,我宁愿这样做。

有谁知道怎么做?

1 个答案:

答案 0 :(得分:0)

如果WordPress同时处理博客以及产品和人员的页面,您可能需要重新考虑文件夹结构。您仍然可以保留大部分WordPress(/blog/子目录),并将其index.php.htaccess文件移到根目录。请参阅Giving WordPress Its Own Directory: Using a pre-existing subdirectory install

话虽这么说,如果你真的不想移动任何东西,那么你需要一个更复杂的程序化解决方案。为此,您需要使用WordPress Rewrite API。诀窍是使用其各种函数(add_rewrite_ruleadd_rewrite_tag等)来创建WordPress将识别的一组规则,然后在您的网站的根目录中编写您自己的.htaccess文件,在WordPress根文件夹上方。

所以,如果你做了这样的事......

<?php
// Set up the higher-level (non-WordPress) rewrite rules
// so that you redirect non-WP requests to your own WP install.
function make_my_redirects () {
    global $wp_rewrite;
    add_rewrite_rule('^product/', '/blog/index.php?post_type=product', 'top');
    add_rewrite_rule('^people/', '/blog/index.php?post_type=people', 'top');

    // Save original values used by mod_rewrite_rules() for reference.
    $wp_home = home_url(); // get the old home
    update_option('home', '/'); // change to what you need
    $wp_index = $wp_rewrite->index;
    $wp_rewrite->index = 'blog/index.php';

    // Then actually call generate the .htaccess file rules as a string.
    $htaccess = $wp_rewrite->mod_rewrite_rules();

    // and write the string outside the WordPress root.
    file_put_contents(
        trailingslashit(dirname(ABSPATH)) . '.htaccess',
        $htaccess,
        FILE_APPEND
    );

    // Don't forget to set the original values back. :)
    $wp_rewrite->index = $wp_index;
    update_option('home', $wp_home);
}
register_activation_hook(__FILE__, 'make_my_redirects');

...那么你的/home/site/public_html/.htaccess文件中会有这样的内容:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^product/ /blog/index.php?post_type=product [QSA,L]
RewriteRule ^people/ /blog/index.php?post_type=people [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>

那么,有可能吗?是的,我猜。推荐吗?可能不是。 :)更容易为WordPress提供自己的目录。