欢迎来到元素模板ys720.com,本站提供专业的织梦模板PBOOTCMS模板网站模板网站修改/网站仿站
当前位置:主页 > 程序教程 > wordpress教程 >
wordpress教程

wordpress 多条件筛选插件,wordpress 多重筛选,巧用自定义分类法,每个项目只能单选

(元素模板) / 2022-11-24 15:12

本方法不需要自定义文章类型(模型).用系统自动的文章功能即可使用,修改简单实用.

比如我们要增加行业及分类两个自定义分类.

前台效果图

Center

后台效果图,发表文章时,右下角会自动显示

Center 1

一,在模板的functions.php中的最底部,php结束标签前面,添加如下代码
 

//自定义文章类型
// 搜索关键字 register_taxonomy
add_action( 'init', 'create_hangye' );//wordpress初始化
function create_hangye() {
$labels = array(
    'name' => _x( '产品行业筛选', '产品应用的行业选项' ),
    'singular_name' => _x( 'hangye', '行业名称' ),
    'search_items' =>  __( '行业搜索' ),
    'all_items' => __( '全部行业' ),
    'edit_item' => __( '修改标签' ),
    'update_item' => __( '更新标签' ),
    'add_new_item' => __( '增加新的行业标签' ),
    'new_item_name' => __( '新行业名字' ),
    );
  register_taxonomy('hangye','post',array(
    'hierarchical' => True,
    'labels' => $labels
    ));
}
add_action( 'init', 'create_mycats' );//<span style="color: rgb(85, 85, 85); font-family: 'Microsoft Yahei'; font-size: 15px; line-height: 25px;">wordpress初始化</span>
function create_mycats() {
$labels = array(
    'name' => _x( '产品分类筛选', '筛选' ),
    'singular_name' => _x( 'mycats', 'taxonomy singular name' ),
    'search_items' =>  __( '产品分类搜索' ),
    'all_items' => __( '全部产品分类' ),
    'edit_item' => __( '修改标签' ),
    'update_item' => __( '更新标签' ),
    'add_new_item' => __( '增加新的产品分类标签' ),
    'new_item_name' => __( '新产品分类名字' ),
    );
  register_taxonomy('mycats','post',array(
    'hierarchical' => True,
    'labels' => $labels
    ));
}

其中,register_taxonomy为自定义分类的注册函数,系统自带的.

‘hierarchical’ => True表示后台发表文章时,自定义选项为复选框的形式.直接打勾即可.而不是手工填写.其它参数网上搜索查看吧

修改后,上传,后台即可看到效果.如图,然后进去增加选项即可.

Center 2

二,顶级分类模板上,循环调用子分类.及子分类下的部分文章

假如要在分类编号为3的顶级分类上使用本插件,则在模板目录中.建立category-3.php这个模板,里面内容,可参考以下代码
 

<div class="box filter">
     <br/>
    <p class="tagfilter" id="hangye"<?php if($_GET['hangye']!=''){echo ' data="'.$_GET["hangye"].'"';}?>><b>行业:</b>
    <?php
    $terms = get_terms("hangye");
    $count = count($terms);
    if ( $count > 0 ){
    foreach ( $terms as $term ) {
        if(strtolower(urlencode($_GET['hangye']))==$term->slug){
            echo '<a data="'. $term->slug .'" style="border-color: orange;">' . $term->name . '</a>';
        }else{
            echo '<a style="margin-right:10px"data="'. $term->slug .'">' . $term->name . '</a>';
        }
    }
    }
    ?></p>
    <p class="tagfilter" id="mycats" <?php if($_GET['mycats']!=''){echo ' data="'.$_GET["mycats"].'"';}?>><b>分类:</b> <?php
    $terms = get_terms("mycats");
    $count = count($terms);
    if ( $count > 0 ){
    foreach ( $terms as $term ) {
        if(strtolower(urlencode($_GET['mycats']))==$term->slug){
            echo '<a data="'. $term->slug .'" style="border-color: orange;">' . $term->name . '</a>';
        }else{
            echo '<a style="margin-right:10px"data="'. $term->slug .'">' . $term->name . '</a>';
        }
    }
    }
    ?> </p>
    <p style="margin-left:40px"><button id="filterSub" >点击筛选</button></p>
</div>
</pre><pre code_snippet_id="1848920" snippet_file_name="blog_20160824_2_2283605" name="code" class="php">
<!--container-->
<div id="container">
    <div class="mainbound body">
