带有CPT和&的Wordpress产品过滤器自定义分类

时间:2015-06-17 19:53:06

标签: php wordpress custom-post-type custom-taxonomy jquery-filter

我正在使用Wordpress构建网站link to site这是一个包含自定义帖子类型(产品)和自定义帖子分类法(product_category)的网站。

在“类别”页面上,我必须按子类别过滤产品。 我在教程中找到了filterable.js。

我的问题:如果我点击任何子类别(Filter-Item),浏览器(Chrome和Filezilla)将不再起作用。

如果我点击过滤器,浏览器会显示“处理请求” 在很长的加载时间后,浏览器会给我一个错误。 这是浏览器错误的屏幕截图: http://farbstrakt.com/screenshot.png

我认为问题在于如何更改网址。 我正在寻找任何解决方案,但没有。 我找不到错误

这是我的taxonomy-product_category.php

       <div class="container middler" id="demo">
       <ul class="filter-wrapper clearfix" id="portfolio-filter">
          <?php
               $args = array(
        'show_count'         => false,
        'child_of'           => get_queried_object()->term_id,
        'taxonomy'           => 'product_category',
        'title_li'           =>'',
 ); 
             $terms = get_categories($args);
             $count = count($terms);


             if ( $count > 0 ){
                         echo '<li class="cl-effect-2"><div><a href="#all" title=""><span data-hover="Alle">Alle</span></a></div></li>';

                        foreach ( $terms as $term ) {

                        $termname = strtolower($term->name);
                        $termname = str_replace(' ', '-', $termname);

                        $termname = strtolower($term->name);
                        $termname = str_replace(' ', '-', $termname);

                        echo '<li class="cl-effect-2">
                                <div>
                                    <a href="#'.$termname.'">
                                        <span data-hover="'.$term->name.'">'.$term->name.'</span>
                                    </a>
                                </div>
                            </li>';
                    }
                }
                ?>
            </ul>


    <?php 
        $loop = new WP_Query(array('post_type' => 'product', 'posts_per_page' => -1));
        $count =0;           
    ?>
    <div id="portfolio-wrapper">

        <ul class="grid effect-2 item-wrapper clearfix  filter-all" id="grid">


    <?php if ( $loop ) : 

                while ( $loop->have_posts() ) : $loop->the_post(); ?>

                   <?php
                    $terms = get_the_terms( $post->ID, 'product_category' );

                    if ( $terms && ! is_wp_error( $terms ) ) : 
                        $links = array();

                        foreach ( $terms as $term ) 
                        {
                            $links[] = $term->name;
                        }
                        $links = str_replace(' ', '-', $links); 
                        $tax = join( " ", $links );     
                    else :  
                        $tax = '';  
                    endif;
                                    ?>                  
                    <?php $infos = get_post_custom_values('_url'); ?>

                <li class="<?php echo strtolower($tax); ?> all ">           
                    <div>
                        <figure>
                        <a href="<?php the_permalink() ?>" class="img-link"><?php the_post_thumbnail( array(400, 160) ); ?></a>
                        <figcaption><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></figcpation>
                        </figure>
                    </div>
                </li>                               
         <?php endwhile; else: ?>                            
                <p class="no-products">NO products
                </p>                                                                
    </ul>
    <?php endif; ?>

那就是上面代码中的简短片段,我认为一定有错误。

           <?php
                    $terms = get_the_terms( $post->ID, 'product_category' );

                    if ( $terms && ! is_wp_error( $terms ) ) : 
                        $links = array();

                        foreach ( $terms as $term ) 
                        {
                            $links[] = $term->name;
                        }
                        $links = str_replace(' ', '-', $links); 
                        $tax = join( " ", $links );     
                    else :  
                        $tax = '';  
                    endif;
                                    ?>

                    <?php $infos = get_post_custom_values('_url'); ?>

                <li class="<?php echo strtolower($tax); ?> all ">   

如果你能帮助我,将不胜感激。我搜索了很多,没有找到任何解决方案。我是一个PHP-Newbie。当然我可以使用另一个过滤插件,但我想弄清问题在哪里 感谢

1 个答案:

答案 0 :(得分:1)

问题是在#all附加网址意味着浏览器会查找ID为all的元素。它无法在您的页面上找到它,因为此id不存在任何元素。因此,在单击几个链接后浏览器崩溃。

仅供参考,带有id的元素如下所示:

<div id="someelement" class="not the same thing as id" >content</div>
 <div id="anotherelement" class="someelement" >content</div>

在这种情况下,如果您使用#someelement附加包含此元素的网页的网址,则浏览器将关注第一个元素。这不会查找具有类&#39; someelement&#39;的元素。

如果要传递查询参数,则需要使用?products = all&amp; etc格式。但我认为你想要做的是实际重定向到只显示所选术语的页面?请在/term中使用href

此外,您在product_category上获得了404以及您在页面上拥有的任何条款。部分问题是您使用的是$term->name而不是$term->slug,这可能会有所不同。您在创建分类法时是否重置了永久链接? 同时按照此处所述检查设置:

https://codex.wordpress.org/Function_Reference/register_taxonomy

默认情况下,WP会在taxonomy-term.php和归档页面上创建一个循环,您运行的循环是第二个db请求和循环,这样就会有额外的时间添加到服务器响应时间。使用pre_get_posts挂钩

https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts