123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619 |
- <?php
- if ( ! defined( 'ABSPATH' ) ) {
- exit;
- }
- if ( ! class_exists( 'acf_options_page' ) ) :
- class acf_options_page {
-
- var $pages = array();
-
- function __construct() {
-
- }
-
- function validate_page( $page ) {
-
- if ( empty( $page ) ) {
- $page_title = __( 'Options', 'acf' );
- $page = array(
- 'page_title' => $page_title,
- 'menu_title' => $page_title,
- 'menu_slug' => 'acf-options',
- );
-
- } elseif ( is_string( $page ) ) {
- $page_title = $page;
- $page = array(
- 'page_title' => $page_title,
- 'menu_title' => $page_title,
- );
- }
-
- $page = wp_parse_args(
- $page,
- array(
- 'page_title' => '',
- 'menu_title' => '',
- 'menu_slug' => '',
- 'capability' => 'edit_posts',
- 'parent_slug' => '',
- 'position' => null,
- 'icon_url' => false,
- 'redirect' => true,
- 'post_id' => 'options',
- 'autoload' => false,
- 'update_button' => __( 'Update', 'acf' ),
- 'updated_message' => __( 'Options Updated', 'acf' ),
- )
- );
-
- $migrate = array(
- 'title' => 'page_title',
- 'menu' => 'menu_title',
- 'slug' => 'menu_slug',
- 'parent' => 'parent_slug',
- );
- foreach ( $migrate as $old => $new ) {
- if ( ! empty( $page[ $old ] ) ) {
- $page[ $new ] = $page[ $old ];
- }
- }
-
- if ( empty( $page['menu_title'] ) ) {
- $page['menu_title'] = $page['page_title'];
- }
-
- if ( empty( $page['menu_slug'] ) ) {
- $page['menu_slug'] = 'acf-options-' . sanitize_title( $page['menu_title'] );
- }
-
- $page['position'] = is_numeric( $page['position'] ) ? (int) $page['position'] : null;
-
- return apply_filters( 'acf/validate_options_page', $page );
- }
-
- function add_page( $page ) {
-
- $page = $this->validate_page( $page );
- $slug = $page['menu_slug'];
-
- if ( isset( $this->pages[ $slug ] ) ) {
- return false;
- }
-
- $this->pages[ $slug ] = $page;
-
- return $page;
- }
-
- function add_sub_page( $page ) {
-
- $page = $this->validate_page( $page );
-
- if ( ! $page['parent_slug'] ) {
- $page['parent_slug'] = 'acf-options';
- }
-
- if ( $page['parent_slug'] == 'acf-options' && ! $this->get_page( 'acf-options' ) ) {
- $this->add_page( '' );
- }
-
- return $this->add_page( $page );
- }
-
- function update_page( $slug = '', $data = array() ) {
-
- $page = $this->get_page( $slug );
-
- if ( ! $page ) {
- return false;
- }
-
- $page = array_merge( $page, $data );
-
- $this->pages[ $slug ] = $page;
-
- return $page;
- }
-
- function get_page( $slug ) {
- return isset( $this->pages[ $slug ] ) ? $this->pages[ $slug ] : null;
- }
-
- function get_pages() {
- return $this->pages;
- }
- }
-
- function acf_options_page() {
- global $acf_options_page;
- if ( ! isset( $acf_options_page ) ) {
- $acf_options_page = new acf_options_page();
- }
- return $acf_options_page;
- }
-
- unset( $GLOBALS['acf_options_page'] );
-
- acf_options_page();
- endif;
- if ( ! function_exists( 'acf_add_options_page' ) ) :
- function acf_add_options_page( $page = '' ) {
- return acf_options_page()->add_page( $page );
- }
- endif;
- if ( ! function_exists( 'acf_add_options_sub_page' ) ) :
- function acf_add_options_sub_page( $page = '' ) {
- return acf_options_page()->add_sub_page( $page );
- }
- endif;
- if ( ! function_exists( 'acf_update_options_page' ) ) :
- function acf_update_options_page( $slug = '', $data = array() ) {
- return acf_options_page()->update_page( $slug, $data );
- }
- endif;
- if ( ! function_exists( 'acf_get_options_page' ) ) :
- function acf_get_options_page( $slug ) {
-
- $page = acf_options_page()->get_page( $slug );
-
- if ( ! $page ) {
- return false;
- }
-
- $page = apply_filters( 'acf/get_options_page', $page, $slug );
-
- return $page;
- }
- endif;
- if ( ! function_exists( 'acf_get_options_pages' ) ) :
- function acf_get_options_pages() {
-
- global $_wp_last_utility_menu;
-
- $pages = acf_options_page()->get_pages();
-
- if ( empty( $pages ) ) {
- return false;
- }
-
- foreach ( $pages as $slug => &$page ) {
- $page = acf_get_options_page( $slug );
- }
-
- foreach ( $pages as $slug => &$page ) {
-
- if ( $page['parent_slug'] ) {
- continue;
- }
-
- if ( ! $page['position'] ) {
- $_wp_last_utility_menu++;
- $page['position'] = $_wp_last_utility_menu;
- }
-
- if ( ! $page['redirect'] ) {
- continue;
- }
-
- $parent = $page['menu_slug'];
- $child = '';
-
- foreach ( $pages as &$sub_page ) {
-
- if ( $sub_page['parent_slug'] !== $parent ) {
- continue;
- }
-
- if ( ! $child ) {
- $child = $sub_page['menu_slug'];
- }
-
- $sub_page['parent_slug'] = $child;
- }
-
- if ( $child ) {
- $page['menu_slug'] = $child;
- }
- }
-
- $pages = apply_filters( 'acf/get_options_pages', $pages );
-
- return $pages;
- }
- endif;
- if ( ! function_exists( 'acf_set_options_page_title' ) ) :
- function acf_set_options_page_title( $title = 'Options' ) {
- acf_update_options_page(
- 'acf-options',
- array(
- 'page_title' => $title,
- 'menu_title' => $title,
- )
- );
- }
- endif;
- if ( ! function_exists( 'acf_set_options_page_menu' ) ) :
- function acf_set_options_page_menu( $title = 'Options' ) {
- acf_update_options_page(
- 'acf-options',
- array(
- 'menu_title' => $title,
- )
- );
- }
- endif;
- if ( ! function_exists( 'acf_set_options_page_capability' ) ) :
- function acf_set_options_page_capability( $capability = 'edit_posts' ) {
- acf_update_options_page(
- 'acf-options',
- array(
- 'capability' => $capability,
- )
- );
- }
- endif;
- if ( ! function_exists( 'register_options_page' ) ) :
- function register_options_page( $page = '' ) {
- acf_add_options_sub_page( $page );
- }
- endif;
|