我在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;
}
}
}
}
}
}
}