我如何才能查看我上个学期的定制职位类型列表?

时间:2014-12-16 作者:Lucas Santos

关于标题我很抱歉,我不知道如何把问题以标题的形式很好地表达出来,但我的问题如果很描述性的话。

我想问这个问题已经有一段时间了,真的!我想知道,所以我会尽可能地描述和详细。首先,让我告诉你目前的情况以及情况如何。

我有一个Custom Post Type of "Products" 由自定义帖子类型UI插件创建

随着two custom Taxonomies of "Types" and "Countries" 在我的分类法中用作我的产品的过滤器。php

好了,现在你了解了设置,这就是我所做的,假设我有一家衬衫店,我正在根据“国家”和“类型”筛选我的产品

国家/地区:

美国

中国

法国

类型:

棉花

丝绸

聚酯纤维

现在开始我的分类法。php我在左侧列出了所有自定义帖子类型的产品CountriesTypes 因此,人们可以通过它们进行过滤,并看到合适的产品。

The problem:

当我进入我的衬衫页面,在那里我看到了我所有的衬衫,我可以在左侧看到“类型”,所以假设我然后点击cotton 现在我可以看到我的所有自定义帖子类型的产品cotton 这很好,但现在这就是问题所在。当我在cotton 分类学术语Types 我可以在左边看到我的国家条款,当我点击时,让我们说USA 我看到了所有Products 列在美国条款下,但那是NOT 我想要什么。我想要它,这样当我在棉花上,然后点击Country Term of USA 我只会看到cotton 使用美国国家术语NOT 美国条款下的所有产品。

函数中的我的代码。php for my products in my taxonomy(我的分类法)页面以正确显示分页:

