Wordpress 子模板 - functions.php:重新声明函数
Wordpress child template - functions.php: redeclareing functions
我有一个已经创建的网站(基于:wordpress、biznex 模板),现在我必须使用子模板重新创建它。该模板没有子模板,而我创建了它,现在我必须将所有自定义内容迁移到子模板中。
我遇到的问题是我需要将基本模板 functions.php 文件中的一些修改函数放入子模板 functions.php 中,但它给了我下一个错误:
Fatal error: Cannot redeclare biznex_contact_ajax() (previously
declared in
C:\xampp\htdocs\enetix-clean-temp\wp-content\themes\biznex-child\functions.php:16)
in
C:\xampp\htdocs\enetix-clean-temp\wp-content\themes\biznex\functions.php
on line 883
如何使子主题 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" );
很遗憾,php 中不能有 2 个同名函数。
但是 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');
我有一个已经创建的网站(基于:wordpress、biznex 模板),现在我必须使用子模板重新创建它。该模板没有子模板,而我创建了它,现在我必须将所有自定义内容迁移到子模板中。
我遇到的问题是我需要将基本模板 functions.php 文件中的一些修改函数放入子模板 functions.php 中,但它给了我下一个错误:
Fatal error: Cannot redeclare biznex_contact_ajax() (previously declared in C:\xampp\htdocs\enetix-clean-temp\wp-content\themes\biznex-child\functions.php:16) in C:\xampp\htdocs\enetix-clean-temp\wp-content\themes\biznex\functions.php on line 883
如何使子主题 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" );
很遗憾,php 中不能有 2 个同名函数。
但是 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');