2015-10-23 4 views
1

Как решить следующую проблему с помощью прилагаемого кода? Кажется, что Wordpress (или какой-то плагин) вызывает функцию дважды.Невозможно переопределить две функции

function my_wpcf7_form_elements($html) { 
    function ov3rfly_replace_include_blank($name, $text, &$html) { 
     $matches = false; 
     preg_match('/<select name="' . $name . '"[^>]*>(.*)<\/select>/iU', $html, $matches); 
     if ($matches) { 
      $select = str_replace('<option value="">---</option>', '<option value="">' . $text . '</option>', $matches[0]); 
      $html = preg_replace('/<select name="' . $name . '"[^>]*>(.*)<\/select>/iU', $select, $html); 
     } 
    } 
    ov3rfly_replace_include_blank('countrylist', 'España', $html); 
    return $html; 
} 
add_filter('wpcf7_form_elements', 'my_wpcf7_form_elements'); 

Fatal error: Cannot redeclare ov3rfly_replace_include_blank() (previously declared in /Applications/XAMPP/xamppfiles/htdocs/w/wp-content/themes/bulwark_child/functions.php:21) in /Applications/XAMPP/xamppfiles/htdocs/w/wp-content/themes/bulwark_child/functions.php on line 21

+0

просто вы не можете иметь буксировочный же имя функции, если вы не перегружать –

ответ

1

Dont гнездо функции - ваш текущий код объявляет внутреннюю функцию каждый раз, когда внешняя функция вызывается, тем самым вызывая ошибку во второй раз:

function ov3rfly_replace_include_blank($name, $text, &$html) { 
    $matches = false; 
    preg_match('/<select name="' . $name . '"[^>]*>(.*)<\/select>/iU', $html, $matches); 
    if ($matches) { 
     $select = str_replace('<option value="">---</option>', '<option value="">' . $text . '</option>', $matches[0]); 
     $html = preg_replace('/<select name="' . $name . '"[^>]*>(.*)<\/select>/iU', $select, $html); 
    } 
} 
function my_wpcf7_form_elements($html) { 

    ov3rfly_replace_include_blank('countrylist', 'España', $html); 
    return $html; 
} 
add_filter('wpcf7_form_elements', 'my_wpcf7_form_elements'); 
+0

Он работает безупречно. Спасибо за объяснение и за предоставленный код. Действительно, я не эксперт по PHP, поэтому я не думал о проблеме с вложенными функциями. (Через 5 минут я добавлю ваш ответ как принято) –

+0

Без проблем, рад, что смогу помочь вам – Steve

1

Проверить этот файл для функции повторно объявить как сообщение об ошибке предложил

/Applications/XAMPP/xamppfiles/htdocs/w/wp-content/themes/bulwark_child/functions.php:21 

переименовать одну функцию и посмотреть, работает ли он или нет

Написать отдельную функцию, многократная вызывающей функции в гнездовой функции:

function my_wpcf7_form_elements($html) { 

ov3rfly_replace_include_blank('countrylist', 'España', $html); 
return $html; 
} 



function ov3rfly_replace_include_blank($name, $text, &$html) { 
     $matches = false; 
     preg_match('/<select name="' . $name . '"[^>]*>(.*)<\/select>/iU', $html, $matches); 
    if ($matches) { 
     $select = str_replace('<option value="">---</option>', '<option value="">' . $text . '</option>', $matches[0]); 
     $html = preg_replace('/<select name="' . $name . '"[^>]*>(.*)<\/select>/iU', $select, $html); 
    } 
} 
add_filter('wpcf7_form_elements', 'my_wpcf7_form_elements'); 
Смежные вопросы