Wordpress子模板 - functions.php:重新声明函数

时间:2015-12-15 10:25:14

标签: php wordpress templates user-defined-functions

我有一个已经创建的网站(基于:wordpress,biznex模板),现在我必须使用子模板重新创建它。模板没有子模板,我创建了它,现在我必须将所有自定义内容迁移到子模板中。

我遇到的问题是基本模板functions.php文件中有一些修改过的函数需要放在子tempalte的functions.php中,但是它给了我下一个错误:

  

致命错误:无法重新声明biznex_contact_ajax()(之前   声明   C:\ XAMPP \ htdocs中\ enetix清洁-TEMP \可湿性粉剂内容\主题\ biznex孩子\的functions.php:16)   在   C:\ XAMPP \ htdocs中\ enetix清洁-TEMP \可湿性粉剂内容\主题\ biznex \的functions.php   在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" );

1 个答案:

答案 0 :(得分: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');