wordpress开发的项目越多,接触到的深层的东西就越多,比如各种post type 和coustom taxonomy 的定义,过滤,查询等等,这次帮北京一个客户使用wordpress开发一个企业应用,非常类似erp,使用wordpress做erp我还是第一次,而且还有很多很奇怪的需求.
比如这次,在供应商管理里,我把供应商做成了一个自定义内容类型,自定义类型中还有自定义分类,客户要对自定义分类还要显示一个过滤器,比如默认的按月分类.
找了很久,终于找到下面的代码可以解决,利用到了wordpress的一个action(动作)和一个filter(过滤器),实例代码如下:
- function work_restrict_manage_posts() {
- global $typenow;
- $args=array( 'public' => true, '_builtin' => false );
- $post_types = get_post_types($args);
- if ( in_array($typenow, $post_types) ) {
- $filters = get_object_taxonomies($typenow);
- foreach ($filters as $tax_slug) {
- $tax_obj = get_taxonomy($tax_slug);
- wp_dropdown_categories(array(
- 'show_option_all' => __('所有 '.$tax_obj->label ),
- 'taxonomy' => $tax_slug,
- 'name' => $tax_obj->name,
- 'orderby' => 'term_order',
- 'selected' => $_GET[$tax_obj->query_var],
- 'hierarchical' => $tax_obj->hierarchical,
- 'show_count' => false,
- 'hide_empty' => false
- ));
- }
- }
- }
- function work_convert_restrict($query) {
- global $pagenow;
- global $typenow;
- if ($pagenow=='edit.php') {
- $filters = get_object_taxonomies($typenow);
- foreach ($filters as $tax_slug) {
- $var = &$query->query_vars[$tax_slug];
- if ( isset($var) && $var>0) {
- $term = get_term_by('id',$var,$tax_slug);
- $var = $term->slug;
- }
- }
- }
- return $query;
- }
- add_action( 'restrict_manage_posts', 'work_restrict_manage_posts' );
- add_filter('parse_query','work_convert_restrict');
新闻热点
疑难解答
图片精选