Php 当我试图用短代码保存页面时,WordPress编辑器会中断

Php 当我试图用短代码保存页面时,WordPress编辑器会中断,php,wordpress,shortcode,Php,Wordpress,Shortcode,我需要帮助。我不明白发生了什么事。我创建了一个短代码。他在那儿 function mainslider_function() { function lesson_slider() { $open_div = '<div class="autoplay">'; $close_div = '</div>'; if( have_rows('test_fields', 'option') ):

我需要帮助。我不明白发生了什么事。我创建了一个短代码。他在那儿

 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();
}
一切正常。如果我真的喜欢这个

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

编辑停止了工作。请告诉我为什么会发生这种情况?

您不需要内部函数。您可以连接字符串部分或使用

对于后者,这将成为:

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();
}
函数main\u函数()
{
ob_start();
如果(有行('test_fields','option')){
回声';
while(有行('test\u fields','option')){
_行();
$sub_value=get_sub_字段(“图像”);
回声';
}
回声';
}
返回ob_get_clean();
}

注意:在这个过程中还做了一些代码清理

可能是因为这样做,多次调用
main slider\u function
将引发致命错误,表明您的内部函数已经定义。我不太了解WP的良好实践,但我想说的是,要么将内部函数定义为“全局”函数(正确命名/命名空间),要么使用
function\u exists
测试其存在性。请检查服务器中的错误。实际上,您不需要内部函数。您可以连接字符串或使用输出缓冲。@Jeto您能给我举个例子吗。我不太擅长php。你是个魔术师,非常感谢你救了我一天!!!!!真的非常感谢。我会一行一行地找出答案来提高我的知识。@VictorSokoliuk不客气。如果你的答案是正确的,请考虑接受答案。
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();
}