OwlCyberSecurity - MANAGER
Edit File: class-bsf-sb-metabox.php
<?php /** * BSF_SB_Metabox * * @package BSF Custom Sidebars */ if ( ! class_exists( 'BSF_SB_Metabox' ) ) { /** * BSF_SB_Metabox initial setup * * @since 1.0.0 */ final class BSF_SB_Metabox { /** * Member Variable * * @var instance */ private static $instance; /** * Initiator */ public static function get_instance() { if ( ! isset( self::$instance ) ) { self::$instance = new self(); } return self::$instance; } /** * Constructor */ public function __construct() { /* Title filter */ add_filter( 'enter_title_here', array( $this, 'change_post_name_palceholder' ), 10, 1 ); /* Setup metabox */ add_action( 'admin_menu', array( $this, 'metabox_actions' ), 25 ); /* Save meta data */ add_action( 'save_post', array( $this, 'metabox_save' ), 10, 1 ); } /** * Replace sidebar metabox. * * @since 1.0.0 * @param string $title post title. * @return string title */ public function change_post_name_palceholder( $title ) { if ( get_post_type() == BSF_SB_POST_TYPE ) { $title = __( 'Enter sidebar title here', 'sidebar-manager' ); } return $title; } /** * Loads classes and includes. * * @since 1.0.0 * @return void */ public function metabox_actions() { /* Remove the "Excerpt" meta box for the sidebars. */ remove_meta_box( 'postexcerpt', BSF_SB_POST_TYPE, 'normal' ); /* Target Rule */ add_meta_box( 'sidebar-settings', __( 'Sidebar Settings', 'sidebar-manager' ), array( $this, 'sidebar_settings' ), BSF_SB_POST_TYPE, 'normal', 'core' ); } /** * Replace sidebar metabox. * * @since 1.0.0 * @param int $post_id current id. */ public function metabox_save( $post_id ) { if ( ! isset( $_POST[ BSF_SB_POST_TYPE . '-nonce' ] ) ) { return; } if ( get_post_type() != BSF_SB_POST_TYPE || ! wp_verify_nonce( $_POST[ BSF_SB_POST_TYPE . '-nonce' ], BSF_SB_POST_TYPE ) ) { return $post_id; } // Verify if this is an auto save routine. if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return $post_id; } if ( ! current_user_can( 'edit_post', $post_id ) ) { return $post_id; } $store_keys = array( 'bsf-sb-location', 'bsf-sb-exclusion' ); foreach ( $store_keys as $key ) { $meta_value = BSF_SB_Target_Rules_Fields::get_format_rule_value( $_POST, $key ); update_post_meta( $post_id, '_' . $key, $meta_value ); } if ( isset( $_POST['bsf-sb-users'] ) ) { $bsf_sb_user_roles = array_map( 'sanitize_text_field', $_POST['bsf-sb-users'] ); update_post_meta( $post_id, '_bsf-sb-users', $bsf_sb_user_roles ); } if ( isset( $_POST['replace_this_sidebar'] ) ) { $replace_sidebar = sanitize_text_field( $_POST['replace_this_sidebar'] ); update_post_meta( $post_id, '_replace_this_sidebar', $replace_sidebar ); } } /** * Target Rule. * * @since 1.0.0 * @param object $post post_object. * @return void */ public function sidebar_settings( $post ) { $post_id = $post->ID; $include_locations = get_post_meta( $post_id, '_bsf-sb-location', true ); $exclude_locations = get_post_meta( $post_id, '_bsf-sb-exclusion', true ); $users = get_post_meta( $post_id, '_bsf-sb-users', true ); $replace_sidebar = get_post_meta( $post_id, '_replace_this_sidebar', true ); /* Get Sidebars to show in replace list */ $sidebars = $this->show_sidebars_to_replace(); $out = wp_nonce_field( BSF_SB_POST_TYPE, BSF_SB_POST_TYPE . '-nonce', true, false ); $out .= '<table class="bsf-sb-table widefat">'; $out .= '<tbody>'; $out .= '<tr class="bsf-sb-row">'; $out .= '<td class="bsf-sb-row-heading">'; $out .= '<label>' . esc_html__( 'Sidebar To Replace', 'sidebar-manager' ) . '</label>'; $out .= '<i class="bsf-sb-help dashicons dashicons-editor-help" title="' . esc_attr__( 'Choose which sidebar you want to replace. Select None to disable this sidebar.', 'sidebar-manager' ) . '"></i>'; $out .= '</td>'; $out .= '<td class="bsf-sb-row-content">'; if ( ! empty( $sidebars ) ) { $out .= '<select name="replace_this_sidebar" class="widefat">'; $out .= '<option value=""' . selected( $replace_sidebar, '', false ) . '>' . __( 'None', 'sidebar-manager' ) . '</option>'; foreach ( $sidebars as $slug => $name ) { if ( strrpos( $slug, BSF_SB_PREFIX ) !== false ) { continue; } $out .= '<option value="' . esc_attr( $slug ) . '"' . selected( $replace_sidebar, $slug, false ) . '>' . esc_attr( $name ) . '</option>'; } $out .= '</select>'; } else { $out .= '<p>' . __( 'Sidebars are not available.', 'sidebar-manager' ) . '</p>'; } $out .= '</td>'; $out .= '</tr>'; $out .= '<tr class="bsf-sb-row">'; $out .= '<td class="bsf-sb-row-heading">'; $out .= '<label>' . esc_html__( 'Description', 'sidebar-manager' ) . '</label>'; $out .= '<i class="bsf-sb-help dashicons dashicons-editor-help" title="' . esc_attr__( 'Add an optional description fot the Widgets screen.', 'sidebar-manager' ) . '"></i>'; $out .= '</td>'; $out .= '<td class="bsf-sb-row-content">'; $out .= '<input type="text" rows="1" name="excerpt" value="' . esc_attr( $post->post_excerpt ) . '">'; $out .= '</td>'; $out .= '</tr>'; $out .= '<tr class="bsf-sb-row">'; $out .= '<td class="bsf-sb-row-heading">'; $out .= '<label>' . esc_html__( 'Display On', 'sidebar-manager' ) . '</label>'; $out .= '<i class="bsf-sb-help dashicons dashicons-editor-help" title="' . esc_attr__( 'Add locations for where this sidebar should appear.', 'sidebar-manager' ) . '"></i>'; $out .= '</td>'; $out .= '<td class="bsf-sb-row-content">'; ob_start(); BSF_SB_Target_Rules_Fields::target_rule_settings_field( 'bsf-sb-location', array( 'title' => __( 'Display Rules', 'sidebar-manager' ), 'value' => '[{"type":"basic-global","specific":null}]', 'tags' => 'site,enable,target,pages', 'rule_type' => 'display', 'add_rule_label' => __( 'Add Display Rule', 'sidebar-manager' ), ), $include_locations ); $out .= ob_get_clean(); $out .= '</td>'; $out .= '</tr>'; $out .= '<tr class="bsf-sb-row bsf-sb-hidden">'; $out .= '<td class="bsf-sb-row-heading">'; $out .= '<label>' . esc_html__( 'Do Not Display On', 'sidebar-manager' ) . '</label>'; $out .= '<i class="bsf-sb-help dashicons dashicons-editor-help" title="' . esc_attr__( 'This Sidebar will not appear at these locations.', 'sidebar-manager' ) . '"></i>'; $out .= '</td>'; $out .= '<td class="bsf-sb-row-content">'; ob_start(); BSF_SB_Target_Rules_Fields::target_rule_settings_field( 'bsf-sb-exclusion', array( 'title' => __( 'Exclude On', 'sidebar-manager' ), 'value' => '[]', 'tags' => 'site,enable,target,pages', 'add_rule_label' => __( 'Add Excludion Rule', 'sidebar-manager' ), 'rule_type' => 'exclude', ), $exclude_locations ); $out .= ob_get_clean(); $out .= '</td>'; $out .= '</tr>'; $out .= '<tr class="bsf-sb-row">'; $out .= '<td class="bsf-sb-row-heading">'; $out .= '<label>' . esc_html__( 'User Roles', 'sidebar-manager' ) . '</label>'; $out .= '<i class="bsf-sb-help dashicons dashicons-editor-help" title="' . esc_attr__( 'Target header based on user role.', 'sidebar-manager' ) . '"></i>'; $out .= '</td>'; $out .= '<td class="bsf-sb-row-content">'; ob_start(); BSF_SB_Target_Rules_Fields::target_user_role_settings_field( 'bsf-sb-users', array( 'title' => __( 'Users', 'sidebar-manager' ), 'value' => '[]', 'tags' => 'site,enable,target,pages', 'add_rule_label' => __( 'Add User Rule', 'sidebar-manager' ), ), $users ); $out .= ob_get_clean(); $out .= '</td>'; $out .= '</tr>'; $out .= '</tbody>'; $out .= '</table>'; echo $out; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** * Replace sidebar metabox. * * @since 1.0.0 * @return array of sidebars */ public function show_sidebars_to_replace() { global $wp_registered_sidebars; $sidebars_show = array(); if ( is_array( $wp_registered_sidebars ) ) { foreach ( $wp_registered_sidebars as $slug => $data ) { $sidebars_show[ $slug ] = $data['name']; } } return $sidebars_show; } } } BSF_SB_Metabox::get_instance();