为页面使用自定义/动态“slug”

时间:2012-08-23 作者:Radley Sustaire

我有一个自定义页面,它使用一个名为“Stores”的模板http://example.com/stores/. 此页面将列出各州和/或公司的类别。对于这个系统,我有一个自定义的帖子类型“store”,可以分配给单个类别(州或公司),

每个门店都不是一个特定的页面,而是以一种电话簿样式的布局为各州/公司显示的联系信息。

我现在的问题是,如何允许我的“Stores”模板接受来自http://example.com/stores/california/ (没有抛出404错误)?

California 从这个意义上讲,它不是一个页面,而是一个查询。我也不想为这些类别中的每一个手动创建页面(因为它是从数据库中提取的,并且是自动的)。我可以用?state=california 为此,我想学习在wordpress中允许此URL的正确方法。

手动编辑htaccess文件的正确方法是什么?如果您编辑permalink结构,这不会被覆盖吗?如何格式化htaccess?

4 个回复
最合适的回答,由SO网友:Brian Fegter 整理而成

创建一个页面模板,添加一个新页面并为其添加slugstores

添加公共查询变量

add_filter(\'query_vars\', \'add_state_var\', 0, 1);
function add_state_var($vars){
    $vars[] = \'state\';
    return $vars;
}
添加重写规则这会将您的请求定向到stores

add_rewrite_rule(\'^stores/([^/]*)/?\',\'index.php?post_type=page&name=stores&state=$matches[1]\',\'top\');
在模板中,您可以访问状态变量,如下所示:

 $state = get_query_var(\'state\');
刷新永久链接访问设置->永久链接以刷新永久链接并将重写规则添加到堆栈中。

SO网友:Jared Pomranky

我在Wordpress的网站上找到了答案,并测试了解决方案:https://codex.wordpress.org/Rewrite_API/add_rewrite_rule#Using_Custom_Templates_with_custom_querystring

创建页面模板为门店创建页面模板并将其应用于页面。

$stores = get_query_var(\'stores\');
在函数中添加重写标记。php添加一个重写标记,让Wordpress知道如何查找特定的标记

function custom_rewrite_tag() {
  add_rewrite_tag(\'%stores%\', \'([^&]+)\');
}
add_action(\'init\', \'custom_rewrite_tag\', 10, 0);
现在添加重写规则以格式化URL并将其指向索引。php使用变量,在函数中输入以下内容。php。Note: You have to update the page_id to the page_id of the stores page (it\'s 12 in this example).

  function custom_rewrite_rule() {
    add_rewrite_rule(\'^stores/([^/]*)/?\',\'index.php?page_id=12&stores=$matches[1]\',\'top\');
  }
  add_action(\'init\', \'custom_rewrite_rule\', 10, 0);
从那里你可以浏览到/stores/south dakota/页面模板中的$stores变量将是“south dakota”。

SO网友:Nayan

我也试着做同样的事情,最后还是按照下面的方式做了。

将以下代码添加到函数中。主题中的php。

add_filter(\'query_vars\', \'add_state_var\', 0, 1);
function add_state_var($vars){
    $vars[] = \'state\';
    return $vars;
}

add_rewrite_rule(\'^stores/([^/]+)/?$\',\'index.php?pagename=stores&state=$matches[1]\',\'top\');
在模板中,使用以下命令获取查询变量

$state = get_query_var(\'state\');

SO网友:user214688

下面是管理动态slug并为其分配模板的工作示例:

动态管理自定义端点或slug,或在文件中定义它

/** set rewrite rule for custom userlist-table */

$customendpoint = get_option(\'dynamic_slug_custom_endpoint\');
 
add_action(\'init\', \'setRewriteRule);

function setRewriterule() {
    add_rewrite_rule($customendpoint . \'/?\', \'index.php?\' . $customendpoint . \'=parent-xml-page\', \'top\');
}
/**白名单特定查询参数**/

add_filter(\'query_vars\', \'getQueryvar\');

public function getQueryvar($query_vars) {
    $query_vars[] = $customendpoint;
    return $query_vars;
}
包括该段塞的自定义模板:

 /** Check query param and redirect it to template file * */

add_action(\'template_include\',  \'redirectTemplate\');

function redirectTemplate($template) {

    if (get_query_var($customendpoint == false || get_query_var($customendpoint == \'\') {
        return $template;
    }

    return  \'your-template.php\';
}

结束