首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在add_action('init','')中使用className::method()/array('className','method')

如何在add_action('init','')中使用className::method()/array('className','method')
EN

Stack Overflow用户
提问于 2015-11-13 02:51:21
回答 1查看 66关注 0票数 1

我是WP的新手,仍然需要学习更多的概念,良好的实践和功能。另外,我的英语也不是很好。所以,别紧张:P

当我尝试开发自己的插件时,add_action('init', '')遇到了麻烦(目前还不确定)。下面是我的类(名为MeuPlugin):

代码语言:javascript
运行
复制
private static $wpdb;

public static function initialize(){
    global $wpdb;

    //add_action('init', MeuPlugin::newslettersPostType());
    add_action('init', array('MeuPlugin', 'newslettersPostType'));
    add_action('admin_menu', array('MeuPlugin', 'addMenu'));

    MeuPlugin::$wpdb = $wpdb;
}

public static function install(){
    if (is_null(MeuPlugin::$wpdb)) MeuPlugin::initialize();
}

public static function newslettersPostType() { 
    $labels = array(
        'name' => __('Newsletters'),
        'singular_name' => __('Newsletter'),
        'add_new' => __('Adicionar Novo'),
        'add_new_item' => __('Novo Item'),
        'edit_item' => __('Editar Item'),
        'new_item' => __('Novo Item'),
        'view_item' => __('Ver Item'),
        'search_items' => __('Procurar Itens'),
        'not_found' =>  __('Nenhum registro encontrado'),
        'not_found_in_trash' => __('Nenhum registro encontrado na lixeira'),
        'parent_item_colon' => '',
        'menu_name' => 'Newsletters'
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'public_queryable' => true,
        'show_ui' => true,          
        'query_var' => true,
        'rewrite' => true,
        'capability_type' => 'post',
        'has_archive' => true,
        'hierarchical' => false,
        'menu_position' => 5,
        //'register_meta_box_cb' => 'newsletters_meta_box',     
        'supports' => array('title','editor','thumbnail','excerpt')
    );

    register_post_type('newsletters', $args);
    //flush_rewrite_rules();
}

public static function addMenu(){
    add_options_page('MeuPlugin - Gerenciamento','MeuPlugin',10,__FILE__,array("MeuPlugin","testPage"));
}

public static function testPage(){
    echo '...';
}

然后我使用

代码语言:javascript
运行
复制
$pluginFile = substr(strrchr(dirname(__FILE__),DIRECTORY_SEPARATOR),1).DIRECTORY_SEPARATOR.basename(__FILE__);

register_activation_hook($pluginFile, array('MeuPlugin', 'install'));

add_filter('init', array('MeuPlugin', 'initialize'));

来“运行”我的插件。

我的问题是:为什么add_action('init', array('MeuPlugin', 'newslettersPostType')); ("line“7)不能工作,而add_action('admin_menu', array('MeuPlugin', 'addMenu')); ("line”8)可以?

附注:当我使用add_action('init', MeuPlugin::newslettersPostType()); ("line“6)而不是add_action('init', array('MeuPlugin', 'newslettersPostType')); ("line”7)时,它工作得很好。为什么我必须用className::method()而不是array('className', 'method')

我希望我已经讲清楚了。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2015-11-13 03:53:15

在"add_action“函数中,定义如下:

代码语言:javascript
运行
复制
function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
    return add_filter($tag, $function_to_add, $priority, $accepted_args);
}

第一个参数是一个字符串;第二个参数是对函数的引用,而不是您试图使用的数组

代码语言:javascript
运行
复制
 array('MeuPlugin', 'newslettersPostType')

目前我无法解释为什么第8行:

代码语言:javascript
运行
复制
add_action('admin_menu', array('MeuPlugin', 'addMenu'));

是有效的……它不应该是

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33679067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档