创建带有主题标题的帖子列表

时间:2014-06-27 作者:user3497301

我想使用自定义字段“;“主题”;订购Wordpress帖子。使用

\'orderby\' => \'meta_value\', \'meta_key\' => \'topic\'
但我也希望有一个标题是;“主题”;在每个主题的开头。

主题1在主题1上发表一篇文章,在主题1上发表两篇文章,在主题2上发表一篇文章,等等。。。

我在想,我可以有一个循环,首先按“顺序”获取帖子;“主题”;

显示;“主题”;对于第一个职位和

然后调用我的模板来显示文章的其余部分。

<?php get_template_part( \'partials/content\', \'page\' ); ?>
我可以让它对所有帖子继续这样做,但添加一个if语句

"E;如果“主题”与上一篇文章的主题相同,请在发布文章之前不要添加主题标题;

这是我第一次尝试在Wordpress中想出一些新的东西,而不是从示例中复制和粘贴,我发现这真的很难做到,我只是花了2天的时间在CodeAcademy PHP中尝试并自己解决它。但它仍然给我带来了问题(完全的困惑)。

任何帮助都将不胜感激。

1 个回复
SO网友:user3497301

好的,我成功了。不确定这是否是最好的方式,但我想我还是会添加一个回复。

使用设置自定义循环所需的信息$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/ 如果没有那篇文章,我永远都不会明白该怎么做。

结束

相关推荐

QUERY_POSTS按多种方式排序

我对query\\u posts orderby multiple ways有问题。我在Wordpress中有一个类别,在那里我需要显示具有排名的第一个帖子,然后按标题显示所有帖子。下面是工作代码,工作正常,但不知道如何连接这些代码。这段代码只显示排名靠前的帖子 query_posts(array(\'cat\' => $category->term_id, \'posts_per_page\' => -1, \'orderby\' => \'meta_value\', \'me