2017-07-16 20 views
0

私はいくつかの製品でWordpressサイトを持っています。それらは投稿として追加され(ラベルを商品に変更した)、2つのカスタム分類があります。 (スクリーンショットは添付資料参照)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

私は(それが動作するとき)フィルター後のURLは、このようなルックスを提出することに着目し、問題を理解するために管理:

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 

この検索パラメータは、2番目のURLの先頭に追加されています。 /wp-admin/edit.php? & S 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

残念ながら、それはトリックをしませんでした。しかし、バグは、検索ボックスが利用可能なときに常に発生します(表示されている投稿がある場合のみ表示されます)。 初めてフィルタリングするときに「no posts found」に移動し、そのページに検索フィールドがないため、そのページから再度フィルタリングするとクエリが機能し、結果が表示されます。 この問題は、クエリに追加されている検索パラメータに関連していると推測しています。フィールドが空の場合に検索パラメータが追加されないようにフィルタを変更する方法はありますか? –

+0

私の答えがちょうど更新されました - これは私のカスタム投稿のタイプで私にとってうまくいく完全な機能です - 明らかに私はポストタイプとタクソノミーをいくつかのランダムな名前に変更しました:) –

+0

両方のコードが正しいことが判明しました。あなたの関数をテストし、同じ結果を受け取った後、私は自分のプラグインに行き、検索クエリを駄目にする可能性のある全てを無効にしました。 [すべてを検索](https://wordpress.org/plugins/search-everything/)プラグインは責任がありませんでした。申し訳ありませんが、私はそれを実現するのにとても時間がかかりました。 –

関連する問題