按作者的WooCommerce成员对循环中的帖子进行排序

时间:2017-11-27 作者:Cray

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) 这样做?

我只能显示来自成员的帖子,但我不知道如何组合这些帖子并对它们进行排序。此外,循环中不应该有重复的内容(顶部的成员帖子和其余帖子中的成员帖子)

1 个回复
最合适的回答,由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键具有一些值,否则将无法从数据库中选择它们。

结束

相关推荐

Why does it loop twice?

我有这个循环,我不知道为什么,我有一个“加载更多”按钮,当我点击它时,它会再次加载所有文章。有人能帮忙吗?<div class=\"content\"> <div class=\"container load_more\"> <div class=\"row\"> <?php $args = array(\'category_name\' => \'actu, quizz\' );