EDIT: 我做了一些研究,这就是我现在的立场:
我使用自定义帖子类型让用户向我的网站添加自己的内容。用户还可以签署付费会员(使用WooCommerce会员插件制作)。这个过程非常有效。
现在,我想在概览中显示来自用户的所有帖子。从付费会员的帖子开始。
会员计划和签名会员资格存储为自定义帖子类型。签名成员的用户也是文章作者。
所以我想我需要在我的帖子类型中使用循环中的成员用户/作者。为此,我有一个循环,它返回所有活动成员身份的作者ID,并将它们存储在一个数组中。代码如下所示:
<ul>
<?php
$posts = get_posts( array(
\'post_type\' => \'wc_user_membership\',
\'post_status\' => array(\'wcm-active\'),
\'numberposts\' => -1,
) );
$ids = array();
foreach ( $posts as $post ) :
setup_postdata( $post ); ?>
<?php
$post_author_id = get_post_field( \'post_author\', $post_id );
array_push( $ids, get_the_author_meta(\'ID\', $post_author_id) );
?>
<?php endforeach; wp_reset_postdata(); ?>
</ul>
<?php print_r($ids); ?>
输出如下所示:
Array ( [0] => 545 [1] => 543 [2] => 542 [3] => 538 [4] => 6 )
目前,我正在显示按类别分隔的帖子。
例如:我有10个类别,在下一个类别的新帖子列表开始之前,我每个类别显示6篇帖子。这部分也很好。
目前我的代码如下所示:
<?php
// Here I get the terms to display
$post_type_categories = get_terms( \'post_type_category\' );
?>
<ul class=" list-unstyled">
<?php
// Here I show 6 posts per term from above
foreach ( $post_type_categories as $post_type_category ) {
$post_type_category_query = new WP_Query( array(
\'post_type\' => \'post_type\',
\'orderby\' => \'date\',
\'order\' => \'DESC\',
\'posts_per_page\' => 6,
\'tax_query\' => array(
array(
\'taxonomy\' => \'post_type_category\',
\'field\' => \'slug\',
\'terms\' => array( $post_type_category->slug ),
\'operator\' => \'IN\'
)
)
) );
?>
<li class="mb-5">
<p class="h4"><?php /* Display the term title as headline */ echo $post_type_category->name; ?></p>
<ul class="list-unstyled row">
<?php
// Show posts from the category
// Here I want to display the posts from an author with a specific membership plan (meta data?!) first
if ( $post_type_category_query->have_posts() ) : while ( $post_type_category_query->have_posts() ) : $post_type_category_query->the_post(); ?>
<li class="col-lg-4">
<strong><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(\'echo=0\'); ?>"><?php the_title(); ?></a></strong>
</li>
<?php endwhile; endif; ?>
</ul>
</li>
<?php $post_type_category_query = null; wp_reset_postdata(); } ?>
</ul>
它显示类别列表和每个类别6篇文章。
有没有办法将这两个循环组合起来,并显示来自顶部成员的帖子?
我想我需要使用WP\\u查询中的author参数(https://codex.wordpress.org/Class_Reference/WP_Query#Author_Parameters) 这样做?
我只能显示来自成员的帖子,但我不知道如何组合这些帖子并对它们进行排序。此外,循环中不应该有重复的内容(顶部的成员帖子和其余帖子中的成员帖子)
最合适的回答,由SO网友:kierzniak 整理而成
我会将post标记为member_post
将其提交到数据库时,使用此标志对其进行排序。
function wpse_287048_flag_member_post( $post_id ) {
if ( wc_memberships_get_user_active_memberships() !== false ) { // Check if user is member
update_post_meta( $post_id, \'member_post\', 1 );
} else {
update_post_meta( $post_id, \'member_post\', 0 );
}
}
add_action( \'save_post\', \'wpse_287048_flag_member_post\' );
然后,您可以自由检索按排序的帖子
member_post
.
function wpse_287048_get_posts() {
$query = new WP_Query(array(
\'post_type\' => \'post\',
\'meta_key\' => \'member_post\',
\'orderby\' => \'meta_value_num post_date\',
));
return $query->get_posts();
}
请记住,你想检索的所有帖子都必须
member_post
meta\\u键具有一些值,否则将无法从数据库中选择它们。