221 lines
5.3 KiB
PHP
221 lines
5.3 KiB
PHP
<?php
|
|
defined( 'WPINC' ) or die;
|
|
|
|
class Generate_Page_Header_Locations {
|
|
/**
|
|
* Holds the values to be used in the fields callbacks
|
|
*/
|
|
private $options;
|
|
|
|
/**
|
|
* Start up
|
|
*/
|
|
public function __construct() {
|
|
add_action( 'admin_menu', array( $this, 'add_plugin_page' ) );
|
|
add_action( 'admin_init', array( $this, 'page_init' ) );
|
|
}
|
|
|
|
/**
|
|
* Add options page
|
|
*/
|
|
public function add_plugin_page() {
|
|
add_submenu_page(
|
|
function_exists( 'generate_premium_do_elements' ) ? 'themes.php' : 'edit.php?post_type=generate_page_header',
|
|
__( 'Global Locations', 'gp-premium' ),
|
|
__( 'Global Locations', 'gp-premium' ),
|
|
'manage_options',
|
|
'page-header-global-locations',
|
|
array( $this, 'create_admin_page' )
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Options page callback
|
|
*/
|
|
public function create_admin_page() {
|
|
// Set class property
|
|
$this->options = get_option( 'generate_page_header_global_locations' );
|
|
?>
|
|
<div class="wrap">
|
|
<h1><?php _e( 'Global Locations', 'gp-premium' ); ?></h1>
|
|
<form method="post" action="options.php">
|
|
<?php
|
|
// This prints out all hidden setting fields
|
|
settings_fields( 'page_header_global_locations' );
|
|
do_settings_sections( 'page-header-global-locations' );
|
|
submit_button();
|
|
?>
|
|
</form>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Register and add settings
|
|
*/
|
|
public function page_init() {
|
|
register_setting(
|
|
'page_header_global_locations',
|
|
'generate_page_header_global_locations',
|
|
array( $this, 'sanitize' )
|
|
);
|
|
|
|
add_settings_section(
|
|
'page_header_global_location_section',
|
|
'',
|
|
'',
|
|
'page-header-global-locations'
|
|
);
|
|
|
|
add_settings_field(
|
|
'generate_page_header_location_blog',
|
|
__( 'Posts Page (blog)', 'gp-premium' ),
|
|
array( $this, 'post_type_select' ),
|
|
'page-header-global-locations',
|
|
'page_header_global_location_section',
|
|
'blog'
|
|
);
|
|
|
|
add_settings_field(
|
|
'generate_page_header_location_search_results',
|
|
__( 'Search Results', 'gp-premium' ),
|
|
array( $this, 'post_type_select' ),
|
|
'page-header-global-locations',
|
|
'page_header_global_location_section',
|
|
'search_results'
|
|
);
|
|
|
|
add_settings_field(
|
|
'generate_page_header_location_404',
|
|
__( '404 Template', 'gp-premium' ),
|
|
array( $this, 'post_type_select' ),
|
|
'page-header-global-locations',
|
|
'page_header_global_location_section',
|
|
'404'
|
|
);
|
|
|
|
add_settings_section(
|
|
'page_header_cpt_single_section',
|
|
__( 'Post Types - Single', 'gp-premium' ),
|
|
'',
|
|
'page-header-global-locations'
|
|
);
|
|
|
|
$post_types = get_post_types( array( 'public' => true ), 'objects' );
|
|
|
|
foreach( $post_types as $type ) {
|
|
add_settings_field(
|
|
'generate_page_header_location_' . $type->name,
|
|
$type->label,
|
|
array( $this, 'post_type_select' ),
|
|
'page-header-global-locations',
|
|
'page_header_cpt_single_section',
|
|
$type->name
|
|
);
|
|
}
|
|
|
|
$post_types = get_post_types( array( 'public' => true ), 'objects' );
|
|
unset( $post_types['attachment'] );
|
|
unset( $post_types['page'] );
|
|
unset( $post_types['post'] );
|
|
|
|
if ( count( $post_types ) > 0 ) {
|
|
add_settings_section(
|
|
'page_header_cpt_archives_section',
|
|
__( 'Post Types - Archives', 'gp-premium' ),
|
|
'',
|
|
'page-header-global-locations'
|
|
);
|
|
}
|
|
|
|
foreach( $post_types as $type ) {
|
|
add_settings_field(
|
|
'generate_page_header_location_' . $type->name . '_archives',
|
|
$type->label,
|
|
array( $this, 'post_type_select' ),
|
|
'page-header-global-locations',
|
|
'page_header_cpt_archives_section',
|
|
$type->name . '_archives'
|
|
);
|
|
}
|
|
|
|
$taxonomies = get_taxonomies( array( 'public' => true ), 'objects' );
|
|
|
|
if ( count( $taxonomies ) > 0 ) {
|
|
add_settings_section(
|
|
'page_header_taxonomies_section',
|
|
__( 'Taxonomies - Archives', 'gp-premium' ),
|
|
'',
|
|
'page-header-global-locations'
|
|
);
|
|
}
|
|
|
|
foreach( $taxonomies as $type ) {
|
|
add_settings_field(
|
|
'generate_page_header_location_' . $type->name,
|
|
$type->label,
|
|
array( $this, 'post_type_select' ),
|
|
'page-header-global-locations',
|
|
'page_header_taxonomies_section',
|
|
$type->name
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sanitize each setting field as needed
|
|
*
|
|
* @param array $input Contains all settings fields as array keys
|
|
*/
|
|
public function sanitize( $input ) {
|
|
// Initialize the new array that will hold the sanitize values
|
|
$new_input = array();
|
|
|
|
// Loop through the input and sanitize each of the values
|
|
if ( is_array( $input ) || is_object( $input ) ) {
|
|
foreach ( $input as $key => $val ) {
|
|
$new_input[ $key ] = absint( $val );
|
|
}
|
|
}
|
|
|
|
return $new_input;
|
|
}
|
|
|
|
/**
|
|
* Get the settings option array and print one of its values
|
|
*/
|
|
public function post_type_select( $type ) {
|
|
$options = wp_parse_args(
|
|
get_option( 'generate_page_header_global_locations', array() ),
|
|
''
|
|
);
|
|
?>
|
|
<select id="<?php echo $type;?>" name="generate_page_header_global_locations[<?php echo $type;?>]">
|
|
<option value=""></option>
|
|
<?php
|
|
$page_headers = get_posts(array(
|
|
'posts_per_page' => -1,
|
|
'orderby' => 'title',
|
|
'post_type' => 'generate_page_header',
|
|
'suppress_filters' => false,
|
|
));
|
|
|
|
$options[ $type ] = ! isset( $options[ $type ] ) ? '' : $options[ $type ];
|
|
|
|
foreach( $page_headers as $header ) {
|
|
printf( '<option value="%1$s" %2$s>%3$s</option>',
|
|
$header->ID,
|
|
selected( $options[ $type ], $header->ID ),
|
|
$header->post_title
|
|
);
|
|
}
|
|
?>
|
|
</select>
|
|
<?php
|
|
}
|
|
}
|
|
|
|
if ( is_admin() ) {
|
|
$generate_page_header_locations = new Generate_Page_Header_Locations();
|
|
}
|