Второй шорткод генерирует div внутри первого шорткода div

Я пытаюсь добавить несколько шорткодов для создания циклов сообщений в блоге на одной странице.

Проблема: когда я добавляю два шорткода, включая цикл публикации блога, на одну страницу, шорткод помещается внутри первого div внешнего шорткода, это также происходит с некоторыми моими php-кодами, возможно, вы можете сэкономить день, обнаружив ошибку?

Здесь вы увидите, что вторая строка (это где начинается второй цикл из шорткода, строка шире, что, по сути, является проблемой):

https://ibb.co/jB352w

Если бы я добавил еще один цикл с той же сборкой шорткода, он был бы шире второго и т. Д.

Вывод html, здесь вы можете видеть, что вторые циклы имплантировались в первый ряд циклов.
https://ibb.co/h7pOpb

Мой шорткод.php:

<?php

$city = the_terms( $post->ID , "'.$city.'");

/*** HOME ***/
function blog_loop_mtl( $atts ) {
extract( shortcode_atts( array(
'type' => 'post',
'perpage' => 20,
'city'   => 'Montreal'
), $atts ) );
echo '<div class="clear"></div>';// Outter Container open
$args = array(
'post_type' => $type,
'posts_per_page' => $perpage,
'city'   => $city
);
$splendid_query = new  WP_Query( $args );

echo '<div class="row">';// Row Open

while ( $splendid_query->have_posts() ) : $splendid_query->the_post();
$category = get_the_category();
echo           '<div class="col-xs-6 col-sm-4 grid-entry-wrapper"> <!-- grid-entry-wrapper open --><div class="post_grid_entry">

<div id="grid_entry_meta">

<div class="boujee">

<a href="' . get_category_link($cats[0]->cat_ID) . '" style="color: white">' . $category[0]->cat_name . '</a>

</div>
<div>
' . $city . ' <i class="fa fa-map-marker" aria-hidden="true"></i>
</div>

</div>
<a href="' . get_permalink() . '">
<div class="grid_thumbnail" >
<div class="grid_thumbnail" style="background-image: url('.get_the_post_thumbnail_url().')" alt="">
</div>
</a>
<a href="'.get_author_posts_url( get_current_user_id()). '">'. get_avatar(get_the_author_meta( 'id' )) . '</a>
</div>
<div>
<a href="' . get_permalink() . '"></a>
<h3 class="post_grid_title">
<a href="' . get_permalink() . '">'. get_the_title(). '</a>
</h3>
</div>
<div id="grid_entry_meta_publ">
<div>
Published ' . time_elapsed_string(get_the_date()). '
</div>
<div>
by <a href="'.get_author_posts_url(get_the_author_meta( 'id' )). '">'. get_the_author_meta( 'display_name' ) . '</a>
</div>
</div>

</div><!-- grid-entry-wrapper close -->
</div>'; // Row Close

endwhile;
wp_reset_query();}
add_shortcode('blog_loop_mtl', 'blog_loop_mtl');

1

Решение

Шорткод работает только при возврате вывода.

<?php

$city = the_terms( $post->ID , "'.$city.'");

/*** HOME ***/
function blog_loop_mtl( $atts ) {
extract( shortcode_atts( array(
'type' => 'post',
'perpage' => 20,
'city'   => 'Montreal'
), $atts ) );
echo '<div class="clear"></div>';// Outter Container open
$args = array(
'post_type' => $type,
'posts_per_page' => $perpage,
'city'   => $city
);
$splendid_query = new  WP_Query( $args );

$output = '<div class="row">';// Row Open

while ( $splendid_query->have_posts() ) : $splendid_query->the_post();
$category = get_the_category();
$output .=           '<div class="col-xs-6 col-sm-4 grid-entry-wrapper"> <!-- grid-entry-wrapper open --><div class="post_grid_entry">

<div id="grid_entry_meta">

<div class="boujee">

<a href="' . get_category_link($cats[0]->cat_ID) . '" style="color: white">' . $category[0]->cat_name . '</a>

</div>
<div>
' . $city . ' <i class="fa fa-map-marker" aria-hidden="true"></i>
</div>

</div>
<a href="' . get_permalink() . '">
<div class="grid_thumbnail" >
<div class="grid_thumbnail" style="background-image: url('.get_the_post_thumbnail_url().')" alt=""></div>
</div>
</a>
<a href="'.get_author_posts_url( get_current_user_id()). '">'. get_avatar(get_the_author_meta( 'id' )) . '</a>
</div>
<div>
<a href="' . get_permalink() . '"></a>
<h3 class="post_grid_title">
<a href="' . get_permalink() . '">'. get_the_title(). '</a>
</h3>
</div>
<div id="grid_entry_meta_publ">
<div>
Published ' . time_elapsed_string(get_the_date()). '
</div>
<div>
by <a href="'.get_author_posts_url(get_the_author_meta( 'id' )). '">'. get_the_author_meta( 'display_name' ) . '</a>
</div>
</div>

</div><!-- grid-entry-wrapper close -->';endwhile;
wp_reset_query();

$output .= '</div>'; // Row Close

return $output;
}
add_shortcode('blog_loop_mtl', 'blog_loop_mtl');

Вторая неправильная вещь в коде, который вы делали, это «Row div close» внутри цикла while, когда вы запускали row div снаружи цикла while.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]