如何在前台显示友好的URL链接?

时间:2010-12-15 作者:David Bratvold

我正在创建一个单独的(简单的)目录,它不使用任何内部WP permalinks或pretty链接结构。我一直在研究如何为我网站的这一部分创建自己的自定义SEF URL,并且几乎拥有了它(或者我这么认为)。

我有一个单独的表,其中包含如下记录:

id   |   section    |  category   | co_name
1    |  Consulting  | Innovation  | Innocentive.com
2    |   Tasks      | Employment  | Microtask.com
....
目录显示包含所有部分的页面&;此URL处的数据库中的类别:dailycrowdsource。com/companies/(我用一个companies.php文件创建了一个带有“companies”的“页面”)

我希望此URL显示所有“就业”类别列表:dailycrowdsource。com/公司/任务/就业/

我可以处理php&;mySQL,但我不知道如何使链接美观。这很有效http://dailycrowdsource.com/companies/?category=poll

这很有帮助using an extra parameter in an URL, &;我想我成功了,但我不知道如何转换<;a href=。。。。进入SEF链接。

我更喜欢在我的功能中这样做。php文件,因为我还没有编写插件。我在Joomla用路由器做了这件事。php文件。

在我的研究中(Need help with friendly URL\'s in Wordpress, Custom Post Type Rewrite Rule for Author & Paging?, Rewrite API ), 我看到了很多相同的标签&;但没有人解释如何更改实际链接。WP是否自动执行?(在Joomla中,您必须执行:JRoute::_(\'index.php?var1=great&var2=more\');进行转换。)

我意识到第一个答案会告诉我使用一些内置的WP分类法,但我需要很容易地更新它。通过向数据库中添加一条带有全新分区或类别的记录,我的目录需要立即更新(这就是为什么我选择了这种方法-无需管理)。

如果有人告诉我如何添加挂钩/过滤器等来创建自定义SEF URL,我将不胜感激。(所有URL将以dailycrowdsource.com/companies/开头)。(我希望迈克·辛克尔(MikeSchinkel)读到这篇文章,因为他对类似帖子的回复给了我很多帮助)

谢谢你,大卫

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

修改URL结构通常由两部分组成:一部分修改用代码生成的URL,另一部分处理新结构的传入URL。后一部分是通过修改重写规则来完成的。

我刚刚在中详细解释了相关的重写功能a response to a similar question, 下面是针对您的情况的代码:

add_action( \'init\', \'wpa5444_init\' );
function wpa5444_init()
{
    // Remember to flush the rules once manually after you added this code!
    add_rewrite_rule(
        // The regex to match the incoming URL
        \'companies/tasks/([^/]+)/?\',
        // The resulting internal URL: `index.php` because we still use WordPress
        // `pagename` because we use this WordPress page
        // `category_slug` because we assign the first captured regex part to this variable
        \'index.php?pagename=companies&category_slug=$matches[1]\',
        // This is a rather specific URL, so we add it to the top of the list
        // Otherwise, the "catch-all" rules at the bottom (for pages and attachments) will "win"
        \'top\' );
}

add_filter( \'query_vars\', \'wpa5444_query_vars\' );
function wpa5444_query_vars( $query_vars )
{
    $query_vars[] = \'company_slug\';
    return $query_vars;
}
第一部分,编写与这个新的漂亮结构相匹配的URL,不是捆绑在一个地方,而是分布在生成URL的所有函数上。您需要自己编写一个函数来处理您的案例,因为您生成了一个页面URL并向其中添加了类别部分。它可能是这样的:

function wpse5444_company_link( $category_slug = \'\' )
{
    $company_page_id = 42; // Somehow convert the page slug to page ID
    $link = get_page_link( $company_page_id );
    if ( $category_slug ) {
        // trailingslashit() makes sure $link ends with a \'/\'
        $link = trailingslashit( $link ) . \'tasks/\' . $category_slug;
        // user_trailingslashit() adds a final \'/\' if the settings require this,
        // otherwise it is removed
        $link = user_trailingslashit( $link );
    }
    return $link;
}

结束

相关推荐

Changing attachment urls?

如何更改附件页URL的格式/[post-url]/[attachment-name]/ 到/media/[attachment-name]/? 我知道我可以覆盖get_attachment_link 通过attachment_link 过滤器,但我想我需要更改重定向结构,以便WordPress知道如何处理这些URL?