J'ai une installation WordPress Multisite où j'ai besoin de rassembler tous les articles dans un seul flux sur le site principal. J'ai essayé d'utiliser une requête SQL, mais cela m'a empêché d'accéder à beaucoup de données nécessaires. J'ai maintenant une approche différente, mais je ne peux pas trouver un moyen de trier tous les messages différents par date.
foreach( $sites as $site ){
switch_to_blog( $site['blog_id'] );
$allBlogPosts = get_posts( array(
'posts_per_page' => -1,
'orderby' => 'date',
'order' => 'DESC'
));
foreach( $allBlogPosts as $post ){
setup_postdata( $post ); ?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<header class="post__header">
<?php the_post_thumbnail(); ?>
<?php if(!is_single()) { ?>
<time class="timeStamp"><span class="timeStamp__month"><?php the_time("d"); ?> </span> <span class="timeStamp__day"> <?php the_time("F"); ?> </span> </time>
<?php } ?>
<?php
if ( is_single() ) {
the_title( '<h1 class="post__title">', '</h1>' );
} else {
the_title( '<h2 class="post__title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h2>' );
}
if ( 'post' === get_post_type() && is_single() ) : ?>
<div class="post__meta">
<?php themway_posted_on(); ?>
</div><!-- .post__meta -->
<?php
endif; ?>
</header><!-- .post__header -->
<div class="post__content">
<?php
the_content( sprintf(
/* translators: %s: Name of current post. */
wp_kses( __( 'Continue reading %s <span class="meta-nav">→</span>', 'themway' ), array( 'span' => array( 'class' => array() ) ) ),
the_title( '<span class="screen-reader-text">"', '"</span>', false )
) );
wp_link_pages( array(
'before' => '<div class="page-links">' . esc_html__( 'Pages:', 'themway' ),
'after' => '</div>',
) );
?>
</div><!-- .post__content -->
</article><!-- post -->
<?php
wp_reset_postdata();
}// end foreach for $skiPost as $post
restore_current_blog();
}// end foreach for $sites as $site
Alors maintenant, le contenu est trié par blog, il convient donc à chaque blog, mais je dois tout combiner pour créer un gros flux Nice.
Vous pouvez simplement usort
le tableau avant de le parcourir.
$allBlogPosts = get_posts( array(
'posts_per_page' => -1,
'orderby' => 'date',
'order' => 'DESC'
));
usort($allBlogPosts, 'sortPosts');
function sortPosts($a, $b){
return strtotime($a->post_date) - strtotime($b->post_date);
}
//Your display loop...
Pour votre information, si vous utilisez PHP> = 5.3, vous pouvez utiliser une fermeture , ce qui, à mon avis, est plus propre pour ce genre de chose.
Edit: La raison ci-dessus ne fonctionne pas parce que j’ai mal interprété votre code et que je ne me suis pas rendu compte que le tableau $allBlogPosts
ne contient jamais plus de 1 blogues à la fois. Cela devrait fonctionner:
$allPosts = [];
foreach( $sites as $site ){
switch_to_blog( $site['blog_id'] );
$allBlogPosts = get_posts( array(
'posts_per_page' => -1,
'orderby' => 'date',
'order' => 'DESC'
));
foreach( $allBlogPosts as $post ){
ob_start();
setup_postdata( $post ); ?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<header class="post__header">
<?php the_post_thumbnail(); ?>
<?php if(!is_single()) { ?>
<time class="timeStamp"><span class="timeStamp__month"><?php the_time("d"); ?> </span> <span class="timeStamp__day"> <?php the_time("F"); ?> </span> </time>
<?php } ?>
<?php
if ( is_single() ) {
the_title( '<h1 class="post__title">', '</h1>' );
} else {
the_title( '<h2 class="post__title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h2>' );
}
if ( 'post' === get_post_type() && is_single() ) : ?>
<div class="post__meta">
<?php themway_posted_on(); ?>
</div><!-- .post__meta -->
<?php
endif; ?>
</header><!-- .post__header -->
<div class="post__content">
<?php
the_content( sprintf(
/* translators: %s: Name of current post. */
wp_kses( __( 'Continue reading %s <span class="meta-nav">→</span>', 'themway' ), array( 'span' => array( 'class' => array() ) ) ),
the_title( '<span class="screen-reader-text">"', '"</span>', false )
) );
wp_link_pages( array(
'before' => '<div class="page-links">' . esc_html__( 'Pages:', 'themway' ),
'after' => '</div>',
) );
?>
</div><!-- .post__content -->
</article><!-- post -->
<?php
$allPosts[] = ['display'=>ob_get_clean(), 'post_date'=>get_the_time('U')];
wp_reset_postdata();
}// end foreach for $skiPost as $post
restore_current_blog();
}// end foreach for $sites as $site
function sortPosts($a, $b){
return $a['post_date'] - $b['post_date'];
}
usort($allPosts, 'sortPosts');
foreach($allPosts as $p) echo $p['display'];