好的,我成功了。不确定这是否是最好的方式,但我想我还是会添加一个回复。
使用设置自定义循环所需的信息$args = array
如中所述http://codex.wordpress.org/Class_Reference/WP_Query
$args = array(
\'post_type\' => \'product\',
\'meta_key\' => \'wpcf-topic\',
\'orderby\' => \'meta_value\',
\'order\' => \'ASC\',
\'posts_per_page\' => -1,
\'date_query\' => array(
array(
\'column\' => \'post_date_gmt\',
\'after\' => \'Monday 1 week ago\',
),
),
);
我用它来选择文章类型作为产品,按主题按升序(字母顺序)排序,将每页的文章设置为所有文章(我想这就是-1所做的),最后使用新的
date_query
Wordpress 3.7中介绍
声明了一个没有任何内容的新变量
$last_topic=""
使用启动自定义循环
$loop = new WP_Query( $args );
if ( $loop->have_posts() ) {
while ( $loop->have_posts() ) : $loop->the_post();
使用将新变量$topic设置为自定义字段的值
$topic=(get_post_meta( get_the_ID(), \'wpcf-topic\', true ));
(我使用types插件创建了一个新的自定义字段,它将wpcf添加到字段meta\\u键的开头,因此在引用自定义字段时,我需要对meta\\u键使用“wpcf MyFieldName”)
使用了if
仅在以下情况下显示标题$topic
不同于$last_topic
if ($last_topic !== $topic){ echo "<h1>" . $topic . "</h1>";
}
然后,在循环模板的其余部分之后,我添加了
$last_topic=$topic;
因此,现在的主题和最后一个主题是相同的,只有当主题磁贴更改为与最后一个主题不同的内容时,才会回显主题磁贴。这仅仅是因为它们已经按主题排序,所以主题中的所有产品都将位于同一位置。
我用
endwhile;
wp_reset_postdata(); // resets the loop back to the standard Wordpress loop
} else {
echo __( \'No products found\' );
}
我使用的所有代码如下
$args = array(
\'post_type\' => \'product\',
\'meta_key\' => \'wpcf-topic\',
\'orderby\' => \'meta_value\',
\'order\' => \'ASC\',
\'posts_per_page\' => -1,
\'date_query\' => array(
array(
\'column\' => \'post_date_gmt\',
\'after\' => \'Monday 1 week ago\',
),
),
);
$last_topic="";
$loop = new WP_Query( $args );
if ( $loop->have_posts() ) {
while ( $loop->have_posts() ) : $loop->the_post();
$topic=(get_post_meta( get_the_ID(), \'wpcf-topic\', true ));
if ($last_topic !== $topic){
echo "<h1 class=\'red grid__item\'>" . $topic . "</h1>";
}
woocommerce_get_template_part( \'content\', \'product\' ); // gets templet for product
$last_topic=$topic;
endwhile;
wp_reset_postdata();
} else {
echo __( \'No products found\' );
}
这样做而不是一个接一个地循环每个主题的原因是,我不想限制每个主题的固定数量,而是在一周前的星期一之后获得所有新产品。我还想限制循环的数量,以减少对数据库的调用数量。我仍在学习,所以说不出这样做有多快(如果有的话),或者减少了数据库的压力。但是,正如我预计每周将添加大约50个产品,分为大约10-15个类别,如果我为找到的每个主题创建一个新的循环,那么似乎每个页面的加载都会有很多循环。
最后一件事。为主题设置一个自定义字段(在某种程度上,它看起来应该是一个分类法)(事实上,在我的情况下,与产品的父分类法相同几乎总是有意义的)背后的原因是,您不能按分类法排序帖子,原因在这里解释得非常清楚。
http://ottopress.com/2011/when-to-not-use-a-custom-taxonomy/ 如果没有那篇文章,我永远都不会明白该怎么做。