Help with a custom rewrite

时间:2011-09-03 作者:v0idless

以下是single的一个片段。php

                                    </div>
                                    <?php endif; ?>
                            <?php 
                                    if($_GET[\'m\'] != "gallery") {
                                            the_content();
                                    else {
                                            echo do_shortcode(\'[gallery link="file"]\');
                                    }
                            ?>      

                                    <?php wp_link_pages(); ?>

                                    <div class=\'clear\'></div>
那么如果我附加?m=gallery到它将转换为单个的URL。php变成一个图库,否则它会显示正常的内容。我想知道如何重写?m=画廊到画廊/画廊。我正在使用/%category%/%postname%/ 作为自定义permalink结构。我想/%category%/%postname%/%m% 其中%m%是$\\u GET[\'m\']。My htaccess具有以下功能:

    RewriteEngine On


    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>

    # END WordPress
非常感谢您的帮助。谢谢

1 个回复
最合适的回答,由SO网友:chrisguitarguy 整理而成

您最好使用WordPress重写API。不需要htaccess。

首先,钩入init 并将重写端点添加到永久链接。这告诉WordPress,当一些访问/category/post-slug/gallery 匹配新端点重写。它还负责为您添加查询变量,这样您就不必这样做了。

<?php
add_action( \'init\', \'wpse27638_add_rewrite\' );
function wpse27638_add_rewrite()
{
    add_rewrite_endpoint( \'gallery\', EP_PERMALINK );    
}
接下来,我们必须对端点系统进行一些黑客攻击,因为当有人访问时,它不会自动工作some-permalink/some-endpoint: 您的新查询变量(gallery) 仅在有人访问时才包含值category/permalink/gallery/something. 不太好。所以我们request. 如果我们的新gallery 设置查询变量后,我们将使其始终设置为true。

<?php
add_filter( \'request\', \'wpse27638_request\' );
function wpse27638_request( $vars )
{
    if( isset( $vars[\'gallery\'] ) ) $vars[\'gallery\'] = true;
    return $vars;   
}
接下来,我们需要the_content. 如果设置了新的查询变量,我们将返回一个库短代码来代替内容。否则,我们将只返回内容。您可以删除if else 来自的声明single.php 然后放进去the_content 取而代之。

<?php
add_filter( \'the_content\', \'wpse27638_content_filter\' );
function wpse27638_content_filter( $content )
{   
    if( ! is_singular() ) return $content;
    if( get_query_var( \'gallery\' ) )
    {
        return \'[gallery link="file"]\'; 
    }
    else
    {
        return $content;        
    }
}
我们的插件只做了最后一步。添加新端点并刷新激活时的重写规则。并在停用时再次刷新重写规则。

<?php
register_activation_hook( __FILE__, \'wpse27638_activation\' );
function wpse27638_activation()
{
    wpse27638_add_rewrite();
    flush_rewrite_rules();  
}

register_deactivation_hook( __FILE__, \'wpse27638_deactivation\' );
function wpse27638_deactivation()
{
    flush_rewrite_rules();
}
以下是作为插件的唯一内容(随时可用):https://gist.github.com/1191865

结束

相关推荐

WordPress HTAccess正在劫持我的.mp4文件

我正在运行wordpress 3.2rc2多站点。我插入了一些。mp4视频进入我的域的根目录,以便我可以使用jw播放器运行一些基本测试。当我尝试访问的url时。mp4视频,我不知何故最终得到了wordpress 404页面。这也会导致jw播放器内部出现错误,称未找到文件或访问被拒绝。mp4文件的权限为644,所有者/组正确。为什么会发生这种情况?我该如何修复它,以便wordpress不再干扰我的mp4文件?另外:有人可以添加mp4标签吗,我还没有足够的代表来做这件事。这是我的htaccess文件:Rewr