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');
新聞熱點
疑難解答
圖片精選