ADMIN_PRINT_SCRIPTS-$HOOK_SUFFIX是否适用于指向单个文件的嵌套路径?

时间:2011-02-11 作者:codecowboy

可以用钩子admin_print_scripts-$hook_suffix 用于创建的挂钩,如$hookname = get_plugin_page_hookname("my-quiz/lib/admin/$code_page", \'\' );?

哪里$code_pagesomefilename.php.

我试过了,但似乎不起作用。我想这可能是因为文件路径?

UPDATE

上面的代码注册的是“admin\\u page\\u my-quick/lib/admin/question\\u form”,但这只适用于以下情况:

<a href="<?php echo admin_url(\'admin.php?page=my-quiz/lib/admin/question_form.php&question=edit&question=\'.$question->ID); ?>" class=\'edit\'>
        <?php _e(\'Edit\', \'my-locale\'); ?>
        </a>
I have to add the .php suffix 如果该链接不起作用,我会收到“您没有权限”错误。

@t31os函数输出“nmsi测验/库/管理/问题\\u表”。php”,因此这与“admin\\u page\\u my-quick/lib/admin/question\\u form”不匹配

这可以工作-add\\u action(\'admin\\u print\\u scripts-\'.\'my-quick/lib/admin/question\\u form.php\',array(\'this,\'enqueue\\u my\\u js\');

Requested code:

$plugin_scripts = array(\'question_form.php\', \'manage_questions.php\');

foreach($plugin_scripts as $code_page) {
    $hookname = get_plugin_page_hookname("my-quiz/lib/admin/$code_page", \'\' );
    $_registered_pages[$hookname] = true;
    //fb($hookname);

}

1 个回复
最合适的回答,由SO网友:t31os 整理而成

我认为这确实是一个问题,即代码是否为给定页面提供了正确的挂钩名称。

这里有一个简单的函数,可以用来在每个管理页面上输出钩子后缀,它将出现在一个红色的错误框中(因此很容易发现),仅供管理员使用。

add_action( \'admin_notices\', \'print_admin_pagehook\' );
function print_admin_pagehook() {
    global $hook_suffix;
    if( !current_user_can( \'manage_options\') )
        return;
    ?>
    <div class="error"><p><?php echo $hook_suffix; ?></p></div>
    <?php 
}
加载有问题的页面,并将框中显示的值与从发布的代码中得到的值进行比较。

Addition
Following on from my last comment, you can actually do something like this..

add_action( \'admin_menu\', \'testing_registered_pages\', 100 );
function testing_registered_pages() {
    global $_registered_pages, $submenu;
    $plugin_scripts = array( 
        \'Question Form\' => array( \'page\' => \'question_form\', \'callback\' => \'my_callback_1\' ), 
        \'Manage Questions\' => array( \'page\' => \'manage_questions\', \'callback\' => \'my_callback_2\' ) 
    );
    foreach( $plugin_scripts as $title => $my_pages ) {
        $hookname = get_plugin_page_hookname("my-quiz/lib/admin/$my_pages[page]", \'my-quiz\' );
        $_registered_pages[$hookname] = true;
        $submenu[\'my-quiz\'][] = array( $title, \'manage_options\', "my-quiz/lib/admin/$my_pages[page]", $title );
        add_action( $hookname, $my_pages[\'callback\'] );
    }
}

// Remove the add_action to reference actual files, leave in place to use a callback function
。。。这种方法只有一个问题,那就是无法满足页面的功能需求。

获取此URL。

example.com/wp-admin/admin.php?page=my-quiz/lib/admin/manage_questions
我们可以通过查询..来击败cap检查。。

example.com/wp-admin/admin.php?page=my-quiz/lib/admin/manage_questions.php
如果我们将代码从早期切换为使用文件扩展名,例如。。

    $plugin_scripts = array( 
        \'Question Form\' => array( \'page\' => \'question_form.php\', \'callback\' => \'my_callback_1\' ), 
        \'Manage Questions\' => array( \'page\' => \'manage_questions.php\', \'callback\' => \'my_callback_2\' ) 
    );
。。并可以选择禁用回调,即使用真实文件。。

// add_action( $hookname, $my_pages[\'callback\'] ); 
。。这就给了我们。。

example.com/wp-admin/admin.php?page=my-quiz/lib/admin/manage_questions.php
。。使用..仍有可能击败能力需求。。

example.com/wp-admin/admin.php?page=my-quiz/lib/admin/manage_questions
无论您使用的是实际的文件还是回调函数,在这两种情况下都可以规避功能需求(如上所述)(显然这不是期望的行为)。

结束

相关推荐

Creating a custom Admin panel

我正在构建一个Wordpress插件,它有两个表和一些数据。现在,为了显示和更改数据,我正在使用wpdb函数并手动创建用户界面(模仿默认界面)。然而,我看到其他插件与它们的表有着更加一致的风格和相同的特性(比如批量按钮)。我开始怀疑Wordpress的分类法。我读过,但到目前为止,分类法似乎以某种方式与帖子相关。我的数据与帖子无关,完全独立。我还能使用Wordpress分类法吗?分类法可以帮助我构建一致的接口吗?