1

我需要将一个 URL 变量传递给我的category.php文件。
目前我的类别页面在http://example.com/category-slug/ 我正在使用 SEO 插件来重写http://example.com/category/category-slug和删除/category/部分。

此外,在设置菜单中将设置表单永久链接设置为此选项:http://example.com/sample-post/

现在我需要能够在 URL 中传递一个变量,例如:

http://example.com/category-slug/?type=VALUE 

或者

http://example.com/category-slug/VALUE

其中“type”是变量的名称,VALUE 是它的值

我尝试在我的functions.php文件中使用这段代码:

<?php    
   add_filter('query_vars', 'parameter_queryvars' );
   function parameter_queryvars( $qvars )
     {
        $qvars[] = 'type';
        return $qvars;
     }
    global $wp_query;
     if (isset($wp_query->query_vars['type']))
      {
        print $wp_query->query_vars['type'];
      }
?>

但是,当我尝试打开http://example.com/category-slug/?type=something或出现http://example.com/category-slug/something“未找到”和“未找到页面”页面时。

虽然我看到这个问题已经被反复讨论过,但似乎没有一个解决方案适合我的情况。
如何正确地将变量传递给类别页面?

4

1 回答 1

1

首先,您的代码永远不会到达 if 语句,因为您之前从函数返回。

我也不知道您使用的是哪种 SEO 工具,但有一个功能与“query_vars”过滤器一起使用:add_rewrite_rule()

我建议编写一个小插件来重写类别永久链接。像这样的东西(未经测试,但类似于我使用的插件):

// Flush added rewrite rules on activation
function category_permalink_rewrite_activate() {
    category_permalink_rewrite_set_rewrite_rules();
    flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'category_permalink_rewrite_activate' );

// Remove rewrite rule for event archives
function category_permalink_rewrite_deactivate() {
    flush_rewrite_rules(); 
}
register_deactivation_hook( __FILE__, 'category_permalink_rewrite_deactivate' );

// Add rewrite rule for category permalink on init
    add_rewrite_rule( '^category-(.*)/(.*)', 'index.php?category_name=$matches[1]&type=$matches[2]', 'top' );
kaufunction category_permalink_rewrite_set_rewrite_rules() {
}
add_filter( 'init', 'category_permalink_rewrite_set_rewrite_rules' );

// Register the custom query var so WP recognizes it
function category_permalink_rewrite_add_query_vars( $vars ) {
    $vars[] = 'type';
    return $vars;
}
add_filter( 'query_vars', 'category_permalink_rewrite_add_query_vars' );
于 2013-07-11T15:57:50.770 回答