Shortcode tiras formatação e retorna em conteúdo superior

Usando o plugin Advanced Custom Fields e eu tenho um shortcode para um campo repetidor, mas ele retorna a lista no topo do conteúdo. Eu mudei de um echo para um return , o que eu entendi corrigiria a questão de que ele aparecesse no topo do conteúdo, mas não e agora ele tira todo o html e retorna o todo como um grande bloco de texto . Claramente, estou fazendo algo errado.

 function teamlist_shortcode($atts, $content = null) { if (get_field('aw_team_members')): while (has_sub_field('aw_team_members')): $string = '

' . the_sub_field('team_name') . '

' . the_sub_field('team_title') . '

' . the_sub_field('team_bio'); endwhile; return $string; endif; } add_shortcode('teamlist', 'teamlist_shortcode');

Solutions Collecting From Web of "Shortcode tiras formatação e retorna em conteúdo superior"

the_sub_field echo s content. Os documentos são bastante claros sobre isso.

A function the_sub_field é usada com o campo repetidor e o campo de conteúdo flexível (chave de licença necessária) para exibir um valor de subcampo. Ao fazer um loop de um desses campos, esta function exibe um sub-campo da linha atual.

Isso é o mesmo que echo get_sub_field ();

http://www.advancedcustomfields.com/resources/functions/the_sub_field/

Use get_sub_field para construir uma string.

Os nomes das funções seguem um padrão WordPress comum (mas não universal) ou use o the_ para as funções que echo e o prefixo get_ para as funções que retornam.

No entanto, ainda haverá um problema em que seu código substitui completamente $string em cada iteração. Você precisa concatenar uma string com todos os resultados, o que você pode fazer facilmente com .= vez de apenas = .

 function teamlist_shortcode($atts, $content = null) { if (get_field('aw_team_members')): $string = ''; while (has_sub_field('aw_team_members')): $string .= '

' . the_sub_field('team_name') . '

' . the_sub_field('team_title') . '

' . the_sub_field('team_bio'); endwhile; return $string; endif; } add_shortcode('teamlist', 'teamlist_shortcode');