Je cherche actuellement à transmettre une requête unique à plusieurs widgets sur un modèle sans exécuter plusieurs requêtes. L'objectif évident est la rapidité et l'efficacité.
J'ai un widget qui fournira des aspects spécifiques du même objet avec différentes instances du widget dans le modèle. Les instances de widget sont un doit , mais l'instance d'objet doit rester inchangée. Existe-t-il un point d’intérêt dans la série d’actions et de filtres que je devrais rechercher dans mon widget?
Par exemple, je veux que object->title
apparaisse dans mon widget en haut de la page, je coche donc cette case et l’affiche donc dans cette zone. Ensuite, j'ai une autre instance du widget où je vérifie que object->content
s'affiche dans cette zone.
C'est très facile à l'intérieur du widget, cependant, très inefficace parce que je viens de lancer deux requêtes pour le même objet, car mes widgets sont deux objets différents en eux-mêmes.
Comment mon widget ne peut-il pas tenter deux fois la même requête dans cette situation? get_queried_object
lancera-t-il une requête pour ces deux instances de widget?
Je suggère d'utiliser l'API de cache d'objets ou l'API transitoires , comme bon vous semble améliorer vos besoins.
Un exemple très rapide avec le cache d'objets:
// helper function
function get_my_object() {
$object = wp_cache_get( 'my_object' );
if ( false === $object ) {
$args = array( .... );
$object = new WP_Query( $args );
wp_cache_set( 'my_object', $object );
}
return $object;
}
class cyb_my_widget extends WP_Widget {
function __construct() {
// ...
}
function widget( $args, $instance ) {
// ...
$object = get_my_object();
}
function update( $new_instance, $old_instance ) {
// ...
}
function form( $instance ) {
// ...
}
}
Le moyen le plus simple serait de générer une variable globale ou transitoire (si vous souhaitez utiliser l'objet sur plusieurs pages) dans votre modèle et disposer des widgets. accéder à cela.
Une approche plus judicieuse du point de vue du programme représenterait un travail considérable et se déroulerait comme suit:
the_widget
pour afficher d'autres widgets, en passant l'objet .Je suis sûr qu'il doit y avoir d'autres approches, mais c'est le cours que j'explorerais. Note: Je n'ai pas ressenti le besoin de faire quelque chose comme ça, donc cette approche est proposée "telle quelle".