Wordpress-将过滤器设置保存到cookie中


Wordpress - save filter settings into cookie

我在Wordpress中有自定义的帖子类型,带有自定义过滤器。

我希望能够将用户的过滤器保存到cookie中,这样当他回到帖子列表时,他的最后一个过滤器就会自动设置。

我有这个保存cookie的代码:

function set_newuser_cookie() {
    if ( is_admin() && $_GET['post_type'] == 'tickets') {
        setcookie('bs_tickets_filter', $_SERVER['QUERY_STRING'], time()+3600*24*100, COOKIEPATH, COOKIE_DOMAIN, false);
    }
}
add_action( 'init', 'set_newuser_cookie'); 

这段代码将整个查询字符串保存到cookie中,类似于:

orderby=status&order=asc&s&post_status=all&post_type=tickets&action=-1&m=0&status=0&type=0&priority=0&state=2135&author&paged=1&mode=list&action2=-1

当用户返回帖子列表时,我如何再次设置过滤器?

我想我解决了这个问题:

function bs_set_filter_cookie() {
    if ( is_admin() && $_GET['post_type'] == 'tickets' ) {
      // if theres filter request, update cookie
      if (isset($_GET['status'])) {
        $query = http_build_query($_GET); 
        setcookie('bs_tickets_filter', $query, time()+3600*24*100, COOKIEPATH, COOKIE_DOMAIN, false);
   }
  }
  // if there's no filter request, add variable to $_GET
  if (!isset($_GET['status'])) {
     parse_str($_COOKIE["bs_tickets_filter"], $output);
     foreach ($output as $key => $val) {
        $_GET[$key] = $val;
     }
  }
}
add_action( 'init', 'bs_set_filter_cookie'); 

刚刚发现类似的东西的用途-只是在我希望WP记住我的过滤器的常规类别中。

add_action( 'init', 'set_filter_cookie'); 
function set_filter_cookie() {
    if (is_admin() && !empty($_GET)) {
        $cur_php = basename($_SERVER['PHP_SELF']);
        if ( $cur_php == "edit.php" && isset($_GET['post_type']) ){
            if ( $_GET['post_type'] == 'page' ) { 
                // if theres filter request, update cookie
                if (isset($_GET['cat'])) {
                    $query = http_build_query($_GET); 
                    setcookie(category_filter', $query, time()+3600*24*100, COOKIEPATH, COOKIE_DOMAIN, false);
                }
                // if there's no filter request, add variable to $_GET we look for cookie
                if (!isset($_GET['cat'])) {
                    if(isset($_COOKIE['category_filter'])) {
                        parse_str($_COOKIE['category_filter'], $output);
                        foreach ($output as $key => $val) {
                            $_GET[$key] = $val;
                        }
                    }
                }
            }       
        }
    }
}