本功能一般用于wordpress后台展示出所有文章后,通过分类进行筛选出相关文章。
那么,要做这个功能的时候,想必您已经创建了自定义文章类型和相关分类了。
即:custom post type 和 taxonomy
为了更好得看懂下面的代码,在这里假设:
custom post type为carryon_jobs。(注:这个就是一个自定义文章类型的名字,具体要按您实际的自定义文章类型的名称来操作。)
taxonomy为jobs_category。(注:这个就是一个自定义文章分类的名字,具体要按您实际的自定义文章分类的名称来操作。)
实现这个功能所用的代码为:
//此部分功能是生成分类下拉菜单 add_action('restrict_manage_posts','my_post_type_filter',10,2); function my_post_type_filter($post_type, $which){ if('carryon_jobs' !== $post_type){ return; //check to make sure this is your cpt } $taxonomy_slug = 'jobs_category'; $taxonomy = get_taxonomy($taxonomy_slug); $selected = ''; $request_attr = 'jobs_category'; //this will show up in the url if ( isset($_REQUEST[$request_attr] ) ) { $selected = $_REQUEST[$request_attr]; //in case the current page is already filtered } wp_dropdown_categories(array( 'show_option_all' => __("Show All"), 'taxonomy' => $taxonomy_slug, 'name' => $request_attr, 'orderby' => 'name', 'selected' => $selected, 'hierarchical' => true, 'depth' => 5, 'show_count' => true, // Show number of post in parent term 'hide_empty' => false, // Don't show posts w/o terms )); } //此部分功能是列出指定分类下的所有文章 add_filter( 'parse_query', 'perform_filtering' ); function perform_filtering( $query ) { $qv = & $query->query_vars; if ( ( $qv[ 'jobs_category' ] ) && is_numeric( $qv[ 'jobs_category' ] ) ) { $term = get_term_by( 'id', $qv[ 'jobs_category' ], 'jobs_category' ); $qv[ 'jobs_category' ] = $term->slug; } }
那么,以上两组函数及hook都是在wordpress官网有所介绍的。
参考:
restrict_manage_posts的用法:
请参阅:https://developer.wordpress.org/reference/hooks/restrict_manage_posts/
parse_query的用法:
请参阅:https://codex.wordpress.org/Plugin_API/Action_Reference/parse_query
评论区
发表新的留言
您可以留言提出您的疑问或建议。
您的留言得到回复时,会通过您填写的邮箱提醒您。