Редактор WordPress не работает, когда я пытаюсь сохранить страницу с коротким кодом - PullRequest
1 голос
/ 28 февраля 2020

Мне нужна помощь. Я не понимаю, что происходит. Я создал шорткод. Там он

 function mainslider_function() {
    function lesson_slider() {

        $open_div = '<div class="autoplay">';
        $close_div = '</div>';

        if( have_rows('test_fields', 'option') ):
            echo $open_div;
            while ( have_rows('test_fields', 'option') ) : the_row();
                $sub_value = get_sub_field('image');
                echo '<div class="slide"><img src="'.$sub_value.'"></div>';
            endwhile;
            echo $close_div;
        endif;
    }
return lesson_slider();
}

И это работает. Но только на фронт. При попытке отредактировать страницу с этим шорткодом. Редактор WordPress перестает работать. Я понимаю, что проблема в том, что я использую функцию в функции. Потому что, когда я проверяю этот код:

 function mainslider_function() {
    $test = 'test message';

    return $test;
}

Все работает нормально. И если я это сделаю, то

function mainslider_function() {
    function test(){
        $test = 'test message';
        echo test;
    }
    return test();
}

Редактор перестанет работать. Скажите, пожалуйста, почему это происходит?

1 Ответ

1 голос
/ 28 февраля 2020

Вам не нужна внутренняя функция. Вы можете объединить ваши строковые части или использовать выходную буферизацию .

. С последним это выглядит так:

function mainslider_function()
{
  ob_start();

  if (have_rows('test_fields', 'option')) {
    echo '<div class="autoplay">';
    while (have_rows('test_fields', 'option')) {
      the_row();
      $sub_value = get_sub_field('image');
      echo '<div class="slide"><img src="', $sub_value, '"></div>';
    }
    echo '</div>';
  }

  return ob_get_clean();
}

Примечание: также была выполнена небольшая очистка кода в обработать.

...