archive-my-post-type.php
pour afficher tous les types de publication personnalisés.pre_get_posts
pour ajouter mon type de message personnalisé aux messages récents (barre latérale).Alors...
J'ai fait des recherches sur pre_get_posts
et d'après ce que je peux dire ...
pre_get_posts
est utilisé pour modifier la boucle principale.Aussi le codex donne cet avertissement:
Identifier les requêtes cibles
Lorsque vous utilisez pre_get_posts, tenez compte de la requête que vous modifiez. Is_main_query () est un outil utile qui peut vous aider à vous assurer que la requête que vous modifiez n'est que la requête principale.
is_main_query()
.J'ai donc ajouté du code pour voir exactement quelles requêtes étaient exécutées sur la page et voyaient deux requêtes...
Cette requête était au-dessus de la page entière (suivie de tous mes messages personnalisés) ...
'SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'press-release' AND (wp_posts.post_status = 'publish') ORDER BY wp_posts.post_date DESC LIMIT 0, 10'
L'autre requête était au-dessus de la barre latérale...
'SELECT wp_posts.* FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') ORDER BY wp_posts.post_date DESC LIMIT 0, 5'
J'aimerais ajouter mon type de message personnalisé à thisquery.
PUIS-JE (et DEVRAIS) accomplir cela en utilisant pre_get_posts?
Je suis plutôt écolo, alors j'espère vraiment que cette question a du sens.
Eh bien, vous ne devez PAS utiliser pre_get_posts
, car il modifiera TOUTES les requêtes du site.
De plus, la requête faite par le plugin posts récents n'est pas la requête principale. La requête principale sert à afficher la page actuelle, après avoir analysé les variables de requête à partir d'une URL, et est notamment responsable du modèle de page actuel.
Ce que vous DEVEZ faire est un filtre plus clair widget_posts_args
:
add_filter( 'widget_posts_args', 'wp130512_recent_posts_args');
/**
* Add CPTs to recent posts widget
*
* @param array $args default widget args.
* @return array $args filtered args.
*/
function wp130512_recent_posts_args($args) {
$args['post_type'] = array('post', 'my_CPT');
return $args;
}
OR
étendre la classe de widgets de publications récentes (WP_Widget_Recent_Posts
) pour plus de contrôle.
Exemple de code: http://rollinglab.com/2012/06/extend-wordpress-recent-posts-widget/