У меня есть эта функция, чтобы получить всех пользователей, за которыми следует указанный пользователь. Этот код из плагина «Пользователи, следующие за системой«и все, что мне нужно, чтобы получать сообщения от пользователей, за которыми я следую!
<?php
/**
* Retrieves all users that the specified user follows
*
* Gets all users that $user_id followers
*
* @access private
* @since 1.0
* @param int $user_id - the ID of the user to retrieve following for
* @return array
*/
function pwuf_get_following( $user_id = 0 ) {
if ( empty( $user_id ) ) {
$user_id = get_current_user_id();
}
$following = get_user_meta( $user_id, '_pwuf_following', true );
if ( empty( $following ) ) {
return;
}
return (array) apply_filters( 'pwuf_get_following', $following, $user_id );
}
?>
Теперь я пытаюсь вывести все сообщения пользователей, за которыми я следую. Но это выявляет пользователей, за которыми я следую, и другие посты пользователей, за которыми я никогда не слежу, а также нумерация страниц не работает.
<?php
/**
* Shows the posts from users that the current user follows
*
* @access private
* @since 1.0
* @return string
*/
function pwuf_following_posts_shortcode( $atts, $content = null ) {
// Make sure the current user follows someone
if( empty( pwuf_get_following() ) )
return;
$items = new WP_Query( array(
'post_type' => 'any',
'posts_per_page' => 12,
'order' => 'DESC',
'author__in' => pwuf_get_following()
) );
ob_start(); ?>
<?php
if ( $items->have_posts() ) : ?>
<?php
$archive_content_layout = get_option( 'archive_content_layout', 'th-grid-2' );
echo '<div class="posts-wrap ' . esc_attr( $archive_content_layout ) . '">';
/* Start the Loop */
while ( $items->have_posts() ) : $items->the_post();
/*
* Include the Post-Format-specific template for the content.
* If you want to override this in a child theme, then include a file
* called content-___.php (where ___ is the Post Format name) and that will be used instead.
*/
get_template_part( 'template-parts/content', get_post_format() );
endwhile;
wp_reset_postdata();
echo '</div><!-- .posts-wrap -->';
the_posts_pagination();
else :
get_template_part( 'template-parts/content', 'none' );
endif; ?>
<?php
return ob_get_clean();
}
?>
Вот код для вашего файла шаблона. Назначьте этот шаблон — «Показывать посты подписчиков» на странице постов подписчиков после их загрузки.
<?php
/* Template Name: Show Followers Posts */
get_header();
?>
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<?php
// Make sure the current user follows someone
if( !empty( pwuf_get_following() ) )
{
$userids = pwuf_get_following();
$userids = array_values(array_filter($userids));
$paged = get_query_var('paged') ? get_query_var('paged') : 1; //remove if pagination works without this
$wp_query = new WP_Query( array(
'post_type' => 'any',
'posts_per_page' => 12,
'order' => 'DESC',
'author__in' => $userids,
'paged' => $paged //remove if pagination works without this
) );
if ( $wp_query->have_posts() ) :
$archive_content_layout = get_option( 'archive_content_layout', 'th-grid-2' );
echo '<div class="posts-wrap ' . esc_attr( $archive_content_layout ) . '">';
/* Start the Loop */
while ( $wp_query->have_posts() ) : $wp_query->the_post();
/*
* Include the Post-Format-specific template for the content.
* If you want to override this in a child theme, then include a file
* called content-___.php (where ___ is the Post Format name) and that will be used instead.
*/
get_template_part( 'template-parts/content', get_post_format() );
endwhile;
echo '</div><!-- .posts-wrap -->';
echo paginate_links( array(
'total' => $wp_query->max_num_pages
));
wp_reset_query();
else :
get_template_part( 'template-parts/content', 'none' );
endif;
}
?>
</main><!-- #main -->
</div><!-- #primary -->
<?php
get_sidebar();
get_footer();
Попробуйте эту функцию вместо. Быть уверенным pwuf_get_following()
возвращая правильные идентификаторы пользователей.
function pwuf_following_posts_shortcode( $atts, $content = null ) {
// Make sure the current user follows someone
if( empty( pwuf_get_following() ) )
return;
else
$userids = pwuf_get_following();
$userids = array_values(array_filter($userids));
$paged = get_query_var('paged') ? get_query_var('paged') : 1; //remove if pagination works without this
$items = new WP_Query( array(
'post_type' => 'any',
'posts_per_page' => 12,
'order' => 'DESC',
'author__in' => $userids,
'paged' => $paged //remove if pagination works without this
) );
ob_start();
if ( $items->have_posts() ) :
$archive_content_layout = get_option( 'archive_content_layout', 'th-grid-2' );
echo '<div class="posts-wrap ' . esc_attr( $archive_content_layout ) . '">';
/* Start the Loop */
while ( $items->have_posts() ) : $items->the_post();
/*
* Include the Post-Format-specific template for the content.
* If you want to override this in a child theme, then include a file
* called content-___.php (where ___ is the Post Format name) and that will be used instead.
*/
get_template_part( 'template-parts/content', get_post_format() );
endwhile;
echo '</div><!-- .posts-wrap -->';
echo paginate_links( array(
'total' => $items->max_num_pages
));
wp_reset_postdata();
else :
get_template_part( 'template-parts/content', 'none' );
endif;
return ob_get_clean();
}