| Server IP : 172.67.191.88 / Your IP : 104.23.197.164 Web Server : Microsoft-IIS/7.5 System : Windows NT WIN-HN0MTSF2AF1 6.1 build 7601 (Windows Server 2008 R2 Enterprise Edition Service Pack 1) AMD64 User : IWPD_11(bayt-altogg) ( 0) PHP Version : 8.2.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : C:/Inetpub/vhosts/bayt-altoggar.com/httpdocs/wp-content/themes/customify/inc/ |
Upload File : |
<?php
if ( is_admin() ) {
// Calls the class on the post edit screen.
add_action( 'load-post.php', array( 'Customify_MetaBox', 'get_instance' ) );
add_action( 'load-post-new.php', array( 'Customify_MetaBox', 'get_instance' ) );
}
/**
* The Metabox.
*/
class Customify_MetaBox {
public static $_instance = null;
/**
* @see Customify_Form_Fields
* @var Customify_Form_Fields null
*/
public $field_builder = null;
public static function get_instance() {
if ( is_null( self::$_instance ) ) {
self::$_instance = new self();
add_action( 'add_meta_boxes', array( self::$_instance, 'add_meta_box' ) );
add_action( 'save_post', array( self::$_instance, 'save' ) );
add_action( 'admin_enqueue_scripts', array( self::$_instance, 'scripts' ) );
require_once get_template_directory() . '/inc/class-metabox-fields.php';
self::$_instance->field_builder = new Customify_Form_Fields();
self::$_instance->fields_config();
do_action( 'customify/metabox/init', self::$_instance );
}
return self::$_instance;
}
/**
* Add metabox fields
*
* @since 0.2.2
*/
function fields_config() {
$this->field_builder->add_tab(
'layout',
array(
'title' => __( 'Layout', 'customify' ),
'icon' => 'dashicons dashicons-grid-view',
)
);
$this->field_builder->add_tab(
'page_header',
array(
'title' => __( 'Page Header', 'customify' ),
'icon' => 'dashicons dashicons-editor-kitchensink',
)
);
$this->field_builder->add_field(
array(
'title' => __( 'Content Layout', 'customify' ),
'name' => 'content_layout',
'tab' => 'layout',
'type' => 'select',
'choices' => array(
'full-width' => __( 'Full Width', 'customify' ),
'full-stretched' => __( 'Full Width - Stretched', 'customify' ),
'narrow' => __( 'Narrow', 'customify' ),
),
'show_default' => true,
)
);
// Page Title Layout (formerly "Display" under the Page Header tab).
// Promoted into the Layout tab next to Content Layout because it's
// the same kind of decision — where does the page title render —
// and the rest of "Page Header" tab (Transparent Header) is a
// secondary concern. Stays as a `select` whose values feed
// `_customify_page_header_display`, so existing data still resolves.
$this->field_builder->add_field(
array(
'title' => __( 'Page Title Layout', 'customify' ),
'name' => 'page_header_display',
'tab' => 'layout',
'type' => 'select',
'choices' => array(
'default' => __( 'Inherit from customize settings', 'customify' ),
'normal' => __( 'Default - inside main content', 'customify' ),
'cover' => __( 'Cover', 'customify' ),
'titlebar' => __( 'Titlebar', 'customify' ),
'none' => __( 'Hide', 'customify' ),
),
)
);
$this->field_builder->add_field(
array(
'title' => __( 'Sidebar', 'customify' ),
'name' => 'sidebar',
'tab' => 'layout',
'type' => 'select',
'choices' => customify_get_config_sidebar_layouts(),
'show_default' => true,
'default_label' => __( 'Inherit from customize settings', 'customify' ),
)
);
// Display order groups header-related toggles together (Header →
// Header Top/Main/Bottom), then page-content toggles (Page Title,
// Content Vertical Padding), then footer toggles below. Mirrors the
// block-editor sidebar order in src/backend/page-settings/index.js
// so users see the same layout in classic + block editors.
$disable_elements_choices = array(
'disable_header' => __( 'Disable Header', 'customify' ),
'disable_header_top' => __( 'Disable Header Top', 'customify' ),
'disable_header_main' => __( 'Disable Header Main', 'customify' ),
'disable_header_bottom' => __( 'Disable Header Bottom', 'customify' ),
'disable_page_title' => __( 'Disable Title', 'customify' ),
// Strips the vertical padding from #main / #sidebar-primary /
// #sidebar-secondary so full-width landing-page sections sit
// flush against the header and footer. Default body cascade
// keeps the padding so content pages still get reading-room.
'disable_content_vertical_padding' => __( 'Disable Content Vertical Padding', 'customify' ),
);
if ( class_exists( 'Customify_Pro' ) ) {
$disable_elements_choices['disable_footer_top'] = __( 'Disable Footer Top', 'customify' );
}
$disable_elements_choices['disable_footer_main'] = __( 'Disable Footer Main', 'customify' );
$disable_elements_choices['disable_footer_bottom'] = __( 'Disable Footer Bottom', 'customify' );
$this->field_builder->add_field(
array(
'title' => __( 'Disable Elements', 'customify' ),
'name' => 'disable_elements',
'tab' => 'layout',
'type' => 'multiple_checkbox',
'choices' => $disable_elements_choices,
)
);
// Page Title Layout was previously registered here under the
// 'page_header' tab as "Display". Moved up into the 'layout' tab
// next to Content Layout (see the field above) and renamed
// "Page Title Layout" so the dropdown title describes what it
// actually controls. The underlying meta key
// `_customify_page_header_display` is unchanged — saved values on
// existing sites still load correctly.
$this->field_builder->add_field(
array(
'title' => __( 'Transparent Header', 'customify' ),
'name' => 'header_transparent_display',
'tab' => 'page_header',
'type' => 'select',
'choices' => array(
'default' => __( 'Inherit from Customizer settings', 'customify' ),
'show' => __( 'Force transparent', 'customify' ),
'hide' => __( 'Force opaque', 'customify' ),
),
)
);
if ( Customify_Breadcrumb::get_instance()->support_plugins_active() ) {
$this->field_builder->add_tab(
'breadcrumb',
array(
'title' => __( 'Breadcrumb', 'customify' ),
'icon' => 'dashicons dashicons-admin-links',
)
);
$this->field_builder->add_field(
array(
'title' => __( 'Breadcrumb', 'customify' ),
'tab' => 'breadcrumb',
'name' => 'breadcrumb_display',
'type' => 'select',
'choices' => array(
'default' => __( 'Inherit from customize settings', 'customify' ),
'hide' => __( 'Hide', 'customify' ),
'show' => __( 'Show', 'customify' ),
),
)
);
}
}
public function scripts( $hook ) {
if ( 'post.php' != $hook && 'post-new.php' != $hook ) {
return;
}
wp_enqueue_script( 'customify-metabox', esc_url( get_template_directory_uri() ) . '/build/js/backend/admin/metabox.js', array( 'jquery' ), Customify::$version, true );
wp_enqueue_style( 'customify-metabox', esc_url( get_template_directory_uri() ) . '/build/css/backend/admin/metabox.css', false, Customify::$version );
}
public function get_support_post_types() {
// Delegate to the shared gate so the classic metabox and the block-editor
// panel (inc/admin/page-settings.php) support exactly the same post types,
// and both exclude no-front-end utility CPTs (e.g. the Pro Hooks store).
if ( function_exists( 'customify_get_meta_support_post_types' ) ) {
return customify_get_meta_support_post_types();
}
return array_values( get_post_types( array( 'public' => true ), 'names', 'and' ) );
}
/**
* Returns true when the current screen is the block editor.
*
* @return bool
*/
private function is_block_editor() {
$screen = get_current_screen();
return $screen && method_exists( $screen, 'is_block_editor' ) && $screen->is_block_editor();
}
/**
* Adds the meta box container.
* Only rendered in the classic editor; the block editor uses the React plugin instead.
*
* @param string $post_type Post Type.
*/
public function add_meta_box( $post_type ) {
if ( $this->is_block_editor() ) {
return;
}
$post_types = $this->get_support_post_types();
if ( in_array( $post_type, $post_types ) ) {
add_meta_box(
'customify_page_settings',
__( 'Customify Settings', 'customify' ),
array( $this, 'render_meta_box_content' ),
$post_type,
'side',
'low'
);
}
}
/**
* Save the meta when the post is saved.
*
* @param int $post_id The ID of the post being saved.
* @return int|bool
*/
public function save( $post_id ) {
/**
* We need to verify this came from the our screen and with proper authorization,
* because save_post can be triggered at other times.
*/
if ( ! isset( $_POST['customify_page_settings_nonce'] ) ) { // Check if our nonce is set.
return $post_id;
}
$nonce = sanitize_text_field( wp_unslash( $_POST['customify_page_settings_nonce'] ) );
// Verify that the nonce is valid.
if ( ! wp_verify_nonce( $nonce, 'customify_page_settings' ) ) {
return $post_id;
}
/*
* If this is an autosave, our form has not been submitted,
* so we don't want to do anything.
*/
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return $post_id;
}
// Check the user's permissions.
if ( 'page' == get_post_type( $post_id ) ) {
if ( ! current_user_can( 'edit_page', $post_id ) ) {
return $post_id;
}
} else {
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return $post_id;
}
}
/**
* @since 0.2.2
*/
$settings = $this->field_builder->get_submitted_values();
$kses_safe = static function ( $v ) {
// PHP 8.1+ deprecates passing null to wp_kses_post (internal preg_replace).
return wp_kses_post( null === $v ? '' : (string) $v );
};
foreach ( $settings as $key => $value ) {
if ( ! is_array( $value ) ) {
$value = $kses_safe( $value );
} else {
$value = array_map( $kses_safe, $value );
}
// Update the meta field.
update_post_meta( $post_id, '_customify_' . $key, $value );
}
}
/**
* Render Meta Box content.
*
* @param WP_Post $post The post object.
*/
public function render_meta_box_content( $post ) {
// Add an nonce field so we can check for it later.
wp_nonce_field( 'customify_page_settings', 'customify_page_settings_nonce' );
$values = array();
foreach ( $this->field_builder->get_all_fields() as $key => $f ) {
if ( 'multiple_checkbox' == $f['type'] ) {
foreach ( (array) $f['choices'] as $_key => $label ) {
$value = get_post_meta( $post->ID, '_customify_' . $_key, true );
$values[ $_key ] = $value;
}
} elseif ( $f['name'] ) {
$values[ $f['name'] ] = get_post_meta( $post->ID, '_customify_' . $f['name'], true );
}
}
$this->field_builder->set_values( $values );
$this->field_builder->render();
}
}