Дочерний шаблон WordPress — functions.php: переопределение функций

У меня есть сайт, который уже был создан (на основе: 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" );

1

Решение

К сожалению, вы не можете иметь 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');
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]