home *** CD-ROM | disk | FTP | other *** search
/ HTML Examples / WP.iso / wordpress / wp-admin / admin.php < prev    next >
Encoding:
PHP Script  |  2017-10-24  |  10.3 KB  |  364 lines

  1. <?php
  2. /**
  3.  * WordPress Administration Bootstrap
  4.  *
  5.  * @package WordPress
  6.  * @subpackage Administration
  7.  */
  8.  
  9. /**
  10.  * In WordPress Administration Screens
  11.  *
  12.  * @since 2.3.2
  13.  */
  14. if ( ! defined( 'WP_ADMIN' ) ) {
  15.     define( 'WP_ADMIN', true );
  16. }
  17.  
  18. if ( ! defined('WP_NETWORK_ADMIN') )
  19.     define('WP_NETWORK_ADMIN', false);
  20.  
  21. if ( ! defined('WP_USER_ADMIN') )
  22.     define('WP_USER_ADMIN', false);
  23.  
  24. if ( ! WP_NETWORK_ADMIN && ! WP_USER_ADMIN ) {
  25.     define('WP_BLOG_ADMIN', true);
  26. }
  27.  
  28. if ( isset($_GET['import']) && !defined('WP_LOAD_IMPORTERS') )
  29.     define('WP_LOAD_IMPORTERS', true);
  30.  
  31. require_once(dirname(dirname(__FILE__)) . '/wp-load.php');
  32.  
  33. nocache_headers();
  34.  
  35. if ( get_option('db_upgraded') ) {
  36.     flush_rewrite_rules();
  37.     update_option( 'db_upgraded',  false );
  38.  
  39.     /**
  40.      * Fires on the next page load after a successful DB upgrade.
  41.      *
  42.      * @since 2.8.0
  43.      */
  44.     do_action( 'after_db_upgrade' );
  45. } elseif ( get_option('db_version') != $wp_db_version && empty($_POST) ) {
  46.     if ( !is_multisite() ) {
  47.         wp_redirect( admin_url( 'upgrade.php?_wp_http_referer=' . urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ) ) );
  48.         exit;
  49.  
  50.     /**
  51.      * Filters whether to attempt to perform the multisite DB upgrade routine.
  52.      *
  53.      * In single site, the user would be redirected to wp-admin/upgrade.php.
  54.      * In multisite, the DB upgrade routine is automatically fired, but only
  55.      * when this filter returns true.
  56.      *
  57.      * If the network is 50 sites or less, it will run every time. Otherwise,
  58.      * it will throttle itself to reduce load.
  59.      *
  60.      * @since 3.0.0
  61.      *
  62.      * @param bool $do_mu_upgrade Whether to perform the Multisite upgrade routine. Default true.
  63.      */
  64.     } elseif ( apply_filters( 'do_mu_upgrade', true ) ) {
  65.         $c = get_blog_count();
  66.  
  67.         /*
  68.          * If there are 50 or fewer sites, run every time. Otherwise, throttle to reduce load:
  69.          * attempt to do no more than threshold value, with some +/- allowed.
  70.          */
  71.         if ( $c <= 50 || ( $c > 50 && mt_rand( 0, (int)( $c / 50 ) ) == 1 ) ) {
  72.             require_once( ABSPATH . WPINC . '/http.php' );
  73.             $response = wp_remote_get( admin_url( 'upgrade.php?step=1' ), array( 'timeout' => 120, 'httpversion' => '1.1' ) );
  74.             /** This action is documented in wp-admin/network/upgrade.php */
  75.             do_action( 'after_mu_upgrade', $response );
  76.             unset($response);
  77.         }
  78.         unset($c);
  79.     }
  80. }
  81.  
  82. require_once(ABSPATH . 'wp-admin/includes/admin.php');
  83.  
  84. auth_redirect();
  85.  
  86. // Schedule trash collection
  87. if ( ! wp_next_scheduled( 'wp_scheduled_delete' ) && ! wp_installing() )
  88.     wp_schedule_event(time(), 'daily', 'wp_scheduled_delete');
  89.  
  90. // Schedule Transient cleanup.
  91. if ( ! wp_next_scheduled( 'delete_expired_transients' ) && ! wp_installing() ) {
  92.     wp_schedule_event( time(), 'daily', 'delete_expired_transients' );
  93. }
  94.  
  95. set_screen_options();
  96.  
  97. $date_format = __( 'F j, Y' );
  98. $time_format = __( 'g:i a' );
  99.  
  100. wp_enqueue_script( 'common' );
  101.  
  102. /**
  103.  * $pagenow is set in vars.php
  104.  * $wp_importers is sometimes set in wp-admin/includes/import.php
  105.  * The remaining variables are imported as globals elsewhere, declared as globals here
  106.  *
  107.  * @global string $pagenow
  108.  * @global array  $wp_importers
  109.  * @global string $hook_suffix
  110.  * @global string $plugin_page
  111.  * @global string $typenow
  112.  * @global string $taxnow
  113.  */
  114. global $pagenow, $wp_importers, $hook_suffix, $plugin_page, $typenow, $taxnow;
  115.  
  116. $page_hook = null;
  117.  
  118. $editing = false;
  119.  
  120. if ( isset($_GET['page']) ) {
  121.     $plugin_page = wp_unslash( $_GET['page'] );
  122.     $plugin_page = plugin_basename($plugin_page);
  123. }
  124.  
  125. if ( isset( $_REQUEST['post_type'] ) && post_type_exists( $_REQUEST['post_type'] ) )
  126.     $typenow = $_REQUEST['post_type'];
  127. else
  128.     $typenow = '';
  129.  
  130. if ( isset( $_REQUEST['taxonomy'] ) && taxonomy_exists( $_REQUEST['taxonomy'] ) )
  131.     $taxnow = $_REQUEST['taxonomy'];
  132. else
  133.     $taxnow = '';
  134.  
  135. if ( WP_NETWORK_ADMIN )
  136.     require(ABSPATH . 'wp-admin/network/menu.php');
  137. elseif ( WP_USER_ADMIN )
  138.     require(ABSPATH . 'wp-admin/user/menu.php');
  139. else
  140.     require(ABSPATH . 'wp-admin/menu.php');
  141.  
  142. if ( current_user_can( 'manage_options' ) ) {
  143.     wp_raise_memory_limit( 'admin' );
  144. }
  145.  
  146. /**
  147.  * Fires as an admin screen or script is being initialized.
  148.  *
  149.  * Note, this does not just run on user-facing admin screens.
  150.  * It runs on admin-ajax.php and admin-post.php as well.
  151.  *
  152.  * This is roughly analogous to the more general {@see 'init'} hook, which fires earlier.
  153.  *
  154.  * @since 2.5.0
  155.  */
  156. do_action( 'admin_init' );
  157.  
  158. if ( isset($plugin_page) ) {
  159.     if ( !empty($typenow) )
  160.         $the_parent = $pagenow . '?post_type=' . $typenow;
  161.     else
  162.         $the_parent = $pagenow;
  163.     if ( ! $page_hook = get_plugin_page_hook($plugin_page, $the_parent) ) {
  164.         $page_hook = get_plugin_page_hook($plugin_page, $plugin_page);
  165.  
  166.         // Back-compat for plugins using add_management_page().
  167.         if ( empty( $page_hook ) && 'edit.php' == $pagenow && '' != get_plugin_page_hook($plugin_page, 'tools.php') ) {
  168.             // There could be plugin specific params on the URL, so we need the whole query string
  169.             if ( !empty($_SERVER[ 'QUERY_STRING' ]) )
  170.                 $query_string = $_SERVER[ 'QUERY_STRING' ];
  171.             else
  172.                 $query_string = 'page=' . $plugin_page;
  173.             wp_redirect( admin_url('tools.php?' . $query_string) );
  174.             exit;
  175.         }
  176.     }
  177.     unset($the_parent);
  178. }
  179.  
  180. $hook_suffix = '';
  181. if ( isset( $page_hook ) ) {
  182.     $hook_suffix = $page_hook;
  183. } elseif ( isset( $plugin_page ) ) {
  184.     $hook_suffix = $plugin_page;
  185. } elseif ( isset( $pagenow ) ) {
  186.     $hook_suffix = $pagenow;
  187. }
  188.  
  189. set_current_screen();
  190.  
  191. // Handle plugin admin pages.
  192. if ( isset($plugin_page) ) {
  193.     if ( $page_hook ) {
  194.         /**
  195.          * Fires before a particular screen is loaded.
  196.          *
  197.          * The load-* hook fires in a number of contexts. This hook is for plugin screens
  198.          * where a callback is provided when the screen is registered.
  199.          *
  200.          * The dynamic portion of the hook name, `$page_hook`, refers to a mixture of plugin
  201.          * page information including:
  202.          * 1. The page type. If the plugin page is registered as a submenu page, such as for
  203.          *    Settings, the page type would be 'settings'. Otherwise the type is 'toplevel'.
  204.          * 2. A separator of '_page_'.
  205.          * 3. The plugin basename minus the file extension.
  206.          *
  207.          * Together, the three parts form the `$page_hook`. Citing the example above,
  208.          * the hook name used would be 'load-settings_page_pluginbasename'.
  209.          *
  210.          * @see get_plugin_page_hook()
  211.          *
  212.          * @since 2.1.0
  213.          */
  214.         do_action( "load-{$page_hook}" );
  215.         if (! isset($_GET['noheader']))
  216.             require_once(ABSPATH . 'wp-admin/admin-header.php');
  217.  
  218.         /**
  219.          * Used to call the registered callback for a plugin screen.
  220.          *
  221.          * @ignore
  222.          * @since 1.5.0
  223.          */
  224.         do_action( $page_hook );
  225.     } else {
  226.         if ( validate_file( $plugin_page ) ) {
  227.             wp_die( __( 'Invalid plugin page.' ) );
  228.         }
  229.  
  230.         if ( !( file_exists(WP_PLUGIN_DIR . "/$plugin_page") && is_file(WP_PLUGIN_DIR . "/$plugin_page") ) && !( file_exists(WPMU_PLUGIN_DIR . "/$plugin_page") && is_file(WPMU_PLUGIN_DIR . "/$plugin_page") ) )
  231.             wp_die(sprintf(__('Cannot load %s.'), htmlentities($plugin_page)));
  232.  
  233.         /**
  234.          * Fires before a particular screen is loaded.
  235.          *
  236.          * The load-* hook fires in a number of contexts. This hook is for plugin screens
  237.          * where the file to load is directly included, rather than the use of a function.
  238.          *
  239.          * The dynamic portion of the hook name, `$plugin_page`, refers to the plugin basename.
  240.          *
  241.          * @see plugin_basename()
  242.          *
  243.          * @since 1.5.0
  244.          */
  245.         do_action( "load-{$plugin_page}" );
  246.  
  247.         if ( !isset($_GET['noheader']))
  248.             require_once(ABSPATH . 'wp-admin/admin-header.php');
  249.  
  250.         if ( file_exists(WPMU_PLUGIN_DIR . "/$plugin_page") )
  251.             include(WPMU_PLUGIN_DIR . "/$plugin_page");
  252.         else
  253.             include(WP_PLUGIN_DIR . "/$plugin_page");
  254.     }
  255.  
  256.     include(ABSPATH . 'wp-admin/admin-footer.php');
  257.  
  258.     exit();
  259. } elseif ( isset( $_GET['import'] ) ) {
  260.  
  261.     $importer = $_GET['import'];
  262.  
  263.     if ( ! current_user_can( 'import' ) ) {
  264.         wp_die( __( 'Sorry, you are not allowed to import content.' ) );
  265.     }
  266.  
  267.     if ( validate_file($importer) ) {
  268.         wp_redirect( admin_url( 'import.php?invalid=' . $importer ) );
  269.         exit;
  270.     }
  271.  
  272.     if ( ! isset($wp_importers[$importer]) || ! is_callable($wp_importers[$importer][2]) ) {
  273.         wp_redirect( admin_url( 'import.php?invalid=' . $importer ) );
  274.         exit;
  275.     }
  276.  
  277.     /**
  278.      * Fires before an importer screen is loaded.
  279.      *
  280.      * The dynamic portion of the hook name, `$importer`, refers to the importer slug.
  281.      *
  282.      * @since 3.5.0
  283.      */
  284.     do_action( "load-importer-{$importer}" );
  285.  
  286.     $parent_file = 'tools.php';
  287.     $submenu_file = 'import.php';
  288.     $title = __('Import');
  289.  
  290.     if (! isset($_GET['noheader']))
  291.         require_once(ABSPATH . 'wp-admin/admin-header.php');
  292.  
  293.     require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
  294.  
  295.     define('WP_IMPORTING', true);
  296.  
  297.     /**
  298.      * Whether to filter imported data through kses on import.
  299.      *
  300.      * Multisite uses this hook to filter all data through kses by default,
  301.      * as a super administrator may be assisting an untrusted user.
  302.      *
  303.      * @since 3.1.0
  304.      *
  305.      * @param bool $force Whether to force data to be filtered through kses. Default false.
  306.      */
  307.     if ( apply_filters( 'force_filtered_html_on_import', false ) ) {
  308.         kses_init_filters();  // Always filter imported data with kses on multisite.
  309.     }
  310.  
  311.     call_user_func($wp_importers[$importer][2]);
  312.  
  313.     include(ABSPATH . 'wp-admin/admin-footer.php');
  314.  
  315.     // Make sure rules are flushed
  316.     flush_rewrite_rules(false);
  317.  
  318.     exit();
  319. } else {
  320.     /**
  321.      * Fires before a particular screen is loaded.
  322.      *
  323.      * The load-* hook fires in a number of contexts. This hook is for core screens.
  324.      *
  325.      * The dynamic portion of the hook name, `$pagenow`, is a global variable
  326.      * referring to the filename of the current page, such as 'admin.php',
  327.      * 'post-new.php' etc. A complete hook for the latter would be
  328.      * 'load-post-new.php'.
  329.      *
  330.      * @since 2.1.0
  331.      */
  332.     do_action( "load-{$pagenow}" );
  333.  
  334.     /*
  335.      * The following hooks are fired to ensure backward compatibility.
  336.      * In all other cases, 'load-' . $pagenow should be used instead.
  337.      */
  338.     if ( $typenow == 'page' ) {
  339.         if ( $pagenow == 'post-new.php' )
  340.             do_action( 'load-page-new.php' );
  341.         elseif ( $pagenow == 'post.php' )
  342.             do_action( 'load-page.php' );
  343.     }  elseif ( $pagenow == 'edit-tags.php' ) {
  344.         if ( $taxnow == 'category' )
  345.             do_action( 'load-categories.php' );
  346.         elseif ( $taxnow == 'link_category' )
  347.             do_action( 'load-edit-link-categories.php' );
  348.     } elseif( 'term.php' === $pagenow ) {
  349.         do_action( 'load-edit-tags.php' );
  350.     }
  351. }
  352.  
  353. if ( ! empty( $_REQUEST['action'] ) ) {
  354.     /**
  355.      * Fires when an 'action' request variable is sent.
  356.      *
  357.      * The dynamic portion of the hook name, `$_REQUEST['action']`,
  358.      * refers to the action derived from the `GET` or `POST` request.
  359.      *
  360.      * @since 2.6.0
  361.      */
  362.     do_action( 'admin_action_' . $_REQUEST['action'] );
  363. }
  364.