Элементор отображает один и тот же короткий код дважды (только в редакторе)

#php #wordpress #elementor

Вопрос:

Элементор дважды отображает один и тот же короткий код. Один в том месте, где размещен шорткод, другой прямо за заголовком. Проблема возникает только в редакторе. На странице он отображается нормально. Пожалуйста, помогите. Как я могу это исправить?

     function display_grid_func ( $atts ){
echo '<div class="post-grid">';
    $args = array(
        'post_type' => 'realizacje',
        'post_status' => 'publish',
        'posts_per_page' => 9,
        'cat' => 5
    );

    $loop = new WP_Query($args);

    while ($loop->have_posts()) : $loop->the_post(); ?>

        <div class="post-tile home">
            <a href="<?php the_permalink(); ?>">
                <img src="<?php the_post_thumbnail_url('tile-foto'); ?>" />
            </a>
                <a class="button-zobacz home" href="<?php the_permalink(); ?>">Zobacz amp;#8594;</a>
            
        </div>

    <?php endwhile;
    wp_reset_postdata();?><?php
    echo '</div>';
}

add_shortcode('post_grid', 'display_grid_func');
 

То, что я пробовал до сих пор:
-Я меняю тему
-Я отключил все плагины
-Я искал в гугле

Ответ №1:

Я решил эту проблему 🙂 Я использовал ob_start(); и вернул ob_get_clean();

 function display_grid_func($atts)
{
    ob_start();
    echo '<div class="post-grid">';
    $args = array(
        'post_type' => 'realizacje',
        'post_status' => 'publish',
        'posts_per_page' => 9,
        'cat' => 5
    );

    $loop = new WP_Query($args);

    while ($loop->have_posts()) : $loop->the_post(); ?>

        <div class="post-tile home">
            <a href="<?php the_permalink(); ?>">
                <img src="<?php the_post_thumbnail_url('tile-foto'); ?>" />
            </a>
            <a class="button-zobacz home" href="<?php the_permalink(); ?>">Zobacz amp;#8594;</a>

        </div>

    <?php endwhile;
    wp_reset_postdata(); ?>
<?php echo '</div>';
    return ob_get_clean();
}

add_shortcode('post_grid', 'display_grid_func');