* @license GPL-3.0
* @copyright Barn2 Media Ltd
*/
class Settings_Page implements Registerable {
const MENU_SLUG = 'posts_table_search_sort';
const OPTION_GROUP = 'posts_table_search_sort_main';
private static $readonly_settings = array(
'post_type',
'image_size',
'lightbox',
'shortcodes',
'excerpt_length',
'links',
'lazy_load',
'post_limit',
'cache',
'filters',
'page_length',
'search_box',
'totals',
'pagination',
'paging_type',
'reset_button',
);
public function register() {
add_action( 'admin_menu', array( $this, 'add_settings_page' ) );
add_action( 'admin_init', array( $this, 'register_settings' ) );
}
public function add_settings_page() {
add_options_page(
__( 'Posts Table With Search & Sort', 'posts-data-table' ),
__( 'Posts Table With Search & Sort', 'posts-data-table' ),
'manage_options',
self::MENU_SLUG,
array( $this, 'render_settings_page' )
);
}
public function render_settings_page() {
?>
'string', // array type not supported, so just use string
'description' => 'Posts Table with Search and Sort - table defaults',
'sanitize_callback' => '\Barn2\Plugin\Posts_Table_Search_Sort\Settings::sanitize_table_args'
) );
$default_args = Simple_Posts_Table::get_defaults();
$args_setting = Settings::TABLE_ARGS_SETTING;
// Selecting posts
Settings_API_Helper::add_settings_section(
'ptss_post_selection', self::MENU_SLUG, __( 'Posts selection', 'posts-data-table' ), array( $this, 'section_description_selecting_posts' ),
$this->mark_readonly_settings( array(
array(
'id' => $args_setting . '[post_type]',
'title' => __( 'Post type', 'posts-data-table' ),
'type' => 'select',
'desc' => __( 'The default post type for your tables.', 'posts-data-table' ),
'options' => array( 'post' ),
'default' => 'post'
),
) )
);
// Table content
Settings_API_Helper::add_settings_section(
'ptss_content', self::MENU_SLUG, __( 'Table content', 'posts-data-table' ), array( $this, 'section_description_table_content' ),
$this->mark_readonly_settings( array(
array(
'id' => $args_setting . '[columns]',
'title' => __( 'Columns', 'posts-data-table' ),
'type' => 'text',
'desc' => __( 'The columns displayed in your table (comma-separated). ', 'posts-data-table' ),
'default' => $default_args['columns'],
),
array(
'id' => $args_setting . '[image_size]',
'title' => __( 'Image size', 'posts-data-table' ),
'type' => 'text',
'desc' => __( "W x H in pixels. Sets the image size when using the 'image' column. ", 'posts-data-table' ) . Util::barn2_link( 'kb/ptp-column-widths/#image-size' ),
'default' => 'thumbnail',
),
array(
'id' => $args_setting . '[lightbox]',
'title' => __( 'Image lightbox', 'posts-data-table' ),
'type' => 'checkbox',
'label' => __( 'Display featured images in a lightbox when opened', 'posts-data-table' ),
'default' => true,
),
array(
'title' => __( 'Shortcodes', 'posts-data-table' ),
'type' => 'checkbox',
'id' => $args_setting . '[shortcodes]',
'label' => __( 'Display shortcodes, HTML and other formatting inside the table content', 'posts-data-table' ),
'default' => true
),
array(
'id' => $args_setting . '[content_length]',
'title' => __( 'Content length', 'posts-data-table' ),
'type' => 'number',
'class' => 'small-text',
'suffix' => __( 'words', 'posts-data-table' ),
'desc' => __( 'Enter -1 to show the full post content.', 'posts-data-table' ),
'default' => $default_args['content_length'],
'custom_attributes' => array(
'min' => -1
)
),
array(
'id' => $args_setting . '[excerpt_length]',
'title' => __( 'Excerpt length', 'posts-data-table' ),
'type' => 'number',
'class' => 'small-text',
'suffix' => __( 'words', 'posts-data-table' ),
'desc' => __( 'Enter -1 to show the full excerpt.', 'posts-data-table' ),
'default' => 15,
'custom_attributes' => array(
'min' => -1
)
),
array(
'id' => $args_setting . '[links]',
'title' => __( 'Links', 'posts-data-table' ),
'type' => 'text',
'desc' => __( 'Display links to the single post page, category, tag, or term archive. ', 'posts-data-table' ) . Util::barn2_link( 'kb/links-posts-table/' ),
'default' => 'all',
)
) )
);
// Loading posts
Settings_API_Helper::add_settings_section(
'ptss_loading', self::MENU_SLUG, __( 'Table loading', 'posts-data-table' ), '__return_false',
$this->mark_readonly_settings( array(
array(
'title' => __( 'Lazy load', 'posts-data-table' ),
'type' => 'checkbox',
'id' => $args_setting . '[lazy_load]',
'label' => __( 'Load the posts one page at a time', 'posts-data-table' ),
'desc' => sprintf( __( 'Enable this if you have many posts or experience slow page load times. ', 'posts-data-table' ) ) . Util::barn2_link( 'kb/posts-table-lazy-load/' ),
'default' => false,
),
array(
'title' => __( 'Post limit', 'posts-data-table' ),
'type' => 'number',
'id' => $args_setting . '[post_limit]',
'desc' => __( 'The maximum (total) number of posts to display in one table.', 'posts-data-table' ),
'default' => 500,
'class' => 'small-text',
'custom_attributes' => array(
'min' => -1
)
),
array(
'title' => __( 'Posts per page', 'posts-data-table' ),
'type' => 'number',
'id' => $args_setting . '[rows_per_page]',
'desc' => __( 'The number of posts per page of results. Enter -1 to display all posts on one page.', 'posts-data-table' ),
'default' => $default_args['rows_per_page'],
'custom_attributes' => array(
'min' => -1
)
),
array(
'title' => __( 'Caching', 'posts-data-table' ),
'type' => 'checkbox',
'id' => $args_setting . '[cache]',
'label' => __( 'Cache table contents to improve load time', 'posts-data-table' ),
'default' => false
)
) )
);
// Sorting
$sort_columns = wp_list_pluck( Simple_Posts_Table::get_column_defaults(), 'heading' );
Settings_API_Helper::add_settings_section(
'ptss_sorting', self::MENU_SLUG, __( 'Sorting', 'posts-data-table' ), '__return_false',
$this->mark_readonly_settings( array(
array(
'title' => __( 'Sort by', 'posts-data-table' ),
'type' => 'select',
'id' => $args_setting . '[sort_by]',
'options' => $sort_columns,
'desc' => __( 'The initial sort order applied to the table. ', 'posts-data-table' ),
'default' => $default_args['sort_by']
),
array(
'title' => __( 'Sort direction', 'posts-data-table' ),
'type' => 'select',
'id' => $args_setting . '[sort_order]',
'options' => array(
'' => __( 'Automatic', 'posts-data-table' ),
'asc' => __( 'Ascending (A to Z, 1 to 99)', 'posts-data-table' ),
'desc' => __( 'Descending (Z to A, 99 to 1)', 'posts-data-table' )
),
'default' => $default_args['sort_order']
)
) )
);
// Table controls
Settings_API_Helper::add_settings_section(
'ptss_controls', self::MENU_SLUG, __( 'Table controls', 'posts-data-table' ), '__return_false',
$this->mark_readonly_settings( array(
array(
'title' => __( 'Search filters', 'posts-data-table' ),
'type' => 'select',
'id' => $args_setting . '[filters]',
'options' => array(
'false' => __( 'Disabled', 'posts-data-table' ),
'true' => __( 'Show based on columns in table', 'posts-data-table' ),
'custom' => __( 'Custom', 'posts-data-table' )
),
'desc' => __( 'Dropdown lists to filter the table by category, tag, attribute, or custom taxonomy. ', 'posts-data-table' ) . Util::barn2_link( 'kb/posts-table-filters/' ),
'default' => true,
),
array(
'title' => __( 'Page length', 'posts-data-table' ),
'type' => 'select',
'id' => $args_setting . '[page_length]',
'options' => array(
'top' => __( 'Above table', 'posts-data-table' ),
'bottom' => __( 'Below table', 'posts-data-table' ),
'both' => __( 'Above and below table', 'posts-data-table' ),
'false' => __( 'Hidden', 'posts-data-table' )
),
'desc' => __( "The position of the 'Show [x] entries' dropdown list.", 'posts-data-table' ),
'default' => 'top'
),
array(
'title' => __( 'Search box', 'posts-data-table' ),
'type' => 'select',
'id' => $args_setting . '[search_box]',
'options' => array(
'top' => __( 'Above table', 'posts-data-table' ),
'bottom' => __( 'Below table', 'posts-data-table' ),
'both' => __( 'Above and below table', 'posts-data-table' ),
'false' => __( 'Hidden', 'posts-data-table' )
),
'default' => 'top'
),
array(
'title' => __( 'Totals', 'posts-data-table' ),
'type' => 'select',
'id' => $args_setting . '[totals]',
'options' => array(
'top' => __( 'Above table', 'posts-data-table' ),
'bottom' => __( 'Below table', 'posts-data-table' ),
'both' => __( 'Above and below table', 'posts-data-table' ),
'false' => __( 'Hidden', 'posts-data-table' )
),
'desc' => __( "The position of the post totals, e.g. 'Showing 1 to 5 of 10 entries'.", 'posts-data-table' ),
'default' => 'bottom'
),
array(
'title' => __( 'Pagination buttons', 'posts-data-table' ),
'type' => 'select',
'id' => $args_setting . '[pagination]',
'options' => array(
'top' => __( 'Above table', 'posts-data-table' ),
'bottom' => __( 'Below table', 'posts-data-table' ),
'both' => __( 'Above and below table', 'posts-data-table' ),
'false' => __( 'Hidden', 'posts-data-table' )
),
'desc' => __( 'The position of the paging buttons which scroll between results.', 'posts-data-table' ),
'default' => 'bottom'
),
array(
'title' => __( 'Pagination type', 'posts-data-table' ),
'type' => 'select',
'id' => $args_setting . '[paging_type]',
'options' => array(
'numbers' => __( 'Numbers only', 'posts-data-table' ),
'simple' => __( 'Prev|Next', 'posts-data-table' ),
'simple_numbers' => __( 'Prev|Next + Numbers', 'posts-data-table' ),
'full' => __( 'Prev|Next|First|Last', 'posts-data-table' ),
'full_numbers' => __( 'Prev|Next|First|Last + Numbers', 'posts-data-table' )
),
'default' => 'simple_numbers'
),
array(
'title' => __( 'Reset button', 'posts-data-table' ),
'type' => 'checkbox',
'id' => $args_setting . '[reset_button]',
'label' => __( 'Show a reset button above the table', 'posts-data-table' ),
'default' => false
)
) )
);
}
public function mark_readonly_settings( $settings ) {
foreach ( $settings as &$setting ) {
$subkey = preg_filter( '/^[\w\[\]]+\[(\w+)\]$/', '$1', $setting['id'] );
if ( $subkey && false !== array_search( $subkey, self::$readonly_settings ) ) {
$setting['field_class'] = 'readonly';
$setting['custom_attributes'] = array(
'disabled' => 'disabled'
);
$setting['title'] = $setting['title'] .
sprintf( '%s', Util::barn2_link( 'wordpress-plugins/posts-table-pro/', __( 'Pro version only', 'posts-data-table' ), true ) );
}
}
return $settings;
}
public function section_description_selecting_posts() {
?>
',
''
);
?>
',
''
);
?>