这听起来像是带有分页问题编号2103024的query\\u帖子,但我认为这篇文章可能很特别。
我的WordPress网站基本上是一个巨大的汽车图像数据库每幅图像都应该有“color”(颜色)=>“red”(红色)等标签,但一组图像应该与其他一些标签(如“location”(位置)=>“Monaco”(摩纳哥))(=>这组图像中的所有图像都是在摩纳哥拍摄的)。我应该能够为每个图像标签创建一个存档,例如/颜色/红色,我会看到所有显示红色汽车的图像。我应该能够为每个画廊标签创建一个档案,例如/地点/摩纳哥,并查看所有在摩纳哥拍摄的画廊。
我想了很久,决定将WordPress的帖子附件功能与自定义分类法结合使用。有几个插件允许您将自定义分类法附加到附件,用户只需使用批量上载即可将30个图像推送到服务器。因此,附件用作图像,而附加到自定义帖子类型的图像用作图库。
我让它几乎完全按照我想要的那样工作,但现在我只能使用附件的自定义分类法存档。为了使WP显示我的附件,我必须将两个参数推送到原始查询:
global $wp_query;
// convert query object to array
$original_query = (array) $wp_query;
// attach query parameters to original query
$attach_query = array(
\'post_type\'=> array( \'attachment\' ),
\'post_status\' => array( null )
);
// merge both arrays
$args = array_merge($original_query[\'query_vars\'], $attach_query);
query_posts( $args );
就是这样,/图像标签/黑色/给我看一张黑色汽车的列表。我甚至让分页工作正常。然而,/image-tags/black/page/2/和更高版本抛出了一个错误404,奇怪的是,同时仍然显示我想要的附件。我不是第一个注意到它的事件,因为人们只能从页面标题和正文类中看出这显然是错误的模板位置。
下面是我发布的完整索引。php和print\\r的全局$wp\\u查询。如您所见,查询对象显示的“max\\u num\\u pages”值为2。
任何想法都将不胜感激!
print of Query Object on pastebin
<?php
get_header();
global $wp_query;
// convert query object to array
$original_query = (array) $wp_query;
// attach query parameters to original query
$attach_query = array(
\'post_type\'=> array( \'attachment\' ),
\'post_status\' => array( null )
);
// merge both arrays
$args = array_merge($original_query[\'query_vars\'], $attach_query);
query_posts( $args );
?>
<?php if ( have_posts()) : ?>
<div class="wrap image-list">
<?php while ( have_posts() ) : the_post(); ?>
<div class="image">
<a href="<?php the_permalink(); ?>">
<div class="caption"><h3><?php the_title(); ?></h3></div>
<?php
echo wp_get_attachment_image($attachment->ID, \'bigger-thumb\');
?>
</a>
</div>
<?php endwhile; ?>
</div><!-- .wrap.image-list -->
<div class="wrap pagination">
<?php
$big = 999999999; // need an unlikely integer
echo paginate_links( array(
\'base\' => str_replace( $big, \'%#%\', get_pagenum_link( $big ) ),
\'format\' => \'?paged=%#%\',
\'current\' => max( 1, get_query_var(\'paged\') ),
\'total\' => $wp_query->max_num_pages
) );
?>
</div><!-- .pagination.wrap -->
<?php else: ?>
</div><!-- .wrap.image-list -->
<p class="wrap"><?php _e(\'Sorry, no posts matched your criteria.\'); ?></p>
<?php endif; ?>
<?php get_footer(); ?>
最合适的回答,由SO网友:user8986 整理而成
好吧,我是这样做的:
在模板文件中重写查询将不起作用,因为主查询已找到0个结果,这是基于不应查询附件的错误假设。因此,模板文件甚至不会运行,而是跳到404。php,一切都太晚了。
因此,必须在解析查询之后和检索结果之前立即更改查询。WP提供挂钩parse_query 为了这个。请参见:http://codex.wordpress.org/Plugin_API/Action_Referencehttp://codex.wordpress.org/Query_Overview
add_action(\'parse_query\', \'hijack_query\');
function hijack_query() {
global $wp_query;
// When inside a custom taxonomy archive include attachments
if (is_tax(\'brands\') OR is_tax(\'author\')) {
$wp_query->query_vars[\'post_type\'] = array( \'attachment\' );
$wp_query->query_vars[\'post_status\'] = array( null );
return $wp_query;
}
}
\'brands\'
和
\'author\'
是自定义分类法档案,显示分配给这些分类法的附件。根据需要更改if语句,以便仅在必要时覆盖查询。请注意
is_tax()
在类别存档和标记存档上返回false:如果将类别或标记注册为附件分类法,请使用
is_category()
或
is_tag()
分别地