BossBey File Manager
PHP:
8.2.30
OS:
Linux
User:
imagivibe
Root
/
home
/
imagivibe
/
www
/
wp-content
/
plugins
/
porto-functionality
/
meta_boxes
📤 Upload
📝 New File
📁 New Folder
Close
Editing: meta_boxes.php
<?php global $wpdb; require_once( PORTO_META_BOXES_PATH . 'post.php' ); require_once( PORTO_META_BOXES_PATH . 'page.php' ); if ( class_exists( 'Woocommerce' ) ) { require_once( PORTO_META_BOXES_PATH . 'product.php' ); } require_once( PORTO_META_BOXES_PATH . 'portfolio.php' ); require_once( PORTO_META_BOXES_PATH . 'member.php' ); require_once( PORTO_META_BOXES_PATH . 'faq.php' ); require_once( PORTO_META_BOXES_PATH . 'block.php' ); require_once( PORTO_META_BOXES_PATH . 'event.php' ); // Get Meta Tabs function porto_get_meta_tabs( $meta_fields ) { $meta_tabs = array(); $general_tab = array( 'general', __( 'General', 'porto-functionality' ) ); foreach ( $meta_fields as $meta_field ) { $meta_tab = isset( $meta_field['tab'] ) ? $meta_field['tab'] : ''; if ( ! $meta_tab && ! in_array( $general_tab, $meta_tabs ) ) { $meta_tabs[] = $general_tab; } if ( $meta_tab && ! in_array( $meta_tab, $meta_tabs ) ) { $meta_tabs[] = $meta_tab; } } return $meta_tabs; } // Show Meta Boxes function porto_show_meta_box( $meta_fields ) { if ( ! isset( $meta_fields ) || empty( $meta_fields ) ) { return; } $meta_tabs = porto_get_meta_tabs( $meta_fields ); echo '<div class="postoptions porto-meta-tab clearfix">'; if ( count( $meta_tabs ) <= 1 ) { foreach ( $meta_fields as $meta_field ) { porto_show_meta_field( $meta_field ); } } else { echo '<ul class="resp-tabs-list">'; foreach ( $meta_tabs as $meta_tab ) { echo '<li>' . $meta_tab[1] . '</li>'; } echo '</ul>'; echo '<div class="resp-tabs-container">'; foreach ( $meta_tabs as $meta_tab ) { echo '<div>'; echo '<h3>' . $meta_tab[1] . '</h3>'; foreach ( $meta_fields as $meta_field ) { if ( ( ! isset( $meta_field['tab'] ) && 'general' == $meta_tab[0] ) || ( isset( $meta_field['tab'] ) && $meta_field['tab'][0] == $meta_tab[0] ) ) { porto_show_meta_field( $meta_field ); } } echo '</div>'; } echo '</div>'; } echo'</div>'; } // Show Meta Box function porto_show_meta_field( $meta_field ) { if ( isset( $_GET['post'] ) ) { $post_id = (int) ( $_GET['post'] ); $post = get_post( $post_id ); } else { $post = $GLOBALS['post']; } $name = ''; $title = ''; $desc = ''; $type = ''; $tab = ''; $default = ''; $required = ''; $options = ''; extract( shortcode_atts( array( 'name' => '', 'title' => '', 'desc' => '', 'type' => '', 'tab' => '', 'default' => '', 'required' => '', 'options' => '', 'placeholder' => '', 'no_default' => false, 'multiple' => false, ), $meta_field ) ); $meta_value = get_post_meta( $post->ID, $name, true ); if ( '' == $meta_value ) { $meta_value = $default; } $required_atts = array(); if ( $required ) { $required_atts['data-required'] = $required['name']; $required_atts['data-value'] = $required['value']; } $required = porto_stringify_attributes( $required_atts ); if ( 'text' == $type ) : // text ?> <div class="metabox" <?php echo porto_filter_output( $required ); ?>> <h3><?php echo esc_html( $title ); ?></h3> <div class="metainner"> <div class="box-option"> <input type="text" placeholder="<?php echo ( ! empty( $placeholder ) ? $placeholder : '' ); ?>" id="<?php echo esc_attr( $name ); ?>" name="<?php echo esc_attr( $name ); ?>" value="<?php echo stripslashes( $meta_value ); ?>" size="50%" /> </div> <?php if ( $desc ) : ?> <div class="box-info"> <label for="<?php echo esc_attr( $name ); ?>"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array( 'style' => array(), ), 'br' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), 'style' => array(), ), ) ); ?> </label> </div> <?php endif; ?> </div> </div> <?php endif; if ( 'select' == $type ) : // select ?> <div class="metabox" <?php echo porto_filter_output( $required ); ?>> <h3><?php echo esc_html( $title ); ?></h3> <div class="metainner"> <div class="box-option"> <select name="<?php echo esc_attr( $name ); ?>" id="<?php echo esc_attr( $name ); ?>"<?php echo empty( $meta_field['el_class'] ) ? '' : ' class="' . esc_attr( $meta_field['el_class'] ) . '"'; ?>> <?php if ( ( ! is_array( $options ) || ! in_array( '', array_keys( $options ) ) ) && ! $no_default ) : ?> <option value=""><?php esc_html_e( 'Select', 'porto-functionality' ); ?></option> <?php endif; ?> <?php if ( is_array( $options ) ) : foreach ( $options as $key => $value ) : ?> <option value="<?php echo esc_attr( $key ); ?>"<?php echo esc_attr( $meta_value == $key ? ' selected="selected"' : '' ); ?>> <?php echo esc_html( $value ); ?> </option> <?php endforeach; endif ?> </select> </div> <?php if ( $desc ) : ?> <div class="box-info"> <label for="<?php echo esc_attr( $name ); ?>"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array( 'style' => array(), ), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </label> </div> <?php endif; ?> </div> </div> <?php endif; if ( 'ajaxselect2' == $type ) : // select if ( $meta_value && is_array( $meta_value ) ) { $meta_value = implode( ',', $meta_value ); } ?> <div class="metabox" <?php echo porto_filter_output( $required ); ?>> <h3><?php echo esc_html( $title ); ?></h3> <div class="metainner"> <div class="box-option"> <select class="porto-ajaxselect2<?php echo empty( $meta_field['el_class'] ) ? '' : ' ' . esc_attr( $meta_field['el_class'] ); ?>" name="<?php echo esc_attr( $name ); ?>" id="<?php echo esc_attr( $name ); ?>" data-option="<?php echo isset( $meta_field['option'] ) ? esc_attr( $meta_field['option'] ) : ''; ?>" data-value="<?php echo esc_attr( $meta_value ); ?>"> <?php if ( ! is_array( $options ) || ! in_array( '', array_keys( $options ) ) ) : ?> <option value=""><?php esc_html_e( 'Select', 'porto-functionality' ); ?></option> <?php endif; ?> </select> </div> <?php if ( $desc ) : ?> <div class="box-info"> <label for="<?php echo esc_attr( $name ); ?>"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </label> </div> <?php endif; ?> </div> </div> <?php endif; if ( 'upload' == $type ) : // upload image ?> <div class="metabox" <?php echo porto_filter_output( $required ); ?>> <h3><?php echo esc_html( $title ); ?></h3> <div class="metainner"> <div class="box-option"> <input value="<?php echo stripslashes( $meta_value ); ?>" type="text" name="<?php echo esc_attr( $name ); ?>" id="<?php echo esc_attr( $name ); ?>" size="50%" /> <br/> <input class="button_upload_image button" data-id="<?php echo esc_attr( $name ); ?>" type="button" value="<?php esc_attr_e( 'Upload Image', 'porto-functionality' ); ?>" /> <input class="button_remove_image button" data-id="<?php echo esc_attr( $name ); ?>" type="button" value="<?php esc_attr_e( 'Remove Image', 'porto-functionality' ); ?>" /> <?php if ( $desc ) : ?> <p class="description"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </p> <?php endif; ?> </div> </div> </div> <?php endif; if ( 'attach' == $type ) : // attach image ?> <div class="metabox" <?php echo porto_filter_output( $required ); ?>> <h3><?php echo esc_html( $title ); ?></h3> <div class="metainner"> <div class="box-option"> <div class="attach_image<?php echo ( 1 == $multiple ? ' multi-images ui-sortable': '' ); ?>" id="<?php echo esc_attr( $name ); ?>_thumb"> <?php if ( $meta_value ) { if ( 1 == $multiple ) { $meta_values = json_decode( $meta_value ); foreach ( $meta_values as $key => $value ) { ?> <div class="attach-img" attach-id="<?php echo porto_filter_output( $value ) ?>"> <?php echo wp_get_attachment_image( (int) $value, 'full' ); ?> <a href="#" class="delete_img" title="Delete Image"></a></div> <?php } } else { echo wp_get_attachment_image( (int) $meta_value, 'full' ); } } ?> </div> <input value="<?php echo stripslashes( $meta_value ); ?>" type="hidden" name="<?php echo esc_attr( $name ); ?>" id="<?php echo esc_attr( $name ); ?>" size="50%" /> <br/> <input class="button_attach_image button" data-id="<?php echo esc_attr( $name ); ?>" type="button" value="<?php esc_attr_e( 'Attach Image', 'porto-functionality' ); ?>" /> <input class="button_remove_image button" data-id="<?php echo esc_attr( $name ); ?>" type="button" value="<?php esc_attr_e( 'Remove Image', 'porto-functionality' ); ?>" /> <label> <?php if ( $desc ) : ?> <p class="description"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </p> <?php endif; ?> </label> </div> </div> </div> <?php endif; if ( 'video' == $type ) : // attach video ?> <div class="metabox" <?php echo porto_filter_output( $required ); ?>> <h3><?php echo esc_html( $title ); ?></h3> <div class="metainner"> <div class="box-option"> <div class="attach_video" id="<?php echo esc_attr( $name ); ?>_thumb"> <?php if ( $meta_value ) : ?> <video controls autoplay loop src="<?php echo wp_get_attachment_url( (int) $meta_value ); ?>" ></video> <?php endif; ?> </div> <input value="<?php echo stripslashes( $meta_value ); ?>" type="hidden" name="<?php echo esc_attr( $name ); ?>" id="<?php echo esc_attr( $name ); ?>" size="50%" /> <br/> <input class="button_attach_video button" data-id="<?php echo esc_attr( $name ); ?>" type="button" value="<?php esc_attr_e( 'Attach Video', 'porto-functionality' ); ?>" /> <input class="button_remove_video button" data-id="<?php echo esc_attr( $name ); ?>" type="button" value="<?php esc_attr_e( 'Remove Video', 'porto-functionality' ); ?>" /> <label> <?php if ( $desc ) : ?> <p class="description"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </p> <?php endif; ?> </label> </div> </div> </div> <?php endif; if ( 'editor' == $type ) : // editor ?> <div class="metabox" <?php echo porto_filter_output( $required ); ?>> <h3 style="float:none;"><?php echo esc_html( $title ); ?></h3> <div class="metainner"> <div class="box-option"> <?php wp_editor( $meta_value, $name ); ?> </div> <?php if ( $desc ) : ?> <div class="box-info"> <label for="<?php echo esc_attr( $name ); ?>"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </label> </div> <?php endif; ?> </div> </div> <?php endif; if ( 'textarea' == $type ) : // textarea ?> <div class="metabox" <?php echo porto_filter_output( $required ); ?>> <?php if ( ! empty( $title ) ) :?> <h3><?php echo esc_html( $title ); ?></h3> <?php endif; ?> <div class="metainner"> <div class="box-option"> <textarea id="<?php echo esc_attr( $name ); ?>" name="<?php echo esc_attr( $name ); ?>" placeholder="<?php echo ( ! empty( $placeholder ) ? $placeholder : '' ); ?>"><?php echo esc_html( $meta_value ); ?></textarea> </div> <?php if ( $desc ) : ?> <div class="box-info"> <label for="<?php echo esc_attr( $name ); ?>"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </label> </div> <?php endif; ?> </div> </div> <?php endif; if ( ( 'radio' == $type ) && ( ! empty( $options ) ) ) : // radio buttons ?> <div class="metabox" <?php echo porto_filter_output( $required ); ?>> <h3><?php echo esc_html( $title ); ?></h3> <div class="metainner"> <div class="box-option radio"> <?php foreach ( $options as $key => $value ) : ?> <input type="radio" id="<?php echo esc_attr( $name ); ?>_<?php echo esc_attr( $key ); ?>" name="<?php echo esc_attr( $name ); ?>" value="<?php echo esc_attr( $key ); ?>" <?php echo ( isset( $meta_value ) && ( $meta_value == $key ) ? ' checked="checked"' : '' ); ?>/> <label for="<?php echo esc_attr( $name ); ?>_<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $value ); ?></label> <?php endforeach; ?> <br> </div> <?php if ( $desc ) : ?> <div class="box-info"> <label for="<?php echo esc_attr( $name ); ?>"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </label> </div> <?php endif; ?> </div> </div> <?php endif; if ( 'checkbox' == $type ) : // checkbox if ( $meta_value == $name ) { $checked = 'checked="checked"'; } else { $checked = ''; } ?> <div class="metabox" <?php echo porto_filter_output( $required ); ?>> <h3><?php echo esc_html( $title ); ?></h3> <div class="metainner"> <div class="box-option checkbox"> <label><input type="checkbox" name="<?php echo esc_attr( $name ); ?>" value="<?php echo esc_attr( $name ); ?>" <?php echo porto_filter_output( $checked ); ?>/> <?php echo porto_strip_script_tags( $desc ); ?></label> </div> </div> </div> <?php endif; if ( ( 'multi_checkbox' == $type ) && ( ! empty( $options ) ) ) : // radio buttons ?> <div class="metabox" <?php echo porto_filter_output( $required ); ?>> <h3><?php echo esc_html( $title ); ?></h3> <div class="metainner"> <div class="box-option radio"> <?php foreach ( $options as $key => $value ) : ?> <input type="checkbox" id="<?php echo esc_attr( $name ); ?>_<?php echo esc_attr( $key ); ?>" name="<?php echo esc_attr( $name ); ?>[]" value="<?php echo esc_attr( $key ); ?>" <?php echo ( isset( $meta_value ) && in_array( $key, explode( ',', $meta_value ) ) ) ? ' checked="checked"' : ''; ?>/><label for="<?php echo esc_attr( $name ); ?>_<?php echo esc_attr( $key ); ?>"> <?php echo esc_html( $value ); ?> </label> <?php endforeach; ?> </div> <?php if ( $desc ) : ?> <div class="box-info"> <label for="<?php echo esc_attr( $name ); ?>"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </label> </div> <?php endif; ?> </div> </div> <?php endif; if ( 'color' == $type ) : // color ?> <div class="metabox" <?php echo porto_filter_output( $required ); ?>> <h3><?php echo esc_html( $title ); ?></h3> <div class="metainner"> <div class="box-option porto-meta-color"> <input type="text" id="<?php echo esc_attr( $name ); ?>" name="<?php echo esc_attr( $name ); ?>" value="<?php echo stripslashes( $meta_value ); ?>" size="50%" class="porto-color-field" /> <label class="porto-transparency-check" for="<?php echo esc_attr( $name ); ?>-transparency"><input type="checkbox" value="1" id="<?php echo esc_attr( $name ); ?>-transparency" class="checkbox porto-color-transparency"<?php echo 'transparent' == $meta_value ? ' checked="checked"' : ''; ?>> <?php esc_html_e( 'Transparent', 'porto-functionality' ); ?></label> </div> <?php if ( $desc ) : ?> <div class="box-info"> <label for="<?php echo esc_attr( $name ); ?>"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </label> </div> <?php endif; ?> </div> </div> <?php endif; if ( 'button' == $type ) : // button ?> <div class="metabox" <?php echo porto_filter_output( $required ); ?>> <?php if( ! empty( $title ) ):?> <h3><?php echo esc_html( $title ); ?></h3> <?php endif; ?> <div class="metainner"> <div class="box-option"> <button id="<?php echo esc_attr( $name ); ?>" type="button" class="button button-primary<?php echo empty( $meta_field['el_class'] ) ? '' : ' ' . esc_attr( $meta_field['el_class'] ); ?>" name="<?php echo esc_attr( $name ); ?>"><?php echo stripslashes( $meta_field['value'] ); ?></button> </div> <?php if ( $desc ) : ?> <div class="box-info"> <label for="<?php echo esc_attr( $name ); ?>"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), 'span' => array( 'style' => array(), ), ) ); ?> </label> </div> <?php endif; ?> </div> </div> <?php endif; if ( 'subtitle' == $type ) : // subtitle ?> <div class="metabox" <?php echo porto_filter_output( $required ); ?>> <h3><?php echo wp_kses( $title, array( 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?></h3> <?php if ( $desc ) : ?> <div class="box-info"> <label for="<?php echo esc_attr( $name ); ?>"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </label> </div> <?php endif; ?> </div> <?php endif; if ( ( 'imageselect' == $type ) && ( ! empty( $options ) ) ) : // image select ?> <div class="metabox" <?php echo porto_filter_output( $required ); ?>> <h3><?php echo esc_html( $title ); ?></h3> <div class="metainner"> <div class="box-option radio porto-metabox-image-select"> <?php foreach ( $options as $key => $value ) : ?> <label for="<?php echo esc_attr( $name ); ?>_<?php echo esc_attr( $key ); ?>"> <input type="radio" id="<?php echo esc_attr( $name ); ?>_<?php echo esc_attr( $key ); ?>" name="<?php echo esc_attr( $name ); ?>" value="<?php echo esc_attr( $key ); ?>" <?php echo ( isset( $meta_value ) && ( $meta_value == $key ) ? ' checked="checked"' : '' ); ?>/> <img src="<?php echo esc_html( $value['img'] ); ?>" alt="<?php echo esc_html( isset( $value['title'] ) ? $value['title'] : $value['alt'] ); ?>" /><br/> <span><?php echo esc_html( isset( $value['title'] ) ? $value['title'] : $value['alt'] ); ?></span></label> <?php endforeach; ?> <br> </div> <?php if ( $desc ) : ?> <div class="box-info"> <label for="<?php echo esc_attr( $name ); ?>"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </label> </div> <?php endif; ?> </div> </div> <?php endif; } /** * Insert GPT-3 AI metabox to * * @since 2.8.0 */ function porto_add_ai_meta_box() { $meta_fields = array( 'none_desc' => array( 'name' => 'ai_desc_none', 'type' => 'subtitle', 'title' => sprintf( __( 'Please input AI key in %1$sTheme Option%2$s.', 'porto-functionality' ), '<a href="' . porto_get_theme_option_url( 'ai-gpt-key' ) . '" target="_blank">', '</a>' ), 'desc' => __( 'You can generate the descriptions and meta infos easily, correctly and in details with AI engine. ', 'porto-functionality') ), 'prompt_topic' => array( 'name' => 'ai_topic', 'type' => 'textarea', 'el_class' => 'ai_topic', 'placeholder' => __( 'Please leave empty to generate with the title.', 'porto-functionality' ), 'title' => __( 'Alternative Topic ( Instead of Title )', 'porto-functionality' ), 'desc' => sprintf( __( 'You can generate with this topic instead of the title. %1$sLearn More%2$s', 'porto-functionality' ), '<a href="https://www.portotheme.com/wordpress/porto/documentation/how-to-use-openai-for-content-creation/" target="_blank">', '</a>' ), ), 'generate_type' => array( 'name' => 'ai_content_type', 'type' => 'select', 'el_class' => 'ai_content_type', 'title' => __('Generate Type', 'porto-functionality'), 'default' => 'content', 'no_default' => true, 'options' => array( 'content' => __( 'Content', 'porto-functionality' ), 'excerpt' => __( 'Excerpt', 'porto-functionality' ), 'outline' => __( 'Outline', 'porto-functionality' ), 'meta_title' => __( 'Meta Title', 'porto-functionality' ), 'meta_desc' => __( 'Meta Description', 'porto-functionality' ), 'meta_key' => __( 'Meta Keywords', 'porto-functionality' ), ), ), 'write_style' => array( 'name' => 'ai_write_style', 'type' => 'select', 'el_class' => 'ai_write_style', 'title' => __( 'Writing Style', 'porto-functionality' ), 'options' => array( '' => __( 'Normal', 'porto-functionality' ), 'persuasive' => __( 'Persuasive', 'porto-functionality'), 'infromative' => __( 'Infromative', 'porto-functionality'), 'descriptive' => __( 'Descriptive', 'porto-functionality'), 'creative' => __( 'Creative', 'porto-functionality'), 'narrative' => __( 'Narrative', 'porto-functionality'), 'argumentative' => __( 'Argumentative', 'porto-functionality'), 'analytical' => __( 'Analytical', 'porto-functionality'), 'evaluative' => __( 'Evaluative', 'porto-functionality'), ), ), 'user_word' => array( 'name' => 'user_word', 'type' => 'textarea', 'title' => __( 'Additional Prompt', 'porto-functionality'), 'placeholder' => __( 'Ex: Please write at least 10 sentences in Spanish.', 'porto-functionality' ), 'desc' => sprintf( __( 'You can improve the prompt for generating with this additional prompt. %1$sLearn More%2$s', 'porto-functionality' ), '<a href="https://www.portotheme.com/wordpress/porto/documentation/how-to-use-openai-for-content-creation/" target="_blank">', '</a>' ), ), 'generate_btn' => array( 'name' => 'ai_generate', 'type' => 'button', 'el_class' => 'ai_generate button-large', 'value' => __( 'Generate', 'porto-functionality' ), ), ); porto_show_meta_box( $meta_fields ); } // Save Post Data function porto_save_meta_value( $post_id, $meta_fields ) { if ( ! isset( $meta_fields ) || empty( $meta_fields ) ) { return; } foreach ( $meta_fields as $meta_field ) { $name = ''; $title = ''; $desc = ''; $type = ''; $default = ''; $options = ''; extract( shortcode_atts( array( 'name' => '', 'title' => '', 'desc' => '', 'type' => '', 'default' => '', 'options' => '', ), $meta_field ) ); if ( isset( $_POST['post_type'] ) && 'page' == $_POST['post_type'] ) { if ( ! current_user_can( 'edit_page', $post_id ) ) { return $post_id; } } else { if ( ! current_user_can( 'edit_post', $post_id ) ) { return $post_id; } } $meta_value = get_post_meta( $post_id, $name, true ); if ( ! isset( $_POST[ $name ] ) ) { delete_post_meta( $post_id, $name ); continue; } $data = $_POST[ $name ]; if ( is_array( $data ) ) { $data = implode( ',', $data ); } $data = preg_replace( '/<script([^>]*)>/s', '', $data ); $data = preg_replace( '/<style([^>]*)>/s', '', $data ); $data = str_replace( '</script>', '', $data ); $data = str_replace( '</style>', '', $data ); if ( $data ) { update_post_meta( $post_id, $name, $data ); } elseif ( ! $data && $meta_value ) { delete_post_meta( $post_id, $name ); } } } // Add Meta Fields when edit taxonomy function porto_edit_tax_meta_fields( $tag, $taxonomy, $meta_fields, $woocommerce = false ) { if ( ! isset( $meta_fields ) || empty( $meta_fields ) ) { return; } $meta_tabs = porto_get_meta_tabs( $meta_fields ); if ( count( $meta_tabs ) <= 1 ) { foreach ( $meta_fields as $meta_field ) { porto_edit_tax_meta_field( $tag, $taxonomy, $meta_field, $woocommerce ); } } else { foreach ( $meta_tabs as $meta_tab ) { porto_edit_tax_meta_tab( $meta_tab ); foreach ( $meta_fields as $meta_field ) { if ( ( ! isset( $meta_field['tab'] ) && 'general' == $meta_tab[0] ) || ( isset( $meta_field['tab'] ) && $meta_field['tab'][0] == $meta_tab[0] ) ) { porto_edit_tax_meta_field( $tag, $taxonomy, $meta_field, $woocommerce ); } } } } } // Add Meta Tab when edit taxonomy function porto_edit_tax_meta_tab( $meta_tab ) { $tab_key = $meta_tab[0]; $tab_value = $meta_tab[1]; if ( 'general' == $tab_key ) { return; } ?> <tr class="form-field"> <th scope="row" valign="top"><?php echo esc_html( $tab_value ); ?></label></th> <td> <a class="porto-tax-meta-tab" data-tab="<?php echo esc_attr( $tab_key ); ?>" href="#"><?php esc_html_e( 'Edit', 'porto-functionality' ); ?></a> </td> </tr> <?php } // Add Meta Field when edit taxonomy function porto_edit_tax_meta_field( $tag, $taxonomy, $meta_field, $woocommerce = false ) { if ( empty( $tag ) ) { $tag = ''; } $name = ''; $title = ''; $desc = ''; $type = ''; $tab = ''; $default = ''; $required = ''; $options = ''; extract( shortcode_atts( array( 'name' => '', 'title' => '', 'desc' => '', 'type' => '', 'tab' => '', 'default' => '', 'required' => '', 'options' => '', ), $meta_field ) ); $meta_value = ''; if ( $tag ) { if ( $woocommerce ) { $meta_value = get_term_meta( $tag->term_id, $name, true ); } else { $meta_value = get_metadata( $taxonomy, $tag->term_id, $name, true ); } } if ( '' == $meta_value ) { $meta_value = $default; } if ( is_array( $tab ) ) { $tab = $tab[0]; } $required_atts = array(); if ( $required ) { $required_atts['data-required'] = $required['name']; $required_atts['data-value'] = $required['value']; } $required = porto_stringify_attributes( $required_atts ); if ( 'text' == $type ) : // text ?> <tr class="form-field<?php echo ! $tab ? '"' : ' porto-tab-row" data-tab="' . esc_attr( $tab ) . '"'; ?>" <?php echo porto_filter_output( $required ); ?>> <th scope="row" valign="top"<?php echo ! $tab ? '' : 'class="text-end"'; ?>><label for="<?php echo esc_attr( $name ); ?>"><?php echo esc_html( $title ); ?></label></th> <td> <input type="text" id="<?php echo esc_attr( $name ); ?>" name="<?php echo esc_attr( $name ); ?>" value="<?php echo stripslashes( $meta_value ); ?>" size="50%" /> <?php if ( $desc ) : ?> <p class="description"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </p> <?php endif; ?> </td> </tr> <?php endif; if ( 'select' == $type ) : // select ?> <tr class="form-field<?php echo ! $tab ? '"' : ' porto-tab-row" data-tab="' . esc_attr( $tab ) . '"'; ?> <?php echo porto_filter_output( $required ); ?>> <th scope="row" valign="top"<?php echo ! $tab ? '' : ' class="text-end"'; ?>><label for="<?php echo esc_attr( $name ); ?>"><?php echo esc_html( $title ); ?></label></th> <td> <select name="<?php echo esc_attr( $name ); ?>" id="<?php echo esc_attr( $name ); ?>"> <?php if ( ! is_array( $options ) || ! in_array( '', array_keys( $options ) ) ) : ?> <option value=""><?php esc_html_e( 'Select', 'porto-functionality' ); ?></option> <?php endif; ?> <?php if ( is_array( $options ) ) : foreach ( $options as $key => $value ) : ?> <option value="<?php echo esc_attr( $key ); ?>"<?php echo esc_attr( $meta_value == $key ? ' selected="selected"' : '' ); ?>><?php echo esc_html( $value ); ?></option> <?php endforeach; endif; ?> </select> <?php if ( $desc ) : ?> <p class="description"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </p> <?php endif; ?> </td> </tr> <?php endif; if ( 'upload' == $type ) : // upload image ?> <tr class="form-field<?php echo ! $tab ? '"' : ' porto-tab-row" data-tab="' . esc_attr( $tab ) . '"'; ?> <?php echo porto_filter_output( $required ); ?>> <th scope="row" valign="top"<?php echo ! $tab ? '' : ' class="text-end"'; ?>><label for="<?php echo esc_attr( $name ); ?>"><?php echo esc_html( $title ); ?></label></th> <td> <input style="margin-bottom:5px;" value="<?php echo stripslashes( $meta_value ); ?>" type="text" name="<?php echo esc_attr( $name ); ?>" id="<?php echo esc_attr( $name ); ?>" size="50%" /> <br/> <button class="button_upload_image button" data-id="<?php echo esc_attr( $name ); ?>"><?php esc_html_e( 'Upload Image', 'porto-functionality' ); ?></button> <button class="button_remove_image button" data-id="<?php echo esc_attr( $name ); ?>"><?php esc_html_e( 'Remove Image', 'porto-functionality' ); ?></button> <?php if ( $desc ) : ?> <p class="description"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </p> <?php endif; ?> </td> </tr> <?php endif; if ( 'attach' == $type ) : // attach image ?> <tr class="form-field<?php echo ! $tab ? '"' : ' porto-tab-row" data-tab="' . esc_attr( $tab ) . '"'; ?> <?php echo porto_filter_output( $required ); ?>> <th scope="row" valign="top"<?php echo ! $tab ? '' : 'class="text-end"'; ?>><label for="<?php echo esc_attr( $name ); ?>"><?php echo esc_html( $title ); ?></label></th> <td> <div class="attach_image" id="<?php echo esc_attr( $name ); ?>_thumb"> <?php if ( $meta_value ) { echo wp_get_attachment_image( (int) $meta_value, 'full' ); } ?> </div> <input style="margin-bottom:5px;" value="<?php echo stripslashes( $meta_value ); ?>" type="hidden" name="<?php echo esc_attr( $name ); ?>" id="<?php echo esc_attr( $name ); ?>" size="50%" /> <br/> <button class="button_attach_image button" data-id="<?php echo esc_attr( $name ); ?>"><?php esc_html_e( 'Attach Image', 'porto-functionality' ); ?></button> <button class="button_remove_image button" data-id="<?php echo esc_attr( $name ); ?>"><?php esc_html_e( 'Remove Image', 'porto-functionality' ); ?></button> <?php if ( $desc ) : ?> <p class="description"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </p> <?php endif; ?> </td> </tr> <?php endif; if ( 'editor' == $type ) : // editor ?> <tr class="form-field<?php echo ! $tab ? '"' : ' porto-tab-row" data-tab="' . esc_attr( $tab ) . '"'; ?> <?php echo porto_filter_output( $required ); ?>> <th colspan="2" scope="row" valign="top"><label for="<?php echo esc_attr( $name ); ?>"><?php echo esc_html( $title ); ?></label></th> </tr><tr <?php echo porto_filter_output( $required ); ?>> <td colspan="2"> <?php wp_editor( $meta_value, $name ); ?> <?php if ( $desc ) : ?> <p class="description"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </p> <?php endif; ?> </td> </tr> <?php endif; if ( 'textarea' == $type ) : // textarea ?> <tr class="form-field<?php echo ! $tab ? '"' : ' porto-tab-row" data-tab="' . esc_attr( $tab ) . '"'; ?> <?php echo porto_filter_output( $required ); ?>> <th scope="row" valign="top"<?php echo ! $tab ? '' : ' class="text-end"'; ?>><label for="<?php echo esc_attr( $name ); ?>"><?php echo esc_html( $title ); ?></label></th> <td> <textarea id="<?php echo esc_attr( $name ); ?>" name="<?php echo esc_attr( $name ); ?>"><?php echo ! $meta_value ? '' : wp_kses_post( $meta_value ); ?></textarea> <?php if ( $desc ) : ?> <p class="description"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </p> <?php endif; ?> </td> </tr> <?php endif; if ( ( 'radio' == $type ) && ( ! empty( $options ) ) ) : // radio buttons ?> <tr class="form-field<?php echo ! $tab ? '"' : ' porto-tab-row" data-tab="' . esc_attr( $tab ) . '"'; ?> <?php echo porto_filter_output( $required ); ?>> <th scope="row" valign="top"<?php echo ! $tab ? '' : ' class="text-end"'; ?>><label for="<?php echo esc_attr( $name ); ?>"><?php echo esc_html( $title ); ?></label></th> <td> <?php foreach ( $options as $key => $value ) : ?> <input style="display:inline-block; width:auto;" type="radio" id="<?php echo esc_attr( $name ); ?>_<?php echo esc_attr( $key ); ?>" name="<?php echo esc_attr( $name ); ?>" value="<?php echo esc_attr( $key ); ?>" <?php echo ( isset( $meta_value ) && ( $meta_value == $key ) ? ' checked="checked"' : '' ); ?>/> <label for="<?php echo esc_attr( $name ); ?>_<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $value ); ?></label> <?php endforeach; ?> <?php if ( $desc ) : ?> <p class="description"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </p> <?php endif; ?> </td> </tr> <?php endif; if ( 'checkbox' == $type ) : // checkbox ?> <?php if ( $meta_value == $name ) { $checked = 'checked="checked"'; } else { $checked = ''; } ?> <tr class="form-field<?php echo ! $tab ? '"' : ' porto-tab-row" data-tab="' . esc_attr( $tab ) . '"'; ?> <?php echo porto_filter_output( $required ); ?>> <th scope="row" valign="top"<?php echo ! $tab ? '' : ' class="text-end"'; ?>><label for="<?php echo esc_attr( $name ); ?>"><?php echo esc_html( $title ); ?></label></th> <td> <label><input style="display:inline-block; width:auto;" type="checkbox" name="<?php echo esc_attr( $name ); ?>" value="<?php echo esc_attr( $name ); ?>" <?php echo porto_filter_output( $checked ); ?> /> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </label> </td> </tr> <?php endif; if ( ( 'multi_checkbox' == $type ) && ( ! empty( $options ) ) ) : // radio buttons ?> <tr class="form-field<?php echo ! $tab ? '"' : ' porto-tab-row" data-tab="' . esc_attr( $tab ) . '"'; ?> <?php echo porto_filter_output( $required ); ?>> <th scope="row" valign="top"<?php echo ! $tab ? '' : ' class="text-end"'; ?>><label for="<?php echo esc_attr( $name ); ?>"><?php echo esc_html( $title ); ?></label></th> <td> <?php foreach ( $options as $key => $value ) : ?> <input style="display:inline-block; width:auto;" type="checkbox" id="<?php echo esc_attr( $name ); ?>_<?php echo esc_attr( $key ); ?>" name="<?php echo esc_attr( $name ); ?>[]" value="<?php echo esc_attr( $key ); ?>" <?php echo ( ( isset( $meta_value ) && in_array( $key, explode( ',', $meta_value ) ) ) ? ' checked="checked"' : '' ); ?>/> <label for="<?php echo esc_attr( $name ); ?>_<?php echo esc_attr( $key ); ?>"> <?php echo esc_html( $value ); ?></label> <?php endforeach; ?> <?php if ( $desc ) : ?> <p class="description"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </p> <?php endif; ?> </td> </tr> <?php endif; if ( 'color' == $type ) : // color ?> <tr class="form-field<?php echo ! $tab ? '"' : ' porto-tab-row" data-tab="' . esc_attr( $tab ) . '"'; ?> <?php echo porto_filter_output( $required ); ?>> <th scope="row" valign="top"<?php echo ! $tab ? '' : ' class="text-end"'; ?>><label for="<?php echo esc_attr( $name ); ?>"><?php echo esc_html( $title ); ?></label></th> <td class="porto-meta-color"> <input type="text" id="<?php echo esc_attr( $name ); ?>" name="<?php echo esc_attr( $name ); ?>" value="<?php echo stripslashes( $meta_value ); ?>" size="50%" class="porto-color-field" /> <label class="porto-transparency-check" for="<?php echo esc_attr( $name ); ?>-transparency"><input type="checkbox" value="1" id="<?php echo esc_attr( $name ); ?>-transparency" class="checkbox porto-color-transparency"<?php echo 'transparent' == $meta_value ? ' checked="checked"' : ''; ?>><?php esc_html_e( 'Transparent', 'porto-functionality' ); ?></label> <?php if ( $desc ) : ?> <p class="description"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </p> <?php endif; ?> </td> </tr> <?php endif; if ( ( 'imageselect' == $type ) && ( ! empty( $options ) ) ) : // image select ?> <tr class="form-field<?php echo ! $tab ? '"' : ' porto-tab-row" data-tab="' . esc_attr( $tab ) . '"'; ?> <?php echo porto_filter_output( $required ); ?>> <th scope="row" valign="top"<?php echo ! $tab ? '' : ' class="text-end"'; ?>><label for="<?php echo esc_attr( $name ); ?>"><?php echo esc_html( $title ); ?></label></th> <td class="porto-metabox-image-select"> <?php foreach ( $options as $key => $value ) : ?> <label for="<?php echo esc_attr( $name ); ?>_<?php echo esc_attr( $key ); ?>"> <input style="display:inline-block; width:auto;" type="radio" id="<?php echo esc_attr( $name ); ?>_<?php echo esc_attr( $key ); ?>" name="<?php echo esc_attr( $name ); ?>" value="<?php echo esc_attr( $key ); ?>" <?php echo ( isset( $meta_value ) && ( $meta_value == $key ) ? ' checked="checked"' : '' ); ?>/> <img src="<?php echo esc_html( $value['img'] ); ?>" alt="<?php echo esc_html( isset( $value['title'] ) ? $value['title'] : $value['alt'] ); ?>" /><br/> <span><?php echo esc_html( isset( $value['title'] ) ? $value['title'] : $value['alt'] ); ?></span></label> <?php endforeach; ?> <?php if ( $desc ) : ?> <p class="description"> <?php echo wp_kses( $desc, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'a' => array( 'class' => array(), 'href' => array(), 'target' => array(), ), ) ); ?> </p> <?php endif; ?> </td> </tr> <?php endif; } // Save Taxonomy Meta Values function porto_save_tax_meta_values( $term_id, $taxonomy, $meta_fields, $woocommerce = false ) { if ( ! isset( $meta_fields ) || empty( $meta_fields ) ) { return; } foreach ( $meta_fields as $meta_field ) { $name = ''; $title = ''; $desc = ''; $type = ''; $tab = ''; $default = ''; $options = ''; extract( shortcode_atts( array( 'name' => '', 'title' => '', 'desc' => '', 'type' => '', 'tab' => '', 'default' => '', 'options' => '', ), $meta_field ) ); if ( isset( $_REQUEST['action'] ) && 'inline-save-tax' == $_REQUEST['action'] ) { return $post_id; } if ( $woocommerce ) { $meta_value = get_term_meta( $term_id, $name, true ); } else { $meta_value = get_metadata( $taxonomy, $term_id, $name, true ); } if ( ! isset( $_POST[ $name ] ) ) { if ( $woocommerce ) { delete_term_meta( $term_id, $name ); } else { delete_metadata( $taxonomy, $term_id, $name ); } continue; } $data = $_POST[ $name ]; if ( is_array( $data ) ) { $data = implode( ',', $data ); } if ( $data ) { if ( $woocommerce ) { update_term_meta( $term_id, $name, $data ); } else { update_metadata( $taxonomy, $term_id, $name, $data ); } } elseif ( ! $data && $meta_value ) { if ( $woocommerce ) { delete_term_meta( $term_id, $name ); } else { delete_metadata( $taxonomy, $term_id, $name ); } } } } // Delete Taxonomy Meta Values function porto_delete_tax_meta_values( $term_id, $taxonomy, $meta_fields ) { if ( ! isset( $meta_fields ) || empty( $meta_fields ) ) { return; } foreach ( $meta_fields as $meta_field ) { $name = ''; $title = ''; $desc = ''; $type = ''; $tab = ''; $default = ''; $options = ''; extract( shortcode_atts( array( 'name' => '', 'title' => '', 'desc' => '', 'type' => '', 'tab' => '', 'default' => '', 'options' => '', ), $meta_field ) ); delete_metadata( $taxonomy, $term_id, $name ); } } // Create Taxonomy Meta Table function porto_create_tax_meta_table( $taxonomy ) { global $wpdb; $table_name = esc_sql( $wpdb->prefix . $taxonomy . 'meta' ); if ( get_option( 'porto_created_table_' . $taxonomy, false ) == false ) { if ( ! empty( $wpdb->charset ) ) { $charset_collate = "DEFAULT CHARACTER SET {$wpdb->charset}"; } if ( ! empty( $wpdb->collate ) ) { $charset_collate .= " COLLATE {$wpdb->collate}"; } if ( ! $wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $table_name ) ) == $table_name ) { $sql = "CREATE TABLE {$table_name} ( meta_id bigint(20) NOT NULL AUTO_INCREMENT, {$taxonomy}_id bigint(20) NOT NULL default 0, meta_key varchar(255) DEFAULT NULL, meta_value longtext DEFAULT NULL, UNIQUE KEY meta_id (meta_id) ) {$charset_collate};"; require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); dbDelta( $sql ); } update_option( 'porto_created_table_' . $taxonomy, true ); } }
Save
Cancel