Je voulais ajouter un formulaire de recherche dans une div en utilisant le code ci-dessous:
printf( '<div class="entry"><p>%s</p>%s</div>', apply_filters( 'genesis_noposts_text', __( 'Try again below.', 'genesis' ) ), get_search_form() );
Mais chaque fois que j'ajoute la get_search_form()
elle est générée avant la div, comme suit:
<form></form>
<div class="entry"></div>
La solution que j'ai trouvée consistait à scinder le code, mais je voulais savoir s'il existait une meilleure solution qui fonctionnerait correctement.
remove_action( 'genesis_loop_else', 'genesis_do_noposts' );
add_action( 'genesis_loop_else', 'mytheme_do_noposts' );
function mytheme_do_noposts() {
printf( '<div class="entry"><p>%s</p>', apply_filters( 'genesis_noposts_text', __( 'Try again below.', 'genesis' ) ) );
printf( '%s</div>', get_search_form() );
}
La get_search_form()
echos sera toujours affichée avant les retours. Utilisation:
get_search_form( false )
La solution consiste à utiliser get_search_form( false )
.
get_search_form()
affichera le search form
. Puisque vous essayez d'utiliser le résultat dans un contexte de chaîne, vous avez besoin que la fonction renvoie la variable html
sous la forme d'une chaîne que vous passez par printf
.
Le seul paramètre pour get_search_form
contrôle ce comportement. Par défaut, il est imprimé, mais si vous passez false
, il retournera la chaîne dont vous avez besoin.