У меня есть сайт, который уже был создан (на основе: wordpress, шаблон biznex), теперь я должен воссоздать его, используя дочерний шаблон. Шаблон не имел дочернего шаблона, и я создал его, и теперь мне нужно перенести все пользовательские элементы в дочерний шаблон.
У меня проблема в том, что есть некоторые измененные функции в файле functions.php базовых шаблонов, которые мне нужно поместить в файл functions.php дочернего шаблона, но он дает мне следующую ошибку:
Неустранимая ошибка: невозможно повторно объявить biznex_contact_ajax () (ранее
объявлено в
C: \ XAMPP \ HTDOCS \ enetix очищаемый-TEMP \ сор-контент \ Themes \ biznex-ребенок \ functions.php: 16)
в
C: \ XAMPP \ HTDOCS \ enetix очищаемый-TEMP \ сор-контент \ Themes \ biznex \ functions.php
по линии 883
Как я могу сделать child-themes functions.php переопределить функцию базовых шаблонов, не удаляя их из базовых шаблонов functions.php.
Вот одна из функций для использования в качестве конкретного примера:
function biznex_contact_ajax(){
$receiver_mail = get_bloginfo('admin_email');
if(!empty($receiver_mail))
{
$mail_title_prefix = _go('email_prefix');
$mail_prefix_cont = sprintf( __('This e-mail was sent from a contact form on %1$s %2$s.'),(get_bloginfo('name')),('( '.get_site_url().')'));
$mail_prefix = '</br></br>' .$mail_prefix_cont;
if(empty($mail_title_prefix))
$mail_title_prefix = '';
if( !empty($_POST['biznex-name']) && !empty($_POST['biznex-email']) && !empty($_POST['biznex-subject']) && !empty($_POST['biznex-message']) ){
$subject = $mail_title_prefix.$_POST['biznex-subject'];
$reply_to = is_email($_POST['biznex-email']);
if(false!==$reply_to){
$reply_to = $_POST['biznex-name'] . '<' . $reply_to . '>';
$headers = '';
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'From:'.$_POST['biznex-name'].'<'.$_POST['biznex-email']."> \r\n";
$headers .= 'Reply-to: ' . $reply_to . "\r\n";
if ( wp_mail($receiver_mail, $subject, $_POST['biznex-message'] .$mail_prefix , $headers) )
$result = __("Message successfully sent. Thank you!");
else
$result = __("Operation could not be completed.");
}else{
$result = __("You have provided an invalid e-mail address.");
}
}else{
$result = __("Please fill in all the required fields.");
}
}else{
$result = __('Error! There is no e-mail configured to receive the messages.');
}
echo $result;
die;
}
add_action( "wp_ajax_biznex_contact", "biznex_contact_ajax" );
add_action( "wp_ajax_nopriv_biznex_contact", "biznex_contact_ajax" );
К сожалению, вы не можете иметь 2 функции с одинаковым именем в php.
Но WordPress написан, чтобы позволить разработчикам подключаться к действиям / фильтрам. Если вы изучите процесс загрузки, то увидите, что wp загружает некоторые функции, а затем активную тему (сначала дочерняя тема + родительская, если необходимо). Это позволяет разработчикам создавать код и запускать его позже, не изменяя основной код. Крючки Ajax являются примером этого.
Таким образом, вы можете, конечно, удалить эти перехваченные действия, если вы знаете используемый перехватчик и имя функции. Но если вы находитесь в дочерней теме, вам нужно каким-то образом удалить действие после загрузки родительской темы (будьте осторожны, некоторые темы могут также использовать ловушки для определения функций позже в процессе, когда доступно больше функций wp) и в этом / большинстве случаи, init
хороший крючок для использования.
Следовательно, подключите функцию к init, чтобы удалить функции, и добавьте свою пользовательскую функцию.
function change_ajax_funct(){
remove_action( "wp_ajax_biznex_contact", "biznex_contact_ajax" );
remove_action( "wp_ajax_nopriv_biznex_contact", "biznex_contact_ajax" );
// note leave action hook the same, just change the function call this means that you don't have to change the js code to use a new hook.
add_action( "wp_ajax_biznex_contact", "biznex_contact_ajaxb" );
add_action( "wp_ajax_nopriv_biznex_contact", "biznex_contact_ajaxb" );
}
add_action('init', 'change_ajax_funct');
Других решений пока нет …