如何在add_action('init','')

时间:2015-11-12 18:51:21

标签: php wordpress plugins

我是WP的新手,仍然需要学习更多概念,良好实践和功能。此外,我的英语不太好。所以,放轻松:P

当我遇到add_action('init', '')的问题时(我还不确定),我正在尝试开发自己的插件。这是我的班级(名为MeuPlugin):

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 '...';
}

然后我用

$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'));(“第7行”)不起作用,而add_action('admin_menu', array('MeuPlugin', 'addMenu'));(“第8行”)却不起作用?

P.S。:当我使用add_action('init', MeuPlugin::newslettersPostType());(“line”6)而不是add_action('init', array('MeuPlugin', 'newslettersPostType'));(“line”7)时,它运行正常。为什么我必须放className::method()而不是array('className', 'method')

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

1 个答案:

答案 0 :(得分:0)

嗨,“add_action”函数定义如下:

function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
    return add_filter($tag, $function_to_add, $priority, $accepted_args);
}

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

 array('MeuPlugin', 'newslettersPostType')

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

add_action('admin_menu', array('MeuPlugin', 'addMenu'));

工作.....它不应该