在Wordpress管理员

时间:2017-07-16 14:29:40

标签: php wordpress filtering admin

我有一个包含多种产品的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

请注意,此搜索参数已添加到第二个网址的开头? /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

如果删除该参数,则会加载正确的帖子。任何人都有关于如何解决这个问题的线索?我认为这是一个Wordpress核心问题,但我不知道为什么它只发生在每个分类法的某些术语上。

顺便说一句,我正在运行Wordpress 4.8

1 个答案:

答案 0 :(得分: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');

你可以给这个功能一个,更新你的帖子类型和分类标本。