PHP внутри переменной, которая содержит HTML внутри другой переменной - PullRequest
1 голос
/ 25 мая 2019

Я бы хотел добавить переменную, которая содержит функцию (будь то WordPress или пользовательская функция) в HTML, которая находится внутри другой переменной. Проблема в том, что когда я объединяю, он появляется вне контейнера div в передней части, где он должен находиться внутри контейнера.

Для примера, показанного здесь, я бы хотел, чтобы "$ stay_put" или PHP в целом генерировались в следующих элементах div:

function sort_sections( $sections ) {
      $sections = explode(',', $sections);
      $output = '';
      /* $stay put needs to be able to hold any function */
      $stay_put = wp_list_pages();
      if ( empty( $sections ) ) {
          return $output;
      }
      foreach( $sections as $section ) {
        switch ( $section ) {
        case 'section_a':
            $output .= '<div>Section A</div>';
            break;
        case 'section_b':
            $output .= '<div>Section B</div>';
            break;
        default:
            break;
        }
      }
      return $output;
  }

То, что я придумал, но отображает переменную вне контейнера:

$stay_put

foreach( $sections as $section ) {
  switch ( $section ) {
  case 'section_a':
      $output .= '<div>' . $stay_put . '</div>';
      break;
  case 'section_b':
      $output .= '<div>' . $stay_put . '</div>';
      break;
  default:
      break;
  }
}

Если кто-то может помочь,

Заранее спасибо.

РЕДАКТИРОВАТЬ: Решение

function render_sections( $sections ) {
      $sections = explode(',', $sections);
      $output = '';
      $stay_put = wp_list_pages(['echo' => false]);
      if ( empty( $sections ) ) {
          return $output;
      }
      foreach( $sections as $section ) {
        switch ( $section ) {
        case 'section_a':
            $output .= '<div>Section A';
            $output .= $stay_put;
            $output .= '</div>';
            break;
        case 'section_b':
            $output .= '<div>Section B';
            $output .= $stay_put;
            $output .= '</div>';
            break;
        default:
            break;
        }
      }
      return $output;
  }

1 Ответ

0 голосов
/ 25 мая 2019

Основная проблема с вашим примером кода состоит в том, что вы хотите вернуть вывод, но вызов wp_list_pages не возвращает требуемую информацию, а напрямую ее отображает.Если вы хотите добавить результат wp_list_pages к вашему выводу, вы должны добавить параметр к wp_list_pages.Согласно документации wordpress , вам необходимо установить echo на false.

Чтобы добавить его после div каждого раздела, см. Следующий код:

function render_sections( $sections ) {
      $sections = explode(',', $sections);
      $output = '';
      $stay_put = wp_list_pages(['echo' => false);
      if ( empty( $sections ) ) {
          return $output;
      }
      foreach( $sections as $section ) {
        switch ( $section ) {
        case 'section_a':
            $output .= "<div>Section A</div>';
            $output .= $stay_put;
            break;
        case 'section_b':
            $output .= '<div>Section B</div>';
            $output .= $stay_put;
            break;
        default:
            break;
        }
      }
      return $output;
  }

Обратите внимание, что я изменил имя функции с sort_sections на render_sections, так как это, кажется, более подробно описывает ее функциональность (чистый код).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...