当前位置: 首页 > 知识库问答 >
问题:

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

巫马炫明
2023-03-14

我目前正在写一个WoodPress插件,它可以与WooCommerce一起工作。我查询WooCommerce订单,目标是使用来自荷兰route planner服务的API,使用这些订单的地址来规划配送路线。

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

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

致命错误:未捕获错误:调用未定义的函数routexl_generate()在/home/u48469p44993/domains/dev.geusdiervoeding.nl/public_html/wp content/plugins/geusdiervoeding-wc-rxlplanner/geusdiervoeding-wc-rxlplanner.php:120堆栈跟踪:#0/home/u48469p44993/domains/dev.geusdiervoeding.nl/public_-html/wp-content/plugins/geusdiervoediervoeding-wc-rxlplanner.php(100):wc-order-query()#1/home/u48469p44993/domains/dev.geusdiervoeding.nl/public_html/wp includes/class wp hook.php(288):rxlp_菜单_init(“”)#2/home/u48469p44993/domains/dev.geusdiervoeding.nl/public_html/wp includes/class wp hook.php(312):wp_hook-

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

这是我的代码的(一部分):

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
        }
    }

共有3个答案

濮阳君浩
2023-03-14

如果在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()

唐康安
2023-03-14

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

//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();
        }
    }
}
艾宏远
2023-03-14

我意识到这只是你代码的一部分,但是你展示的内容有问题:

  • wc\u order\u query()函数未关闭
  • routexl\u generate()wc\u order\u query()中
  • routexl\u generate()if条件内wc\u订单查询()中

从技术上讲,嵌套函数没有问题,但为了清楚起见,将routexl\u 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
}

测试

 类似资料:
  • 我试图通过WordPress中的自定义程序设置一个简单的标题。我是PHP和WP开发新手。 这是我的功能。php: 还有我的错误代码。我在访问前端定制程序时通常会遇到以下情况: "致命错误:未捕获错误:调用未知的成员函数add_setting()在C:\xampp\htdocs\localwp.com\wp-内容\主题\llorix-one-lite-孩子\functions.php:20堆栈跟踪:

  • 问题内容: 当我要实现Authorize.net付款网关时。但是,我收到此错误: 调用未定义的函数curl_init() 请让我知道其中有什么问题。 问题答案: 如果您使用的是Windows: 转到您的php.ini文件,并从以下行的开头删除标记: 保存文件后, 必须 重新启动HTTP服务器软件(例如Apache),然后才能生效。 对于Ubuntu 13.0及更高版本,只需使用已解包的软件包。在终

  • 问题内容: 我刚刚将脚本切换到其他服务器。在以前的服务器上,它可以完美地工作,现在,我将它们切换到其他服务器上,我无法理解问题。 我不确定是否有帮助,但这是相关的代码。 PHP版本是:PHP 5.3.2 问题答案: 从文档开始,在PHP 5.4.0发行之前: 仅当PHP作为Apache模块安装时才支持此功能。 PHP 5.4.0和更高版本无条件支持此功能。 所述文档还包括替换功能,这些功能通过逐步

  • 我正在OSX El Capitan和Apache服务器上运行最新版本的PHP(目前为5.6.22)。 我正在尝试使用PostgreSQL数据库,实际上,昨天已经成功了,但在我重写了httpd之后。conf文件和默认文件(我想这就是问题所在)我收到了以下消息: 调用中未定义的函数pg_connect()。。。 问题是我没有改变php。ini文件。如果我运行phpinfo();我得到了etc/php。

  • 但是,我一定遗漏了什么,因为在构建项目时,我得到了一个关于OpenCL函数的未定义引用错误。这是完整的错误:任务“:App:ExternalNativeBuildArm8Debug”执行失败。 你知道我错过了什么吗?在过去的两天里,我搜索了几个小时关于如何在Android Studio中设置OpenCL的问题,但我找到的所有东西似乎都过时了,似乎对我的问题不起作用。

  • 问题内容: 我正在开发一个自定义WordPress插件,在其中,我在主插件页面上有一些HTML表单,在后页上有一些PHP的函数,如从数据库中获取信息等。为详细解释,这里是代码。 。 主插件文件: 这是 my_functions.php 文件。 但是我的代码无法正常工作,甚至无法命中my_functions.php文件。这里有什么问题?仅需要基本步骤即可在此模式下工作。 问题答案: 最后,在获得 T