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

如何引用类方法,而不是在PHP/WordPress中的回调函数中的函数?

汝志
2023-03-14

免责声明,我只做了几个星期的WordPress/PHP,所以请随意为我真正分解东西。

我一直在为我的自定义Wordpress插件构建一个设置页面。我的插件的所有功能都存在于类中,因此我正在做如下事情:

add_action('init', array($this, 'custom_func'));

而不是

add_action('init', 'custom_func');

我认为这是有效的,因为add_action的第二个参数接受数组或函数的字符串名称或匿名函数。

我目前的问题是,我的设置页面无法使用它。

守则:

public function plugin_admin_init () {

    //Register group of options
    register_setting( 'exp_wp_plugin_options', 'exp_wp_plugin_options', array( $this, 'plugin_options_validate' ) );

    //Add a section to group
    add_settings_section('exp_wp_plugin_main', 'Main Settings', function () {

    //plugin_settings_text
    echo '<p>Main description of this section here.</p>';

       }, $this->screen );

    //Add a field to the section
    add_settings_field('exp_wp_plugin_text_string', 'Plugin Text Input', array( $this, 'plugin_setting_string' ), $this->screen, 'plugin_main');

   }

public function plugin_setting_string() {

    $options = get_option('plugin_options');

    echo "<input id='plugin_text_string' name='plugin_options[text_string]' size='40' type='text' value='{$options[ 'text_string' ]}' />";

}

>

  • register\u settings函数调用允许我传递数组($this,'func\u name')语法

    第二个函数调用,add\u settings\u section,正在使用一个匿名函数(但如果可能的话,我宁愿将其移到另一个方法)。

    第三个函数,add_settings_field,使用数组($this,'func_name')语法失败,抛出的错误是它在寻找字符串。

    这些方法是WP设置API的一部分。我不确定这是一个PHP问题,还是Wordpress问题,但如果有人能告诉我如何让它工作,我将感谢任何帮助。

    编辑:这是我的IDE(PHPStorm)抛出的错误:

    预期字符串,得到数组。调用参数类型与声明的不兼容。

  • 共有1个答案

    沈成天
    2023-03-14

    PHPStorm的警告基于方法的docblock注释中设置的类型提示。从Wordpress 4.5开始,添加设置字段()函数的docblock已被修复,以指示它接受一个可调用的,在此之前它用于指示字符串。

    如果你在WordPress 4.4.10(最后一个4.4. x版本)和WordPress 4.5中查看函数的docblock注释,你会注意到他们将它从@参数字符串$回调更改为@参数可调用$回调。您还可能注意到,函数的内部工作方式没有改变,实际实现始终接受可调用。

    忽略来自PHPStorm的警告可能是安全的,但我建议您首先在非生产环境中试用它。如果PHP本身可以使用它,您可以选择在PHPStorm中取消显示警告。

    更好的选择是将Wordpress升级到最新版本(如果可能的话)。Wordpress为互联网的很大一部分提供了动力,因此它是黑客的一个非常流行的目标。如果您运行的是旧版本,那么如果黑客决定攻击您的公司,或者只是随机寻找要添加到其僵尸网络的服务器,那么您的站点中就会存在漏洞,这些漏洞可能会被滥用。

     类似资料:
    • 我有一个自定义endpoint,如下所示: 当回调函数不是基于类的方法时,我能够调用回调函数“get_user_lang”。但是一旦我将其转换为基于类的方法,我就无法调用它。 我的班级是这样的: 我的新endpoint如下所示: 有人知道如何在WordPress Rest API自定义endpoint中调用基于类的方法吗?

    • 问题内容: reset.php文件: 脚本Ajax: 嗨,我尝试在ajax中调用php reset函数,但是当我进行谷歌搜索时,我知道没有直接调用php函数的可能性,因此我将该特定函数放在单独的php文件中并调用该php文件,我不确定我该怎么做阿贾克斯我尝试了上面的代码,但没有任何反应。出现设置重设消息。我该怎么做任何帮助都将非常有用。在使用ajax概念之前,我尝试过使用php中的函数,但是每次只

    • 目前,我的类型定义为: 我需要这样的东西: 但第二条不被接受。

    • 我一直在学习一些关于如何创建会话对象的课程,效果很好,如果我把完整的代码放到一个PHP文件中,一切都很好! 我想做的是将其放在另一个模块(PHP文件)中,只需使用一行(或等效行)即可,例如

    • 当前我的类型定义为: 我需要这样的东西: 但第二个不被接受。

    • 问题内容: 我想知道是否可以在ajax调用中使用诸如query_post()之类的函数? 假设我正在调用文件_inc / ajax.php 我想笨拙地使用wordpress函数,但是我不知道为什么。有人可以帮我吗? 非常感谢 :) 问题答案: WordPress提供了一个Ajax网址,您应该将其与完整的Ajax API 一起使用。 您需要创建一个jQuery函数。 例: ajaxurl var始终