add_action( \'pre_get_posts\', function ( $q ) {
    if( !is_admin() && $q->is_main_query() && $q->is_tax() ) {
        $q->set( \'posts_per_page\', 2 );
        $q->set( \'orderby\', \'name\' );
        $q->set( \'order\', \'ASC\' );
    }
});
然后在我的分类法中。php我在左侧设置了我的产品和自定义分类过滤器,如下所示:

// listing all of my Types Terms of the current term on the left using it as filters for my shirts.
<div class="categories types">
<p>Types</p>
<ul>
<?php

//get the current term
$current_term = get_term_by( \'slug\', get_query_var( \'term\' ), get_query_var( \'taxonomy\' ) );

//then set the args for wp_list_categories
 $args = array(
  \'child_of\' => $current_term->term_id,
  \'taxonomy\' => \'types\',
  \'hide_empty\' => 1,
  \'order\'      => \'ASC\',
  \'show_count\'     => 1,
  \'hierarchical\' => true,
  \'depth\'  => 1,
  \'title_li\' => \'\'
    );
 wp_list_categories( $args );
?>
</ul>

</div><!--categories end-->



// listing all of my Types Terms of the current term on the left using it as filters for my shirts.
<div class="categories countries">
<p>Types</p>
<ul>
<?php

//get the current term
$current_term = get_term_by( \'slug\', get_query_var( \'term\' ), get_query_var( \'taxonomy\' ) );

//then set the args for wp_list_categories
 $args = array(
  \'child_of\' => $current_term->term_id,
  \'taxonomy\' => \'countries\',
  \'hide_empty\' => 1,
  \'order\'      => \'ASC\',
  \'show_count\'     => 1,
  \'hierarchical\' => true,
  \'depth\'  => 1,
  \'title_li\' => \'\'
    );
 wp_list_categories( $args );
?>
</ul>

</div><!--categories end-->



//listing my products custom post types
<div class="products">

<?php while( have_posts() ) : the_post(); ?>

//the loop
<?php the_field(\'title\'); ?>
<?php the_field(\'image\'); ?>

<?php endwhile; ?>

//pagination
<?php 
global $wp_query;

$total_pages = $wp_query->max_num_pages;

if ($total_pages > 1){

  $current_page = max(1, get_query_var(\'paged\'));

  echo paginate_links(array(
      \'base\' => get_pagenum_link(1) . \'%_%\',
      \'format\' => \'/page/%#%\',
      \'current\' => $current_page,
      \'total\' => $total_pages,
      \'before_page_number\' => \'<div class="pagination-navigation">\',
      \'after_page_number\' => \'</div>\'

    ));
}
?>

</div><!--products end-->
正如你在上面看到的,这是我的函数。php和我的分类法。php。

所以我一直在思考这个问题,我可以使用什么样的逻辑,而iv只能想出一种可能的方法。所以我对国家的分类是个问题,因为当我点击一个国家USA 我想看看我上个学期的国家cottonNOT 以下所有国家USA.

很抱歉这么长时间的解释,但是CLICK HERE 看到我想要实现的目标,你就会完全理解。

1 个回复
SO网友:cybmeta

当您使用wp_list_categories() 您将获得一个术语列表,每个术语都链接到其归档页面。我认为您需要的是一个筛选产品的表单,而不是归档术语链接的列表,因此您可以在请求之间保留选定的筛选器,例如,使用$_POST, $_SESSION$_COOKIES.

示例使用$_POST:

<?php
//taxonomies you want to filter
$taxonomies = array( "countries", "types" );
function get_terms_dropdown($taxonomy, $args){
    $terms = get_terms($taxonomy, $args);
    $output = \'<select id="\'.$taxonomy.\'" name="\'.$args[\'name\'].\'" multiple>\';
    foreach($terms as $term){
        in_array($term->term_id, $args[\'selected\']) ? $sel = \' selected\' : $sel = \'\';
        $output .=\'<option value="\'.$term->term_id.\'"\'.$sel.\'>\'.$term->name.\'</option>\';
    }
    $output .="</select>";
    return $output;
}
?>
<?php
//Set the action of the from to custom post type archive
?>
<form method="post" action="<?php echo get_post_type_archive_link(\'products\');?>" id="products-filter-form">
<?php
foreach($taxonomies as $taxonomy) {
    //check if there is a previously selected terms
    $selected = (!empty($_POST[\'tax_input\'][$taxonomy])) ? ($_POST[\'tax_input\'][$taxonomy]) : array();
    $selected = array_map(\'intval\', $selected);

    $args = array(
         \'hide_empty\' => false,
         \'selected\'   => $selected,
         \'name\'       => \'tax_input[\'.$taxonomy.\'][]\',
    );
    echo get_terms_dropdown($taxonomy,$args);
}
?>
<button type="submit">Filter</button>
<button type="reset" value="reset">Reset</button>
</form>
现在,在preg\\u get\\u posts操作中,您将所选分类术语添加到查询中:

add_action( \'pre_get_posts\', \'cyb_pre_get_post\' );
function cyb_pre_get_post($query){

    if($query->is_main_query() && !is_admin() && is_post_type_archive( \'products\' ) ) {
        //taxonomies you want to filter
        $taxonomies = array( "countries", "types" );
        $tax_input = isset($_POST[\'tax_input\']) ? $_POST[\'tax_input\'] : \'\';
        if(!empty($tax_input)){
            //Ready to construct the tax_query
            foreach($taxonomies as $taxonomy) {
                if(isset($tax_input[$taxonomy])) {
                    $value = array_map(\'intval\', $tax_input[$taxonomy]);
                    if(!empty($value) && $value[0] != "0"){
                        $tax_query[] = array(
                            \'taxonomy\' => $taxonomy,
                            \'field\' => \'id\',
                            \'terms\' => $value
                        );
                    }
                }
            }
            $query->set(\'tax_query\',$tax_query);
            //The tax_query has been set
        }
    }
}
Note: 使用测试的代码categorypost_tag 分类法和它正在发挥作用。它可能需要一些修改才能完全满足您的需要。

结束

相关推荐

注意:未定义索引:SUPPRESS_FILTERS

我正在做一个主题的除虫工作,我希望有人能帮助我。我使用JustinTadlock创建的这个函数在博客页面上显示自定义帖子类型,并且将wp debug设置为true,我会收到一个通知:未定义索引:suppress\\u filters消息。代码如下:// Custom Post Type for the public blog posts to show on Index or blog page add_filter( \'pre_get_posts\', \'my_get_posts\' );&