web-dev-qa-db-fra.com

Comment faire en sorte que mon type de message personnalisé soit affiché dans les messages récents à l'aide de "pre_get_posts"

  1. J'ai créé un type de message personnalisé (appelez-le "type-post-type").
  2. J'ai créé une page archive-my-post-type.php pour afficher tous les types de publication personnalisés.
  3. En regardant la section "Messages récents" de la barre latérale, j'ai remarqué que aucun type de message personnalisé ne s'affiche.
  4. Je souhaite que les types de messages personnalisés à afficher dans les messages récentsaussi bien.
  5. J'ai lu cet article ici sur WP Stack qui indique que je peux utiliser pre_get_posts pour ajouter mon type de message personnalisé aux messages récents (barre latérale).
  6. Essayé. Cela n'a pas fonctionné.

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.

  • Cette phrase "requêtes cibles"} dans le titre semble (pour moi)} impliquer que je can"cible" quelle requête je veux modifier.
  • De plus, le code de la pile contient également fait pas useis_main_query().
  • Alors maintenant, je me demande ... sont les "messages récents" PASpartie de la "requête principale"?

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.

2
sleeper

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/

5
Dan Ștefancu