Tout d'abord, j'ai essayé de chercher et de travailler sur cela, mais je ne pouvais pas créer la logique ou la méthode pour le faire.
J'essaie d'afficher le contenu users
et custom post type
ensemble dans un seul loop
. Je peux obtenir la valeur de custom post type
en utilisant WP_Query
et users
en utilisant WP_USER_Query
. et je peux les afficher simultanément. Mais alors les messages et les utilisateurs ne seront pas mélangés dans l'ordre des dates.
Je ne suis pas sûr de pouvoir y parvenir via la personnalisation query
. Mes connaissances et mon expérience sont limitées sur cette partie.
Quelqu'un peut-il m'aider à mettre dans la bonne direction sur la façon dont je peux atteindre cet objectif?
// Modifier et mettre à jour
Merci à tous pour votre commentaire, je crois avoir donné la moitié de l'idée de ce dont j'ai vraiment besoin et de la façon dont j'essaie d'y parvenir. Je vais donc commencer par l’idée/scénario.
Idée générale:
Maintenant, j'ai créé un modèle de page appelé directory.php
et utilisé la boucle suivante pour afficher uniquement cpt assignment
et projects
.
$args = array(
'post_type' => array('assigment', 'project'),
'post_status' => 'publish',
'order' => 'ASC'
);
$query = new WP_query( $args );
et en boucle comme ça
<?php if ( $query->have_posts() ) : ?>
<?php
while ( $query->have_posts() ) :
$query->the_post();
get_template_part( 'template-parts/content', get_post_type() );
endwhile;
the_posts_navigation();
else :
get_template_part( 'template-parts/content', 'none' );
endif;
wp_reset_postdata();
?>
le code fonctionne, mais veuillez vous concentrer sur l'erreur de syntaxe, le cas échéant. maintenant la part des utilisateurs. Je l'ai écrit comme ça.
$user = new WP_User_Query(array('role'=> 'teacher'));
if (!empty($user)) {
foreach ($user as $teacher) {
echo $teacher->first_name;
}
}
vous avez une idée de base de la façon dont je peux utiliser les utilisateurs.
La question principale
Comment puis-je fusionner des utilisateurs dans la boucle de publication, afin que les utilisateurs et les publications s'affichent dans une grille de 4x4 et triés par horodatage?
Par exemple, nous avons ce qui suit avec la date de création.
Teach A (10 juin, 2018) Teach B (12 juin, 2018) Stud C (15 juin, 2018) Attribuer 1 (16 juin, 2018) Attribuer 2 (18 juin, 2018) Stud D (20 juin, 2018) Proj 1 (22 juin 2018)
et puis je affiche dans la grille 4x4 comme ça.
Enseigner A Enseigner B Stud C Assigner 1 Assigner 2 Stud D Proj 1
S'il vous plaît laissez-moi savoir si c'est toujours déroutant.
Vous ne pouvez pas fusionner deux requêtes différentes lorsque le type renvoyé est un objet, car elles ont des méthodes et des propriétés différentes. Au lieu de cela, vous pouvez les obtenir sous forme de tableau. Ensuite, vous pouvez les fusionner et comparer les dates. Pour cela, je vais utiliser get_posts()
sur WP_Query()
et get_users()
sur WP_User_Query()
pour y parvenir.
Le code lui-même devrait être explicite.
// Get a list of users
$users = get_users ();
// Get an array of posts. Don't forget to set the args
$posts = get_posts();
// Let's merge these two
$users_posts = array_merge( $users, $posts );
// Now, let's sort both of them based on
// their dates. a user object holds the date
// as `user_registered`, while a post object
// holds the date as `post_date`. We use the
// usort() function to do so.
usort( $users_posts, "sort_users_and_posts" );
// Function to sort the array
function sort_users_and_posts( $a, $b ){
// Here's the tricky part. We need to get the
// date based on the object type, and then compare them.
// Get the date for first element
if( $a instanceof WP_User ){
$first_element_date = strtotime ( $a->user_registered );
} else {
$first_element_date = strtotime ( $a->post_date );
}
// Get the date for second element
if( $b instanceof WP_User ){
$second_element_date = strtotime ( $b->user_registered );
} else {
$second_element_date = strtotime ( $b->post_date );
}
// Now let's compare the dates
// If the dates are the same
if ( $first_element_date == $second_element_date ) return 0;
// If one is bigger than the other
return ( $first_element_date < $second_element_date ) ? -1 : 1;
}
// Now, we run a foreach loop and output the date.
// We need to check again whether the object is an
// instance of WP_Post or WP_User
foreach ( $users_posts as $object ) {
if( $object instanceof WP_Post ){
// This is a post
} else {
// This is a user
}
}
Vous pouvez créer deux types de messages personnalisés supplémentaires, enseignant et étudiant, qui hériteront de votre utilisateur WordPress.
+------+
+----+ User +----+
| +------+ |
| |
| |
v v
+----+----+ +----+----+ +---------+ +------------+
| Teacher | | Student | | Project | | Assignment |
+---------+ +---------+ +---------+ +------------+
Vous pouvez associer un utilisateur WordPress à un type de message enseignant/élève à l’aide de champs de méta-post.
Cette structure de données vous permettra de créer une boucle unique pour toutes vos ressources.
$args = array(
'post_type' => array( 'teacher', 'student', 'assigment', 'project' ),
'order' => 'ASC'
);
$query = new WP_query( $args );