<div class="products_container" style="padding-top:10px;">
<div id="products_fluid_row1" class="products_fluid_row">
<?php
    $i = 0;  // 仅为奇偶项 class 作准备
    $categories =  get_categories('child_of='. $cat .'&depth=0&hide_empty=0&orderby=id&order=asc');// 找出其所有子分类,并按ID号升序排列,其实这里还可以使用数组array(8,9,11,12)输出指定id的分类。
    $num=8;//指定每次循环输出的文章篇数     
    foreach ($categories as $category) {  // 开始循环子分类
        $now_cat = $category->term_id;  // 子分类ID
        //$cat_name = $category->cat_name;  // 子分类名称
?> 
<?php $posts = query_posts("&cat={$now_cat}&orderby=date&showposts={$num}" );
 ?>
    <div class="products_fluid_head">
<div class="products_fluid_name_new">
<strong><?php single_cat_title(); ?></strong><!--其实这里用single_cat_title()和用变量$cat_name都可以了-->
        <a href="<?php echo get_category_link($category); ?>"style="float:right;font-weight:normal" target="_blank">More>></a>
        </div>
    </div>
    <div class="prod_row_new">
        <?php while(have_posts()) : the_post(); ?>
         <div class="prod_col_new left ">
               <div class="prod_img_new">
               <?php if ( has_post_thumbnail() ) { ?>
<?php the_post_thumbnail(); ?>
<?php } else {?>
<img src="<?php bloginfo('template_url'); ?>/images/xxx.jpg" />
<?php } ?>
                                    </div>
               <div class="prod_type_new"><a href="<?php the_permalink(); ?>" target="_blank"><?php the_title(); ?></a></div>
               <div class="prod_name_new"><a href="<?php the_permalink(); ?>" target="_blank"><?php the_title(); ?></a></div>
           </div>
        <?php endwhile; ?>
    </div>
<?php $i++; }//$i实现递增?>
</div><!--products_fluid_row-->
</div>
    </div>
</div><!--container-->

注意, 模板中筛选需要通过js实用,代码直接加在模板中
<script>
    $('.tagfilter a').click(function() {
        var papaDate = $(this).parent('.tagfilter').attr('data');
        $(this).parent('.tagfilter').find('a').css('borderColor', '');
        if(papaDate == undefined | papaDate == "" | papaDate != $(this).attr('data')) {
            $(this).css('borderColor', 'orange').parent('.tagfilter').attr('data', $(this).attr('data'));
        } else if(papaDate == $(this).attr('data')) {
            $(this).css('borderColor', '').parent('.tagfilter').attr('data', '');
        } else {
            $(this).css('borderColor', '').parent('.tagfilter').attr('data', '');
        }
    });
    $('#filterSub').click(function() {
        var urlNow = 'http://' + window.location.host + '/?';
        var url = urlNow;
        var hangye = $('#hangye').attr('data');
        var mycats = $('#mycats').attr('data');
        var tag = $('#tag').attr('data');
        if(typeof(hangye) != 'undefined') {
            if(hangye.length > 0) {
                url += 'hangye=' + hangye;
            }
        }
        if(typeof(mycats) != 'undefined') {
            if(url.substr(-1) != '?') {
                url += '&';
            }
            if(mycats.length > 0) {
                url += 'mycats=' + mycats;
            }
        }
        if(typeof(tag) != 'undefined') {
            if(url.substr(-1) != '?') {
                url += '&';
            }
            if(tag.length > 0) {
                url += 'tag=' + tag;
            }
        }
        if(urlNow != url) {
            window.location.href = url;
        }
    })
    </script>

三,搜索结束页模板.

结束页默认使用archive.php归档模板.如果要使用专用模板.必须新建立一个名为taxonomy.php的新模板.里面内容参考.
 

<?php get_header(); ?>
<div class="prod_row_new">
                      <?php while (have_posts()) : the_post(); ?>
           <div class="prod_col_new left ">
               <div class="prod_img_new"><a href="<?php the_permalink(); ?>" title="TD350"><?php if ( has_post_thumbnail() ) { ?>
                                    <?php the_post_thumbnail('full'); ?>
                                    <?php } else {?>
                                    <img src="<?php echo catch_that_image() ?>" alt="<?php the_title(); ?>"/>
                                    <?php } ?></a></div>
               <div class="prod_type_new"><a href="<?php the_permalink(); ?>" title="TD350"><?php the_title(); ?></a></div>
               <div class="prod_name_new"><a href="<?php the_permalink(); ?>" title="TD350"><?php the_title(); ?></a></div>
           </div>
       <?php endwhile; ?>
       </div>
<?php get_footer(); ?>

如果要为其中一个分类法定义一个专用模板.比如行业模板.可以建立一个taxonomy-hangye.php.模板即可.

四.搜索结束的链接优化.

如果想用http://www.ys720.com/color/red这种形式的链接来显示,那就需要重新制作一个对应自定义分类的页面来展示。
这里我们使用tag的展现方式(这里以twentytwelve为例)
首先我们复制一份tag.php文件,重新命名为taxonomy-color.php(color为我们之前命名的分类名)。
在get_header(); ?>下方添加代码
 

<?php $term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); ?>

<h1 class="archive-title"><?php printf( __( 'Tag Archives: %s', 'twentytwelve' ), '<span>' . single_tag_title( '', false ) . '</span>' ); ?></h1>

替换为
<h1 class="archive-title"><?php printf( __( 'Tag Archives: %s', 'twentytwelve' ), '<span>' . $term->name . '</span>' ); ?></h1>


while ( have_posts() ) : the_post();

的下面添加

query_posts(array( 'post_type'=>'post', 'color'=>$term->slug));

Copyright @ 2013-2021 元素模板 www.ys720.com All Rights Reserved. 版权所有 元素模板 www.ys720.com