Wordpress Шорткоды

интернет программирование php сервер wordpress

Пишу свою тему для wordpress 3.8
в файле function.php пишу такие строки:

<?php

function foobar_func( $atts ){
return "foo and bar";
}
add_shortcode( 'foobar', 'foobar_func' );

?>

после этого сайт не грузится, а сервер выдает:
Fatal error: Cannot redeclare foobar_func() (previously declared in D:\xampp\htdocs\nur\wp-content\themes\nur\functions.php:33) in D:\xampp\htdocs\nur\wp-content\themes\nur\functions.php on line 35

в чем может быть проблема, подскажите?

Примечание:
Попробовал объявить любую другую функцию и тоже самое, пробовал отключать плагины и ничего..

Примечание:
if(!shortcode_exists()) {}
Ошибку убирает и функция работает, но хотелось бы знать, причину ошибки..
Ответы:
Скажу сразу, ответа я не знаю, но...
попробуйте проверять существование шорткода
типа
if(!shortcode_exists('foobar')) {
       function foobar_func( $atts ){
               return "foo and bar";
       }
       add_shortcode( 'foobar', 'foobar_func' );
}
>Ошибку убирает и функция работает, но хотелось бы знать, причину ошибки..
Cannot redeclare foobar_func() ( previously declared in...
Перевожу:
Нельзя объявить функцию foobar_func, потому-что она уже была определена в...
Логично предположить, что файл functions.php вызывается несколько раз пока происходит рендеринг страницы (думаю это нормально). Первый раз  foobar_func объявляется, второй раз функция определена и поэтому php крашится.
Вообще в коде wordpress часто встречаются подобные проверки.


10 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.