web-dev-qa-db-fra.com

Quel est le meilleur moyen de passer des variables aux modèles de thèmes et de les utiliser à différents endroits comme des widgets?

J'ai un fichier modèle à /parts/template.php qui contient un code de liste de type post,

echo get_the_title(); //same lines with my_render_function

et je l'utilise à archive.php avec ces lignes.

while ( have_posts() ) : the_post();
  get_template_part('template');
endwhile;

Mais maintenant, j'ai écrit un widget et un shortcode . Mon widget et mon shortcode en utilisant une fonction appelée shared_listing ()

function shared_listing(){
  $posts=get_posts();
  my_render_function($posts);
}

function my_render_function($posts){
  foreach($posts as $post) {
    echo get_the_title($post->ID); //same lines with template.php except $post->ID
  }
}

alors j'ai trouvé une solution. J'ai supprimé template.php et changé archive.php en ceci.

if ( have_posts() ) : 
  my_render_function($posts);
endif;

Maintenant, mon archive.php, mon widget et mon shortcode utilisent le même modèle que my_render_function (). Et j'ai créé un fichier appelé my_render_function.php et, après avoir ajouté les lignes de fonction, je l'ai copié dans le dossier des pièces.

Et je n'ai pas utilisé ces lignes au widget et au shortcode et changé de modèle pour rendre la fonction parce que j'ai besoin de passer $ posts et d'autres variables aussi. En raison de son design, $ post_count en fait partie. Et sans utiliser une boucle au point où les codes frontaux sont entrés, cela n’a aucun sens. et j'ai besoin de faire les choses correctement. Pas avec des hacks à coup sûr.

setup_postdata( $post );
get_template_part('template');

Alors maintenant ma question;

au début, j'utilisais get_the_title (); sur template.php et get_the_title ($ post-> ID); sur le widget et la boucle shortcode. mais maintenant, j'utilise get_the_title ($ post-> ID) pour tous.

1- Est-ce que mon système est plus lent?

Il existe un mécanisme de cache d’objet dans wp, donc cela ne devrait pas affecter, je crois.

au début, j'utilisais get_template_part () sur archive.php avec have_posts () et la fonction de rendu foreach sur shortcode et widget. maintenant, j'utilise include () (une seule fois sur function.php) et pour chaque fonction de rendu sur chacun d'eux.

2- Est-ce la meilleure façon de bien faire les choses? ou existe-t-il une autre solution logique et performante pour le faire?

désolé pour mon anglais médiocre et merci de m'avoir lu.

3
Ajna Sarut

1 Si vous regardez le code source de get_the_title , vous verrez qu'il n'y a pas de différence entre les deux manières d'écrire la même chose, car si vous appelez sans paramètre, il est censé être l'identifiant actuel.

2 Il n'y a pas de différence substantielle entre les deux boucles que vous utilisez. Tous passent par la même quantité d'articles et font la même chose avec. Théoriquement, tout mettre dans archive.php serait un peu plus rapide, car vous passez l'appel de fonction à get_template_part().

En bref: en matière de performance, les deux options ne sont guère différentes.

1
cjbj