Пытаюсь заставить WordPress ACF включить видео либо с YouTube, либо с Vimeo, но вместо этого я получаю ошибку 500

#wordpress #advanced-custom-fields

#wordpress #расширенные пользовательские поля

Вопрос:

Вот мой код, когда у меня нет инструкции if, страница загрузится должным образом, однако, как только я добавлю инструкцию if, она перейдет на страницу с ошибкой 500.

Да, я знаю, что мне не хватает оператора Vimeo if, однако на данный момент это не должно иметь значения.

 <?php
  $youtube = get_field('youtube1');
  $vimeo = get_field('vimeo1');

  if ($youtube) {
    echo '<iframe width="420" height="315" src="https://www.youtube.com/embed/' . the_field('youtube1') . '"></iframe>'
  }
?>
  

Редактировать: уточнение, когда я повторяю iframe без инструкции if, это работает. Однако, когда я пытаюсь сказать, если ($ youtube) echo iframe, он прерывается.

Я должен повторять переменную, а не the_field (‘youtube1’) вот мой обновленный код. Я все еще получаю ошибку 500.

 <?php
  $youtube = get_field('youtube1');
  $vimeo = get_field('vimeo1');

  if ($youtube) {
    echo '<iframe width="420" height="315" src="https://www.youtube.com/embed/' . $youtube . '"></iframe>'
  }
?>
  

точки с запятой важны в php … упс, вот обновленный код, однако, даже когда ACF пуст на странице, он по-прежнему воспроизводит видео iframe без идентификатора видео, так что это просто неработающее видео.

 <?php
  $youtube = get_field('youtube1');
  $vimeo = get_field('vimeo1');

  if ('' !== strval($youtube)) {
    echo '<iframe width="420" height="315" src="https://www.youtube.com/embed/' . $youtube1 . '"></iframe>';
  }
?>
  

редактировать редактировать: ложная тревога Я полагаю, что у меня что-то было в кэше. Приведенный выше код является правильным кодом и, похоже, работает.

Ответ №1:

Вы пытаетесь повторить что-то в своем echo-заявлении. Функция the_field() повторяет значение поля. Вы должны либо использовать get_field() , либо просто использовать $youtube переменную.

Вот обновленный код:

 <?php
    $youtube = get_field('youtube1');
    $vimeo = get_field('vimeo1');

    if ('' !== strval($youtube)) {
        echo '<iframe width="420" height="315" src="https://www.youtube.com/embed/' . $youtube . '"></iframe>';
    }
?>
  

Комментарии:

1. На самом деле я хотел изменить его на $ youtube, однако это все еще выдает мне ошибку 500. Я обновлю свой приведенный выше код, чтобы отразить это изменение, потому что вы правы, это должно быть $ youtube, а не the_field (‘youtube1’)

2. Не могли бы вы предоставить трассировку стека и уверены ли вы, что ошибка 500 исходит из этого кода? Возможно, глупый вопрос, но активирован ли ACF?

3. Я не уверен, что такое трассировка стека… И да, ACF активирован, потому что я использую его во многих местах. Также ошибка 500 почти наверняка возникает из этого кода, потому что, как только я удаляю if ($ youtube) { }, но оставляю часть echo, она работает.

4. Что $youtube содержится после $youtube = get_field('youtube1') ? Не могли бы вы, пожалуйста, предоставить вывод var_dump($youtube) ?

5. Вы повторяете $youtube1 вместо $youtube . youtube1 — это имя вашего поля ACF, тогда как переменная называется $youtube .