使用WP_REWRITE访问或编辑自定义生成的固定链接

时间:2016-03-06 作者:ronnyrr

我想使用WP_Rewrite. 我找到了codex 他们有很好的例子和this stack topic 也向我解释了很多。

目前,我得到了以下基于codex的代码,并从堆栈溢出问题中更新了3:

add_filter( \'rewrite_rules_array\', \'custom_permalinks\' );
add_filter( \'query_vars\', \'custom_query_vars\' );
add_action( \'wp_loaded\', \'custom_flush_rules\' );

function custom_flush_rules() {
    $rules = get_option( \'rewrite_rules\' );
    if( !isset($rules[\'(employees)/([^/]*)$\']) ) {
        global $wp_rewrite;
        $wp_rewrite->flush_rules();
    }
}

function custom_permalinks( $rules ) {
    $newrules = array();
    $newrules[\'(employees)/([^/]*)$\'] = \'index.php?pagename=employees&employees_slug=$matches[1]\';

    return $newrules + $rules;
}

function custom_query_vars( $vars ) {
    array_push($vars, \'employees_slug\');
    return $vars;
}
当我访问时/employees/name_of_the_employee/ 访问时显示相同的页面/employees, 因此没有显示404页(这意味着应用了新的重写规则)。但当我print_r($_GET) 打印空数组。我也不知道如何为/name_of_the_employee 页而不是父页。

在里面this stack topic 有一个参考get_query_var(\'employees_slug\') 但不是打印员工姓名,而是父页面slug/employees 显示。。

任何人都可以告诉我如何使用模板访问新的子页面,或者在显示时如何查看?

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

查询变量不以$_GET, 使用get_query_var() 获取或检查由重写规则设置的自定义查询变量的值。

您的规则当前正在返回employeesemployees_slug 因为您的规则有两个捕获组employees_slug 持有于$matches[2], 不$matches[1]. 不过,第一个捕获组是不必要的,因此可以删除paren。

要应用模板,可以筛选page_template 并检查是否存在查询变量。

function wpd_employees_page_template( $template ){
    if( get_query_var( \'employees_slug\' ) ){
        $template = locate_template( \'employees.php\' );
    }
    return $template;
}
add_filter( \'page_template\', \'wpd_employees_page_template\' );
另请注意,添加规则的一种稍微简单的方法是通过add_rewrite_rule 连接到init 操作而非筛选rewrite_rules_array.

相关推荐

如何通过函数.php使applyFilters函数返回FALSE

因此,插件中有以下代码:if( window.wp.hooks.applyFilters( \'filtername\', true, $(this) ) ) { //do something } 在不编辑插件文件但使用函数的情况下,如何使上述语句始终为false。改为php?我不确定我是否正确理解applyfilters,但我尝试过:function filtername() { return false; } add_filter( \'fil