WordPress.org

Make WordPress Core

Ticket #16204: admin-includes-plugin-hooks.diff

File admin-includes-plugin-hooks.diff, 7.8 KB (added by mikeschinkel, 7 years ago)

Add hooks menu_page_url, admin_page_parent, admin_page_title, plugin_page_hookname and user_can_access_admin_page to /wp-admin/includes/plugin.php.

  • wp-admin/includes/plugin.php

     
    13201320                $url = '';
    13211321        }
    13221322
    1323         $url = esc_url($url);
     1323        $url = apply_filters( 'menu_page_url', esc_url($url), $menu_slug );
    13241324
    13251325        if ( $echo )
    13261326                echo $url;
     
    13421342        global $_wp_real_parent_file;
    13431343        global $_wp_menu_nopriv;
    13441344        global $_wp_submenu_nopriv;
     1345        $original_parent = $parent;
    13451346
    13461347        if ( !empty ( $parent ) && 'admin.php' != $parent ) {
    13471348                if ( isset( $_wp_real_parent_file[$parent] ) )
    13481349                        $parent = $_wp_real_parent_file[$parent];
    1349                 return $parent;
     1350                return apply_filters( 'admin_page_parent', $parent, $original_parent );
    13501351        }
    13511352
    13521353        /*
     
    13541355                if ( isset( $_wp_real_parent_file[$parent_file] ) )
    13551356                        $parent_file = $_wp_real_parent_file[$parent_file];
    13561357
    1357                 return $parent_file;
     1358                return apply_filters( 'admin_page_parent', $parent_file, $original_parent );
    13581359        }
    13591360        */
    13601361
     
    13641365                                $parent_file = $plugin_page;
    13651366                                if ( isset( $_wp_real_parent_file[$parent_file] ) )
    13661367                                        $parent_file = $_wp_real_parent_file[$parent_file];
    1367                                 return $parent_file;
     1368                                return apply_filters( 'admin_page_parent', $parent_file, $original_parent );
    13681369                        }
    13691370                }
    13701371                if ( isset( $_wp_menu_nopriv[$plugin_page] ) ) {
    13711372                        $parent_file = $plugin_page;
    13721373                        if ( isset( $_wp_real_parent_file[$parent_file] ) )
    13731374                                        $parent_file = $_wp_real_parent_file[$parent_file];
    1374                         return $parent_file;
     1375                        return apply_filters( 'admin_page_parent', $parent_file, $original_parent );
    13751376                }
    13761377        }
    13771378
     
    13791380                $parent_file = $pagenow;
    13801381                if ( isset( $_wp_real_parent_file[$parent_file] ) )
    13811382                        $parent_file = $_wp_real_parent_file[$parent_file];
    1382                 return $parent_file;
     1383                return apply_filters( 'admin_page_parent', $parent_file, $original_parent );
    13831384        }
    13841385
    13851386        foreach (array_keys( (array)$submenu ) as $parent) {
     
    13881389                                $parent = $_wp_real_parent_file[$parent];
    13891390                        if ( !empty($typenow) && ($submenu_array[2] == "$pagenow?post_type=$typenow") ) {
    13901391                                $parent_file = $parent;
    1391                                 return $parent;
     1392                                return apply_filters( 'admin_page_parent', $parent, $original_parent );
    13921393                        } elseif ( $submenu_array[2] == $pagenow && empty($typenow) && ( empty($parent_file) || false === strpos($parent_file, '?') ) ) {
    13931394                                $parent_file = $parent;
    1394                                 return $parent;
     1395                                return apply_filters( 'admin_page_parent', $parent, $original_parent );
    13951396                        } else
    13961397                                if ( isset( $plugin_page ) && ($plugin_page == $submenu_array[2] ) ) {
    13971398                                        $parent_file = $parent;
    1398                                         return $parent;
     1399                                        return apply_filters( 'admin_page_parent', $parent, $original_parent );
    13991400                                }
    14001401                }
    14011402        }
    14021403
    14031404        if ( empty($parent_file) )
    14041405                $parent_file = '';
    1405         return '';
     1406        return apply_filters( 'admin_page_parent', '', $original_parent );
    14061407}
    14071408
    14081409function get_admin_page_title() {
     
    14141415        global $typenow;
    14151416
    14161417        if ( ! empty ( $title ) )
    1417                 return $title;
     1418                return apply_filters('admin_page_title',$title);
    14181419
    14191420        $hook = get_plugin_page_hook( $plugin_page, $pagenow );
    14201421
     
    14251426                        if ( isset( $menu_array[3] ) ) {
    14261427                                if ( $menu_array[2] == $pagenow ) {
    14271428                                        $title = $menu_array[3];
    1428                                         return $menu_array[3];
     1429                                        return apply_filters('admin_page_title',$menu_array[3]);
    14291430                                } else
    14301431                                        if ( isset( $plugin_page ) && ($plugin_page == $menu_array[2] ) && ($hook == $menu_array[3] ) ) {
    14311432                                                $title = $menu_array[3];
    1432                                                 return $menu_array[3];
     1433                                                return apply_filters('admin_page_title',$menu_array[3]);
    14331434                                        }
    14341435                        } else {
    14351436                                $title = $menu_array[0];
    1436                                 return $title;
     1437                                return apply_filters('admin_page_title',$title);
    14371438                        }
    14381439                }
    14391440        } else {
     
    14501451                                        )
    14511452                                        ) {
    14521453                                                $title = $submenu_array[3];
    1453                                                 return $submenu_array[3];
     1454                                                return apply_filters('admin_page_title',$submenu_array[3]);
    14541455                                        }
    14551456
    14561457                                if ( $submenu_array[2] != $pagenow || isset( $_GET['page'] ) ) // not the current page
     
    14581459
    14591460                                if ( isset( $submenu_array[3] ) ) {
    14601461                                        $title = $submenu_array[3];
    1461                                         return $submenu_array[3];
     1462                                        return apply_filters('admin_page_title',$submenu_array[3]);
    14621463                                } else {
    14631464                                        $title = $submenu_array[0];
    1464                                         return $title;
     1465                                        return apply_filters('admin_page_title',$title);
    14651466                                }
    14661467                        }
    14671468                }
     
    14731474                                        ( $parent1 == $menu_array[2] ) )
    14741475                                        {
    14751476                                                $title = $menu_array[3];
    1476                                                 return $menu_array[3];
     1477                                                return apply_filters('admin_page_title',$menu_array[3]);
    14771478                                        }
    14781479                        }
    14791480                }
    14801481        }
    14811482
    1482         return $title;
     1483        return apply_filters('admin_page_title',$title);
    14831484}
    14841485
    14851486function get_plugin_page_hook( $plugin_page, $parent_page ) {
     
    15081509
    15091510        $plugin_name = preg_replace( '!\.php!', '', $plugin_page );
    15101511
    1511         return $page_type . '_page_' . $plugin_name;
     1512        return apply_filters( 'plugin_page_hookname', $page_type . '_page_' . $plugin_name,  $plugin_page, $parent_page );
    15121513}
    15131514
    15141515function user_can_access_admin_page() {
     
    15231524        $parent = get_admin_page_parent();
    15241525
    15251526        if ( !isset( $plugin_page ) && isset( $_wp_submenu_nopriv[$parent][$pagenow] ) )
    1526                 return false;
     1527                return apply_filters( 'user_can_access_admin_page', false );
    15271528
    15281529        if ( isset( $plugin_page ) ) {
    15291530                if ( isset( $_wp_submenu_nopriv[$parent][$plugin_page] ) )
    1530                         return false;
     1531                        return apply_filters( 'user_can_access_admin_page', false );
    15311532
    15321533                $hookname = get_plugin_page_hookname($plugin_page, $parent);
    15331534
    15341535                if ( !isset($_registered_pages[$hookname]) )
    1535                         return false;
     1536                        return apply_filters( 'user_can_access_admin_page', false );
    15361537        }
    15371538
    15381539        if ( empty( $parent) ) {
    15391540                if ( isset( $_wp_menu_nopriv[$pagenow] ) )
    1540                         return false;
     1541                        return apply_filters( 'user_can_access_admin_page', false );
    15411542                if ( isset( $_wp_submenu_nopriv[$pagenow][$pagenow] ) )
    1542                         return false;
     1543                        return apply_filters( 'user_can_access_admin_page', false );
    15431544                if ( isset( $plugin_page ) && isset( $_wp_submenu_nopriv[$pagenow][$plugin_page] ) )
    1544                         return false;
     1545                        return apply_filters( 'user_can_access_admin_page', false );
    15451546                if ( isset( $plugin_page ) && isset( $_wp_menu_nopriv[$plugin_page] ) )
    1546                         return false;
     1547                        return apply_filters( 'user_can_access_admin_page', false );
    15471548                foreach (array_keys( $_wp_submenu_nopriv ) as $key ) {
    15481549                        if ( isset( $_wp_submenu_nopriv[$key][$pagenow] ) )
    1549                                 return false;
     1550                                return apply_filters( 'user_can_access_admin_page', false );
    15501551                        if ( isset( $plugin_page ) && isset( $_wp_submenu_nopriv[$key][$plugin_page] ) )
    1551                         return false;
     1552                                return apply_filters( 'user_can_access_admin_page', false );
    15521553                }
    1553                 return true;
     1554                return apply_filters( 'user_can_access_admin_page', true );
    15541555        }
    15551556
    15561557        if ( isset( $plugin_page ) && ( $plugin_page == $parent ) && isset( $_wp_menu_nopriv[$plugin_page] ) )
    1557                 return false;
     1558                return apply_filters( 'user_can_access_admin_page', false );
    15581559
    15591560        if ( isset( $submenu[$parent] ) ) {
    15601561                foreach ( $submenu[$parent] as $submenu_array ) {
    15611562                        if ( isset( $plugin_page ) && ( $submenu_array[2] == $plugin_page ) ) {
    15621563                                if ( current_user_can( $submenu_array[1] ))
    1563                                         return true;
     1564                                        return apply_filters( 'user_can_access_admin_page', true );
    15641565                                else
    1565                                         return false;
     1566                                        return apply_filters( 'user_can_access_admin_page', false );
    15661567                        } else if ( $submenu_array[2] == $pagenow ) {
    15671568                                if ( current_user_can( $submenu_array[1] ))
    1568                                         return true;
     1569                                        return apply_filters( 'user_can_access_admin_page', true );
    15691570                                else
    1570                                         return false;
     1571                                        return apply_filters( 'user_can_access_admin_page', false );
    15711572                        }
    15721573                }
    15731574        }
     
    15751576        foreach ( $menu as $menu_array ) {
    15761577                if ( $menu_array[2] == $parent) {
    15771578                        if ( current_user_can( $menu_array[1] ))
    1578                                 return true;
     1579                                return apply_filters( 'user_can_access_admin_page', true );
    15791580                        else
    1580                                 return false;
     1581                                return apply_filters( 'user_can_access_admin_page', false );
    15811582                }
    15821583        }
    15831584
    1584         return true;
     1585        return apply_filters( 'user_can_access_admin_page', true );
    15851586}
    15861587
    15871588/* Whitelist functions */