繁体   English   中英

在 Wordpress 插件中调用未定义的函数

[英]Call for undefined function in Wordpress plugin

我目前正在编写一个适用于 WooCommerce 的 WordPress 插件。 我查询 WooCommerce 订单,目标是使用这些订单的地址,使用来自荷兰路线规划服务的 API 来规划交付路线。

为我写 PHP 已经有一段时间了,我最后一次写 PHP 是 7 年前,所以我的 PHP 技能有点生疏。

查询订单后,我想调用函数routexl_generate(),这个函数是在我的代码中定义的。 但是,运行代码会引发以下错误:

致命错误:未捕获的错误:调用 /home/u48469p44993/domains/dev.geusdiervoeding.nl/public_html/wp-content/plugins/geusdiervoeding-wc-rxlplanner/geusdiervoeding-wc-0rxlplanner/geusdiervoeding-wc-0r中的未定义函数 routexl_generate()堆栈跟踪:#0 /home/u48469p44993/domains/dev.geusdiervoeding.nl/public_html/wp-content/plugins/geusdiervoeding-wc-rxlplanner/geusdiervoeding-wc-rxlplanner.php(100): #wc_order_home() /u48469p44993/domains/dev.geusdiervoeding.nl/public_html/wp-includes/class-wp-hook.php(288): rxlp_menu_init('') #2 /home/u48469p44993/domains/dev.geusnier/voeding_public wp-includes/class-wp-hook.php(312): WP_Hook->apply_filters('', Array) #3 /home/u48469p44993/domains/dev.geusdiervoeding.nl/public_html/wp-includes/plugin.php( 478): WP_Hook->do_action(Array) #4 /home/u48469p44993/domains/dev.geusdiervoeding.nl/public_html/wp-admin/admin.php(254): do_action('woocommerce_pag...') #5 { main} 扔在 /home/u48469p44993/domains/dev.geusdiervoeding.nl/public_html/wp-content /plugins/geusdiervoeding-wc-rxlplanner/geusdiervoeding-wc-rxlplanner.php 第 120 行

我真的不明白为什么它会这样,因为函数是定义的...帮助将不胜感激。

这是(部分)我的代码:

function wc_order_query()
{   

    if(isset($_GET['area'])) { 
        $route = $_GET[ 'area' ];
        $date = $_GET[ 'date' ];    

        $args = array(
            'status' => $route,
            'meta_key' => 'jckwds_date',
            'meta_value' => $date,      
        );
        $orders = wc_get_orders( $args );

        if (empty($orders)) {
            echo ('<ul><li>Op '.$date.' zijn er geen bezorgorders voor het gekozen routegebied.</li></ul>');
        } else {
            routexl_generate();
        }

        //RouteXL API aanroepen
        function routexl_generate(){
            //Query results to API
        }
    }

我意识到这只是“您代码的一部分”,但是您所展示的内容存在问题:

  • wc_order_query()函数没有关闭;
  • routexl_generate()wc_order_query()里面
  • routexl_generate()是一个内if条件内wc_order_query()

从技术上讲,嵌套函数没有问题,但为了清楚起见,将routexl_generate()完全移到函数之外是有意义的:

function wc_order_query() {
    if (isset($_GET['area'])) {
        $route = $_GET[ 'area' ];
        $date = $_GET[ 'date' ];

        $args = array(
            'status' => $route,
            'meta_key' => 'jckwds_date',
            'meta_value' => $date,
        );

        $orders = wc_get_orders( $args );

        if (empty($orders)) {
            echo ('<ul><li>Op '.$date.' zijn er geen bezorgorders voor het gekozen routegebied.</li></ul>');
        } else {
            routexl_generate();
        }
    }
}

//  RouteXL API aanroepen

function routexl_generate(){
    //  Query results to API
}

测试和工作。

首先你必须声明函数然后调用你犯了一个错误你在声明之前调用了一个函数

//RouteXL API aanroepen
function routexl_generate(){
 //Query results to API
}

function wc_order_query() { 

    if(isset($_GET['area'])){ 
        $route = $_GET[ 'area' ];
        $date = $_GET[ 'date' ];    

        $args = array(
        'status' => $route,
        'meta_key' => 'jckwds_date',
        'meta_value' => $date,      
        );
        $orders = wc_get_orders( $args );
        if (empty($orders)) {
            echo ('<ul><li>Op '.$date.' zijn er geen bezorgorders voor het gekozen routegebied.</li></ul>');
        }else{
            routexl_generate();
        }
    }
}

如果您在 INSIDE AN IF 中定义了一个函数,那么在实际执行到达它之前,它实际上并没有被定义。 换句话说,它没有在正常的代码解释过程中定义为在 IF 之外定义的函数

因此,如果您想在 IF 中定义函数并且我不建议这样做,则必须在调用它们之前定义它们,就好像解释器只是单次传递一样。

示例:这有效

function x($p = false)
{
    function xx($pp)
    {
        echo $pp;
    }

    if ($p) {
        xx($p);
    }

}

x('hello');

结果

你好

而这并没有

function x($p = false)
{

    if ($p) {
        xx($p);
    }
    function xx($pp)
    {
        echo $pp;
    }    
}

x('hello');

结果

致命错误:未捕获错误:调用未定义的函数 xx()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM