Ошибка синтаксического анализа PHP плагина WordPress: синтаксическая ошибка, неожиданный ‘{‘, ожидающий ‘)’

#php #wordpress

#php #wordpress

Вопрос:

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

Загрузка плагина на тестовый сервер выдает ошибку:

 Parse error: syntax error, unexpected '{', expecting ')' in wp-content/plugins/uni-todays-program/todays-program.php on line 221
  

Строка 221 — это:

  $query = new WP_Query( [
  

Окружающий код:

 // [today]
function today_func( $atts ) {

    // Retrieve current days schedule
    $today = getdate();
    $query = new WP_Query( [
      'post_type' => 'day_entry',
      'year' => $today["year"], 
      'monthnum' => $today["mon"], 
      'day' => $today["mday"] , 
      'post_status' => array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit', 'trash')
    ]  );
    $day_type = $query->post->day_type;
    $query = new WP_Query( ['post_type' => 'day_type','name' => $day_type] );
    return $query->post->post_content;

}
add_shortcode( 'today', 'today_func' );
  

Я всего лишь пользователь интерфейса, поэтому мой php очень ограничен, но я не вижу проблемы. Нет открытия ( , которое нужно закрыть.

Я поискал в Google и нашел что-то, что указывало на то, что это версия php, но с тех пор я изменил ее, поэтому текущий и тестовый сервер — оба 5.4.

Кто-нибудь может направить меня в правильном направлении?

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

1. Что произойдет, если вы измените post_status на 'post_status' => ['publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit', 'trash'] ?

2. Вы абсолютно уверены, что версии >=5.4 ?

3. Да, я ‘phpinfo’d это после смены сервера не позволило плагину работать.

Ответ №1:

[] это краткий синтаксис для объявления массива, он должен работать, если на тестовом сервере установлен php 5.4 или выше.

Если проблема по какой-либо причине не устраняется, попробуйте изменить код на этот:

 // [today]
function today_func( $atts ) {

    // Retrieve current days schedule
    $today = getdate();
    $query = new WP_Query( array(
      'post_type' => 'day_entry',
      'year' => $today["year"], 
      'monthnum' => $today["mon"], 
      'day' => $today["mday"] , 
      'post_status' => array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit', 'trash')
    )  );
    $day_type = $query->post->day_type;
    $query = new WP_Query( array('post_type' => 'day_type','name' => $day_type) );
    return $query->post->post_content;

}
add_shortcode( 'today', 'today_func' );
  

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

1. Бум! Это исправлено. Большое спасибо, Сайед! Не уверен, почему это не будет работать на сервере, на котором есть 5.4, но рад, что это работает сейчас.