我正在使用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。当然我可以使用另一个过滤插件,但我想弄清问题在哪里 感谢
答案 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