2017-07-16 31 views
0

我有一個Wordpress網站,有幾種產品。它們被添加爲帖子(只是將標籤更改爲產品),並且它們有兩個自定義分類法。我添加了一個下拉菜單,爲每個下面的代碼管理後屏幕上這些自定義分類法:在Wordpress上過濾帶有自定義分類法的帖子管理

add_action('restrict_manage_posts', 'product_type_filter'); 
function product_type_filter() { 
    global $typenow; 
    $post_type = 'post'; 
    $taxonomies = array('linha','aplicacoes'); 
    if ($typenow == $post_type) { 
    foreach ($taxonomies as $taxonomy) { 
     $selected = isset($_GET[$taxonomy]) ? $_GET[$taxonomy] : ''; 
     $info_taxonomy = get_taxonomy($taxonomy); 
     wp_dropdown_categories(
     array(
      'show_option_all' => __("Todas as {$info_taxonomy->label}"), 
      'taxonomy' => $taxonomy, 
      'name' => $taxonomy, 
      'orderby' => 'name', 
      'selected' => $selected, 
      'value_field' => 'slug', 
      'show_count' => false, 
      'hide_empty' => true, 
     ) 
    ); 
    } 
    }; 
} 

這是創建和正確顯示2個下拉菜單(見截圖附後)。問題是,當您選擇該下拉列表的選項並點擊過濾器來過濾產品時,結果往往是錯誤的。我說通常是,因爲對於某些特定的分類法,過濾器起作用,這真的讓我感到困擾。是的,下拉菜單中顯示的每個選項都分配了產品。

wordpress admin post page screenshot

我設法注意到,過濾後的網址提交這個樣子的(當它的工作原理)來理解這個問題:

http://www.mysitedomain.com.br/wp-admin/edit.php?post_status=all&post_type=post&m=0&cat=0&lang=pt-br&linha=embare-cle-redonda&filter_action=Filtrar&paged=1 

而且像這樣(當它返回時沒有職位,儘管事實上有帖子顯示符合標準):

http://www.mysitedomain.com.br/wp-admin/edit.php?s&post_status=all&post_type=post&action=-1&m=0&cat=0&lang=pt-br&linha=puruba&filter_action=Filtrar&paged=1&action2=-1 

注意這個搜索參數添加到第二個url的開始? /wp-admin/edit.php? 小號& post_status =所有& post_type =交&行動= -1 & m = 0的&貓= 0 & LANG = PT-BR & linha = puruba & filter_action = Filtrar &尋呼= 1 &動作2 = -1

如果我刪除該參數,則加載正確的帖子。任何人都有如何解決這個問題的線索?我想這是一個WordPress的核心問題,但我不知道爲什麼它只發生在每個分類的某些條款。

順便說一句我跑的WordPress 4.8

回答

0

你可以嘗試添加一個後此功能,您有嗎?

function filterPosts($query) { 

global $pagenow; 

$qv =& $query->query_vars; 

if (
    $pagenow == 'edit.php' && 
    isset($qv['tax-slux']) && 
    ctype_digit($qv['tax-slug']) // stricter than is_numeric() 
) { 
    if ($term = get_term_by('id', $qv['tax-slug'], 'tax-slug')) { 
     $qv['tax-slug'] = $term->slug; 
    } 
} 
} 
add_filter('parse_query', 'filterPosts'); 

編輯:

下面是完整的功能,對我和我的自定義後類型

function filterSomePosts() { 
    global $typenow; 
    $post_type = 'post_type'; 
    $taxonomy = 'some-taxonomy'; 
    if ($typenow == $post_type) { 
    $selected  = isset($_GET[$taxonomy]) ? $_GET[$taxonomy] : ''; 
    $info_taxonomy = get_taxonomy($taxonomy); 
    wp_dropdown_categories(array(
     'show_option_all' => __("Filter by some posts"), 
     'taxonomy'  => $taxonomy, 
     'name'   => $taxonomy, 
     'orderby'   => 'name', 
     'selected'  => $wp_query->query[$taxonomy], 
     'show_count'  => true, 
     'hide_empty'  => true, 
    )); 
    }; 
} 
add_action('restrict_manage_posts', 'filterSomePosts'); 
function showFilteredResults($query) { 

    global $pagenow; 

    $qv =& $query->query_vars; 

    if (
     $pagenow == 'edit.php' && 
     isset($qv['some-taxonomy']) && 
     ctype_digit($qv['some-taxonomy']) // stricter than is_numeric() 
    ) { 
     if ($term = get_term_by('id', $qv['some-taxonomy'], 'some-taxonomy')) { 
      $qv['some-taxonomy'] = $term->slug; 
     } 
    } 
} 
add_filter('parse_query', 'showFilteredResults'); 

你可以給這個功能的去工作,更新您的文章類型,分類蛞蝓。

+0

不幸的是,沒有做到絕招。 但是,我注意到,當搜索框可用時,它總是會發生(只有在顯示帖子時它纔會顯示)。 因此,當您第一次過濾到「找不到任何帖子」,並且該頁面沒有搜索字段時,因此當我再次過濾該頁面時,查詢將起作用並顯示結果。 所以我猜這個問題與被添加到查詢中的搜索參數有關。有沒有辦法改變過濾器,以確保搜索參數不添加,如果該字段爲空? –

+0

剛剛更新了我的答案 - 這是完整的功能,適用於我自定義帖子類型 - 顯然我將其改名爲帖子類型和分類到一些隨機名:) –

+0

原來我們的兩個代碼都是正確的。在測試你的函數並得到相同的結果後,我去了我的插件並禁用了所有可能與搜索查詢搞砸的東西。 [搜索一切](https://wordpress.org/plugins/search-everything/)插件是一個罪魁禍首。對不起,我花了很長時間才意識到這一點,並且非常感謝您的幫助! –

相關問題