WordPress — Как я могу получить сообщения от пользователей, на которых я подписан

У меня есть эта функция, чтобы получить всех пользователей, за которыми следует указанный пользователь. Этот код из плагина «Пользователи, следующие за системой«и все, что мне нужно, чтобы получать сообщения от пользователей, за которыми я следую!

<?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();

}
?>

0

Решение

Вот код для вашего файла шаблона. Назначьте этот шаблон — «Показывать посты подписчиков» на странице постов подписчиков после их загрузки.

<?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();
1

Другие решения

Попробуйте эту функцию вместо. Быть уверенным 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();
}
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector