在我设置的自定义分类法中,我很难按术语获取帖子。问题是这是一个多站点,我从网络上注册分类法的另一个博客中获得了这些数据。我的代码在注册分类法的博客上运行良好。然而,当我在另一个博客上使用switch\\u to\\u blog尝试相同的代码时,我得到了bool(false)。我想这意味着sql中有一个错误。然而,如果我只做is\\U术语,我可以确认它在那里。这里有一个链接,指向naitive博客上的代码,但另一个没有,
<?php get_header(); ?>
<?php global $switched; switch_to_blog(2); ?>
<div class="row-fluid mostwanted-container">
<?php
$type = \'portal_warrants\';
$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
$terms = is_term( \'most-wanted\' , \'warrant_status\' );
$args=array(
\'post_type\' => $type,
\'posts_per_page\' => 6,
\'paged\' => $paged,
\'tax_query\' =>
array(
array(
\'taxonomy\' => \'warrant_status\',
\'field\' => \'id\',
\'terms\' => \'most-wanted\',
)
)
);
$my_query = null;
$my_query = new WP_Query($args);
$i = 0;
if( $my_query->have_posts() ) {
while ($my_query->have_posts()) : $my_query->the_post();
if( $i % 3 == 0) :?>
</div>
<div class="row-fluid mostwanted-container">
<?php endif; ?>
<?php print_r(var_dump($wp_query->request)); ?>
<div class="span4 wanted">
<h1>Wanted</h1>
<div class="mostwanted-img">
<img src="http://placehold.it/150x170">
<span class="arrested">Arrested</span>
</div>
<div class="mostwanted-info">
<h3><?php the_title(); ?></h3>
<ul>
<li><strong>Last Known Address:</strong></li>
<li><strong>Hair:</strong></li>
<li><strong>Eyes:</strong></li>
<li><strong>Height:</strong></li>
<li><strong>Weight:</strong></li>
</ul>
</div>
</div>
<?php $i++ ?>
<?php endwhile; } wp_reset_query(); ?>
</div>
<?php restore_current_blog(); ?>
<?php get_footer(); ?>
*编辑(更新了pastebin,包括switch\\u to\\u blog)
http://pastebin.com/uBbaXnSt
而且,这根本不会输出任何东西即使
print_r(var_dump($my_query->request));
溶液(或至少部分)
问题是switch_to_blog
不允许您访问网络上其他博客中的所有内容,包括分类法、标记和功能中的内容。php,尽管不要完全引用我的话。因此,分类法没有在“切换到”博客中注册。我的解决方案(至少目前)在该博客中注册分类法。这样做之后,tax_query
按预期工作。这就是我要做的,直到我找到一个更好的解决方案(如果存在的话)。
SO网友:gabrielperezs
我发现了一个小技巧,可以通过分类法进行过滤,而不用在子主题中创建分类法。
核心中存在着“功能”taxonomy_exists“:
function taxonomy_exists( $taxonomy ) {
global $wp_taxonomies;
return isset( $wp_taxonomies[$taxonomy] );
}
这个函数配置单元为“false”,因为分类法不存在于您的子主题中。如果此函数将类设置为“false”
WP_Tax_Query“”将不会返回有效的SQL以按分类进行筛选。
所以,就像@jerime所说的“我的解决方案(至少现在)在那个博客中注册分类法”。
您只能通过“创建”分类来进行此筛选,例如:
// Add this before the loop
// The if is to don\'t touch the taxonomy if is a real taxonomy
// The "delete" value is to know this is not a real taxonomy
global $wp_taxonomies;
if(!taxonomy_exists(\'warrant_status\'))
$wp_taxonomies[\'warrant_status\'] = \'delete\';
// The normal loop
$args=array(
\'post_type\' => $type,
\'posts_per_page\' => 6,
\'paged\' => $paged,
\'tax_query\' =>
array(
array(
\'taxonomy\' => \'warrant_status\',
\'field\' => \'id\',
\'terms\' => \'most-wanted\',
)
)
);
$my_query = null;
$my_query = new WP_Query($args);
// After finish the loop, remove the hack
// do the if to don\'t delete a real taxonomy
if ($wp_taxonomies[\'warrant_status\'] == \'delete\')
unset($wp_taxonomies[\'warrant_status\'])
SO网友:Cole
这是一个长期目标,假设您的所有分类都已设置并被正确查询。
但既然你在使用wp_reset_query()
无论如何,尝试使用query_posts()
与您的$args
和使用while(have_posts() : the_post())
而不是做一个新的WP_Query()
班然后restore_current_blog()
在您的wp_reset_query()
在最后。
此外,由于其$wp_query
不$my_query
. 如果要查看$wp_query
对象,您需要global $wp_query;
在它之前的某个地方。
更好的答案。。
不知道为什么我以前没有注意到。。您的tax\\u查询字段设置为id not slug。将$参数更改为。。
$args = array(
\'post_type\' => $type,
\'posts_per_page\' => 6,
\'paged\' => $paged,
\'tax_query\' =>
array(
array(
\'taxonomy\' => \'warrant_status\',
\'field\' => \'slug\',
\'terms\' => \'most-wanted\',
)
)
);