我在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
当用户返回帖子列表时,如何再次设置过滤器?
答案 0 :(得分:0)
我想我解决了这个问题:
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');
答案 1 :(得分:0)
刚刚发现用于类似的东西 - 只是常规类别,我希望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;
}
}
}
}
}
}
}