Файловый менеджер - Редактировать - /home/infrafs/www/wp-content/plugins/wp-store-locator/admin/class-metaboxes.php
Назад
<?php /** * Handle the metaboxes * * @author Tijmen Smit * @since 2.0.0 */ if ( !defined( 'ABSPATH' ) ) exit; if ( !class_exists( 'WPSL_Metaboxes' ) ) { /** * Handle the meta boxes * * @since 2.0.0 */ class WPSL_Metaboxes { public function __construct() { add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ) ); add_action( 'save_post', array( $this, 'save_post' ) ); add_action( 'post_updated_messages', array( $this, 'store_update_messages' ) ); } /** * Add the meta boxes. * * @since 2.0.0 * @return void */ public function add_meta_boxes() { global $pagenow; add_meta_box( 'wpsl-store-details', __( 'Store Details', 'wpsl' ), array( $this, 'create_meta_fields' ), 'wpsl_stores', 'normal', 'high' ); add_meta_box( 'wpsl-map-preview', __( 'Store Map', 'wpsl' ), array( $this, 'map_preview' ), 'wpsl_stores', 'side' ); $enable_option = apply_filters( 'wpsl_enable_export_option', true ); if ( $enable_option && $pagenow == 'post.php' ) { add_meta_box( 'wpsl-data-export', __( 'Export', 'wpsl' ), array( $this, 'export_data' ), 'wpsl_stores', 'side', 'low' ); } } /** * The store locator meta box fields. * * @since 2.0.0 * @return array $meta_fields The meta box fields used for the store details */ public function meta_box_fields() { global $wpsl_settings; $meta_fields = array( __( 'Location', 'wpsl' ) => array( 'address' => array( 'label' => __( 'Address', 'wpsl' ), 'required' => true ), 'address2' => array( 'label' => __( 'Address 2', 'wpsl' ) ), 'city' => array( 'label' => __( 'City', 'wpsl' ), 'required' => true ), 'state' => array( 'label' => __( 'State', 'wpsl' ) ), 'zip' => array( 'label' => __( 'Zip Code', 'wpsl' ) ), 'country' => array( 'label' => __( 'Country', 'wpsl' ), 'required' => true ), 'country_iso' => array( 'type' => 'hidden' ), 'lat' => array( 'label' => __( 'Latitude', 'wpsl' ) ), 'lng' => array( 'label' => __( 'Longitude', 'wpsl' ) ) ), __( 'Opening Hours', 'wpsl' ) => array( 'hours' => array( 'label' => __( 'Hours', 'wpsl' ), 'type' => $wpsl_settings['editor_hour_input'] //Either set to textarea or dropdown. This is defined through the 'Opening hours input format: ' option on the settings page ) ), __( 'Additional Information', 'wpsl' ) => array( 'phone' => array( 'label' => __( 'Tel', 'wpsl' ) ), 'fax' => array( 'label' => __( 'Fax', 'wpsl' ) ), 'email' => array( 'label' => __( 'Email', 'wpsl' ) ), 'url' => array( 'label' => __( 'Url', 'wpsl' ) ) ) ); return apply_filters( 'wpsl_meta_box_fields', $meta_fields ); } /** * Create the store locator metabox input fields. * * @since 2.0.0 * @return void */ function create_meta_fields() { global $wpsl_settings, $wp_version; $i = 0; $j = 0; $tab_items = ''; wp_nonce_field( 'save_store_meta', 'wpsl_meta_nonce' ); ?> <div class="wpsl-store-meta <?php if ( floatval( $wp_version ) < 3.8 ) { echo 'wpsl-pre-38'; } // Fix CSS issue with < 3.8 versions ?>"> <?php // Create the tab navigation for the meta boxes. foreach ( $this->meta_box_fields() as $tab => $meta_fields ) { $active_class = ( $i == 0 ) ? ' wpsl-active' : ''; if ( $wpsl_settings['hide_hours'] && $tab == __( 'Opening Hours', 'wpsl' ) ) { continue; } else { $tab_items .= $this->meta_field_nav( $tab, $active_class ); } $i++; } echo '<ul id="wpsl-meta-nav">' . $tab_items . '</ul>'; // Create the input fields for the meta boxes. foreach ( $this->meta_box_fields() as $tab => $meta_fields ) { $active_class = ( $j == 0 ) ? ' wpsl-active' : ''; if ( $wpsl_settings['hide_hours'] && $tab == __( 'Opening Hours', 'wpsl' ) ) { continue; } else { echo '<div class="wpsl-tab wpsl-' . esc_attr( strtolower( str_replace( ' ', '-', $tab ) ) ) . $active_class . '">'; foreach ( $meta_fields as $field_key => $field_data ) { // If no specific field type is set, we set it to text. $field_type = ( empty( $field_data['type'] ) ) ? 'text' : $field_data['type']; $args = array( 'key' => $field_key, 'data' => $field_data ); // Check for a class method, otherwise enable a plugin hook. if ( method_exists( $this, $field_type . '_input' ) ) { call_user_func( array( $this, $field_type . '_input' ), $args ); } else { do_action( 'wpsl_metabox_' . $field_type . '_input', $args ); } } echo '</div>'; } $j++; } ?> </div> <?php } /** * Create the li elements that are used in the tabs above the store meta fields. * * @since 2.0.0 * @param string $tab The name of the tab * @param string $active_class Either the class name or empty * @return string $nav_item The HTML for the nav list */ public function meta_field_nav( $tab, $active_class ) { $tab_lower = strtolower( str_replace( ' ', '-', $tab ) ); $nav_item = '<li class="wpsl-' . esc_attr( $tab_lower ) . '-tab ' . $active_class . '"><a href="#wpsl-' . esc_attr( $tab_lower ) . '">' . esc_html( $tab ) . '</a></li>'; return $nav_item; } /** * Set the CSS class that tells JS it's an required input field. * * @since 2.0.0 * @param array $args The css classes * @param string $single Whether to return just the class name, or also include the class="" * @return string|void $response The required CSS class or nothing */ public function set_required_class( $args, $single = false ) { if ( isset( $args['required'] ) && ( $args['required'] ) ) { if ( !$single ) { $response = 'class="wpsl-required"'; } else { $response = 'wpsl-required'; } return $response; } } /** * Check if the current field is required. * * @since 2.0.0 * @param array $args The CSS classes * @return string|void The HTML for the required element or nothing */ public function is_required_field( $args ) { if ( isset( $args['required'] ) && ( $args['required'] ) ) { $response = '<span class="wpsl-star"> *</span>'; return $response; } } /** * Get the prefilled field data. * * @since 2.0.0 * @param string $field_name The name of the field to get the data for * @return string $field_data The field data */ public function get_prefilled_field_data( $field_name ) { global $wpsl_settings, $pagenow; $field_data = ''; // Prefilled values are only used for new pages, not when a user edits an existing page. if ( $pagenow == 'post.php' && isset( $_GET['action'] ) && $_GET['action'] == 'edit' ) { return; } $prefilled_fields = array( 'country', 'hours' ); if ( in_array( $field_name, $prefilled_fields ) ) { $field_data = $wpsl_settings['editor_' . $field_name]; } return $field_data; } /** * Create a text input field. * * @since 2.0.0 * @param array $args The input name and label * @return void */ public function text_input( $args ) { $saved_value = $this->get_store_meta( $args['key'] ); // If there is no existing meta value, check if a prefilled value exists for the input field. if ( !$saved_value ) { $saved_value = $this->get_prefilled_field_data( $args['key'] ); } ?> <p> <label for="wpsl-<?php echo esc_attr( $args['key'] ); ?>"><?php echo esc_html( $args['data']['label'] ) . ': ' . $this->is_required_field( $args['data'] ); ?></label> <input id="wpsl-<?php echo esc_attr( $args['key'] ); ?>" <?php echo $this->set_required_class( $args['data'] ); ?> type="text" name="wpsl[<?php echo esc_attr( $args['key'] ); ?>]" value="<?php echo esc_attr( $saved_value ); ?>" /> </p> <?php } /** * Create a hidden input field. * * @since 2.0.0 * @param array $args The name of the meta value * @return void */ public function hidden_input( $args ) { $saved_value = $this->get_store_meta( $args['key'] ); ?> <input id="wpsl-<?php echo esc_attr( $args['key'] ); ?>" type="hidden" name="wpsl[<?php echo esc_attr( $args['key'] ); ?>]" value="<?php echo esc_attr( $saved_value ); ?>" /> <?php } /** * Create a textarea field. * * @since 2.0.0 * @param array $args The textarea name and label * @return void */ public function textarea_input( $args ) { $saved_value = $this->get_store_meta( $args['key'] ); if ( $args['key'] == 'hours' && gettype( $saved_value ) !== 'string' ) { $saved_value = ''; } // If there is no existing meta value, check if a prefilled value exists for the textarea. if ( !$saved_value ) { $prefilled_value = $this->get_prefilled_field_data( $args['key'] ); if ( isset( $prefilled_value['textarea'] ) ) { $saved_value = $prefilled_value['textarea']; } } ?> <p> <label for="wpsl-<?php echo esc_attr( $args['key'] ); ?>"><?php echo esc_html( $args['data']['label'] ) . ': ' . $this->is_required_field( $args['data'] ); ?></label> <textarea id="wpsl-<?php echo esc_attr( $args['key'] ); ?>" <?php echo $this->set_required_class( $args['data'] ); ?> name="wpsl[<?php echo esc_attr( $args['key'] ); ?>]" cols="5" rows="5"><?php echo esc_html( $saved_value ); ?></textarea> </p> <?php } /** * Create a wp editor field. * * @since 2.1.1 * @param array $args The wp editor name and label * @return void */ public function wp_editor_input( $args ) { $saved_value = $this->get_store_meta( $args['key'] ); ?> <p> <label for="wpsl-<?php echo esc_attr( $args['key'] ); ?>"><?php echo esc_html( $args['data']['label'] ) . ': ' . $this->is_required_field( $args['data'] ); ?></label> <?php wp_editor( $saved_value, 'wpsleditor_' . wpsl_random_chars(), $settings = array('textarea_name' => 'wpsl['. esc_attr( $args['key'] ).']') ); ?> </p> <?php } /** * Create a checkbox field. * * @since 2.0.0 * @param array $args The checkbox name and label * @return void */ public function checkbox_input( $args ) { $saved_value = $this->get_store_meta( $args['key'] ); ?> <p> <label for="wpsl-<?php echo esc_attr( $args['key'] ); ?>"><?php echo esc_html( $args['data']['label'] ) . ': ' . $this->is_required_field( $args['data'] ); ?></label> <input id="wpsl-<?php echo esc_attr( $args['key'] ); ?>" <?php echo $this->set_required_class( $args['data'] ); ?> type="checkbox" name="wpsl[<?php echo esc_attr( $args['key'] ); ?>]" <?php checked( $saved_value, true ); ?> value="1" /> </p> <?php } /** * Create a dropdown field. * * @since 2.0.0 * @param array $args The dropdown name and label * @return void */ public function dropdown_input( $args ) { // The hour dropdown requires a different structure with multiple dropdowns. if ( $args['key'] == 'hours' ) { $this->opening_hours(); } else { $option_list = $args['data']['options']; $saved_value = $this->get_store_meta( $args['key'] ); ?> <p> <label for="wpsl-<?php echo esc_attr( $args['key'] ); ?>"><?php echo esc_html( $args['data']['label'] ) . ': ' . $this->is_required_field( $args['data'] ); ?></label> <select id="wpsl-<?php echo esc_attr( $args['key'] ); ?>" <?php echo $this->set_required_class( $args['data'] ); ?> name="wpsl[<?php echo esc_attr( $args['key'] ); ?>]" autocomplete="off" /> <?php foreach ( $option_list as $key => $option ) { ?> <option value="<?php echo esc_attr( $key ); ?>" <?php if ( isset( $saved_value ) ) { selected( $saved_value, $key ); } ?>><?php echo esc_html( $option ); ?></option> <?php } ?> </select> </p> <?php } } /** * Create the openings hours table with the hours as dropdowns. * * @since 2.0.0 * @param string $location The location were the opening hours are shown. * @return void */ public function opening_hours( $location = 'store_page' ) { global $wpsl_settings, $wpsl_admin, $post; $name = ( $location == 'settings' ) ? 'wpsl_editor[dropdown]' : 'wpsl[hours]'; // the name of the input or select field $opening_days = wpsl_get_weekdays(); $opening_hours = ''; $hours = ''; if ( $location == 'store_page' ) { $opening_hours = get_post_meta( $post->ID, 'wpsl_hours' ); } // If we don't have any opening hours, we use the defaults. if ( !isset( $opening_hours[0]['monday'] ) ) { $opening_hours = $wpsl_settings['editor_hours']['dropdown']; } else { $opening_hours = $opening_hours[0]; } // Find out whether we have a 12 or 24hr format. $hour_format = $this->find_hour_format( $opening_hours ); if ( $hour_format == 24 ) { $hour_class = 'wpsl-twentyfour-format'; } else { $hour_class = 'wpsl-twelve-format'; } /* * Only include the 12 / 24hr dropdown switch if we are on store page, * otherwise just show the table with the opening hour dropdowns. */ if ( $location == 'store_page' ) { ?> <p class="wpsl-hours-dropdown"> <label for="wpsl-editor-hour-input"><?php _e( 'Hour format', 'wpsl' ); ?>:</label> <?php echo $wpsl_admin->settings_page->show_opening_hours_format( $hour_format ); ?> </p> <?php } ?> <table id="wpsl-store-hours" class="<?php echo $hour_class; ?>"> <tr> <th><?php _e( 'Days', 'wpsl' ); ?></th> <th><?php _e( 'Opening Periods', 'wpsl' ); ?></th> <th></th> </tr> <?php foreach ( $opening_days as $index => $day ) { $i = 0; if ( is_array( $opening_hours[$index] ) ) { $hour_count = count( $opening_hours[$index] ); } else { $hour_count = 0; } ?> <tr> <td class="wpsl-opening-day"><?php echo esc_html( $day ); ?></td> <td id="wpsl-hours-<?php echo esc_attr( $index ); ?>" class="wpsl-opening-hours" data-day="<?php echo esc_attr( $index ); ?>"> <?php if ( $hour_count > 0 ) { // Loop over the opening periods. while ( $i < $hour_count ) { if ( isset( $opening_hours[$index][$i] ) ) { $hours = explode( ',', $opening_hours[$index][$i] ); } else { $hours = ''; } // If we don't have two parts or one of them is empty, then we set the store to closed. if ( ( count( $hours ) == 2 ) && ( !empty( $hours[0] ) ) && ( !empty( $hours[1] ) ) ) { $args = array( 'day' => $index, 'name' => $name, 'hour_format' => $hour_format, 'hours' => $hours ); ?> <div class="wpsl-current-period <?php if ( $i > 0 ) { echo 'wpsl-multiple-periods'; } ?>"> <?php echo $this->opening_hours_dropdown( $args, 'open' ); ?> <span> - </span> <?php echo $this->opening_hours_dropdown( $args, 'close' ); ?> <div class="wpsl-icon-cancel-circled"></div> </div> <?php } else { $this->show_store_closed( $name, $index ); } $i++; } } else { $this->show_store_closed( $name, $index ); } ?> </td> <td> <div class="wpsl-add-period"> <div class="wpsl-icon-plus-circled"></div> </div> </td> </tr> <?php } ?> </table> <?php } /** * Show the 'store closed' message. * * @since 2.0.0 * @param string $name The name for the input field * @param string $day The day the store is closed * @return void */ public function show_store_closed( $name, $day ) { echo '<p class="wpsl-store-closed">' . __( 'Closed', 'wpsl' ) . '<input type="hidden" name="' . esc_attr( $name ) . '[' . esc_attr( $day ) . ']" value="closed"></p>'; } /** * Find out whether the opening hours are set in the 12 or 24hr format. * * We use this to determine the selected value for the dropdown in the store editor. * So a user can decide to change the opening hour format. * * @since 2.0.0 * @param array $opening_hours The opening hours for the whole week * @return string The hour format used in the opening hours */ public function find_hour_format( $opening_hours ) { $week_days = wpsl_get_weekdays(); foreach ( $week_days as $key => $day ) { if ( isset( $opening_hours[$key][0] ) ) { $time = $opening_hours[$key][0]; if ( ( strpos( $time, 'AM' ) !== false ) || ( strpos( $time, 'PM' ) !== false ) ) { return '12'; } else { return '24'; } } } } /** * Create the opening hours dropdown. * * @since 2.0.0 * @param array $args The data to create the opening hours dropdown * @param string $period Either set to open or close * @return string $select The html for the dropdown */ public function opening_hours_dropdown( $args, $period ) { $select_index = ( $period == 'open' ) ? 0 : 1; $selected_time = $args['hours'][$select_index]; $select_name = $args['name'] . '[' . strtolower( $args['day'] ) . '_' . $period . ']'; $open = strtotime( '12:00am' ); $close = strtotime( '11:59pm' ); $hour_interval = 900; if ( $args['hour_format'] == 12 ) { $format = 'g:i A'; } else { $format = 'H:i'; } $select = '<select class="wpsl-' . esc_attr( $period ) . '-hour" name="' . esc_attr( $select_name ) . '[]" autocomplete="off">'; for ( $i = $open; $i <= $close; $i += $hour_interval ) { // If the selected time matches the current time then we set it to active. if ( $selected_time == date( $format, $i ) ) { $selected = 'selected="selected"'; } else { $selected = ''; } $select .= "<option value='" . date( $format, $i ) . "' $selected>" . date( $format, $i ) . "</option>"; } $select .= '</select>'; return $select; } /** * Get the store post meta. * * @since 2.0.0 * @param string $key The name of the meta value * @return mixed|void $store_meta Meta value for the store field */ public function get_store_meta( $key ) { global $post; $store_meta = get_post_meta( $post->ID, 'wpsl_' . $key, true ); if ( $store_meta ) { return $store_meta; } else { return; } } /** * Save the custom post data. * * @since 2.0.0 * @param integer $post_id store post ID * @return void */ public function save_post( $post_id ) { global $wpsl_admin; if ( empty( $_POST['wpsl_meta_nonce'] ) || !wp_verify_nonce( $_POST['wpsl_meta_nonce'], 'save_store_meta' ) ) return; if ( !isset( $_POST['post_type'] ) || 'wpsl_stores' !== $_POST['post_type'] ) return; if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; if ( is_int( wp_is_post_revision( $post_id ) ) ) return; if ( !current_user_can( 'edit_post', $post_id ) ) return; $this->store_data = $_POST['wpsl']; // Check if the hours are set through dropdowns. if ( isset( $this->store_data['hours'] ) && is_array( $this->store_data['hours'] ) && ( !empty( $this->store_data['hours'] ) ) ) { $this->store_data['hours'] = $this->format_opening_hours(); } // Loop over the meta fields defined in the meta_box_fields and update the post meta data. foreach ( $this->meta_box_fields() as $tab => $meta_fields ) { foreach ( $meta_fields as $field_key => $field_data ) { // Either update or delete the post meta. if ( isset( $this->store_data[ $field_key ] ) && ( $this->store_data[ $field_key ] != "" ) ) { if ( isset( $field_data['type'] ) && $field_data['type'] ) { $field_type = $field_data['type']; } else { $field_type = ''; } switch ( $field_type ) { case 'thumbnail': update_post_meta( $post_id, 'wpsl_' . $field_key, absint( $this->store_data[ $field_key ] ) ); break; case 'checkbox': $checkbox_val = ( isset( $this->store_data[ $field_key ] ) ) ? 1 : 0; update_post_meta( $post_id, 'wpsl_' . $field_key, $checkbox_val ); break; case 'wp_editor': case 'textarea': update_post_meta( $post_id, 'wpsl_' . $field_key, wp_kses_post( trim( stripslashes( $this->store_data[ $field_key ] ) ) ) ); break; default: if ( is_array( $this->store_data[ $field_key ] ) ) { if ( wpsl_is_multi_array( $this->store_data[ $field_key ] ) ) { array_walk_recursive( $this->store_data[ $field_key ], 'wpsl_sanitize_multi_array' ); update_post_meta( $post_id, 'wpsl_' . $field_key, $this->store_data[ $field_key ] ); } else { update_post_meta( $post_id, 'wpsl_' . $field_key, array_map( 'sanitize_text_field', $this->store_data[ $field_key ] ) ); } } else { update_post_meta( $post_id, 'wpsl_' . $field_key, sanitize_text_field( $this->store_data[ $field_key ] ) ); } break; } } else { delete_post_meta( $post_id, 'wpsl_' . $field_key ); } } } do_action( 'wpsl_save_post', $this->store_data ); /* * If all the required fields contain data, then check if we need to * geocode the address and if we should delete the autoload transient. * * Otherwise show a notice for 'missing data' and set the post status to pending. */ if ( !$this->check_missing_meta_data( $post_id ) ) { $wpsl_admin->geocode->check_geocode_data( $post_id, $this->store_data ); $wpsl_admin->maybe_delete_autoload_transient( $post_id ); } else { $wpsl_admin->notices->save( 'error', __( 'Failed to publish the store. Please fill in the required store details.', 'wpsl' ) ); $this->set_post_pending( $post_id ); } } /** * Loop through the opening hours and structure the data in a new array. * * @since 2.0.0 * @return array $opening_hours The formatted opening hours */ public function format_opening_hours() { $week_days = wpsl_get_weekdays(); // Use the opening hours from the editor page or the add/edit store page. if ( isset( $_POST['wpsl_editor']['dropdown'] ) ) { $store_hours = $_POST['wpsl_editor']['dropdown']; } else if ( isset( $this->store_data['hours'] ) ) { $store_hours = $this->store_data['hours']; } foreach ( $week_days as $day => $value ) { $i = 0; $periods = array(); if ( isset( $store_hours[$day . '_open'] ) && $store_hours[$day . '_open'] ) { foreach ( $store_hours[$day . '_open'] as $opening_hour ) { $hours = $this->validate_hour( $store_hours[$day.'_open'][$i] ) . ',' . $this->validate_hour( $store_hours[$day.'_close'][$i] ); $periods[] = $hours; $i++; } } $opening_hours[$day] = $periods; } return $opening_hours; } /* * Validate the 12 or 24 hr time format. * * @since 2.0.0 * @param string $hour The opening hour * @return boolean true if the $hour format is valid */ public function validate_hour( $hour ) { global $wpsl_settings; /* * On the add/edit store we can always use the $wpsl_settings value. * But if validate_hour is called from the settings page then we * should use the $_POST value to make sure we have the correct value. */ if ( isset( $_POST['wpsl_editor']['hour_format'] ) ) { $hour_format = ( $_POST['wpsl_editor']['hour_format'] == 12 ) ? 12 : 24; } else { $hour_format = $wpsl_settings['editor_hour_format']; } if ( $hour_format == 12 ) { $format = 'g:i A'; } else { $format = 'H:i'; } if ( date( $format, strtotime( $hour ) ) == $hour ) { return $hour; } } /** * Set the post status to pending instead of publish. * * @since 2.0.0 * @param integer $post_id store post ID * @return void */ public function set_post_pending( $post_id ) { global $wpdb; $wpdb->update( $wpdb->posts, array( 'post_status' => 'pending' ), array( 'ID' => $post_id ) ); add_filter( 'redirect_post_location', array( $this, 'remove_message_arg' ) ); } /** * Remove the message query arg. * * If one or more of the required fields are empty, we show a custom msg. * So no need for the normal post update messages arg. * * @since 2.0.0 * @param string $location The destination url * @return void */ public function remove_message_arg( $location ) { return remove_query_arg( 'message', $location ); } /** * Make sure all the required post meta fields contain data. * * @since 2.0.0 * @param integer $post_id store post ID * @return boolean */ public function check_missing_meta_data( $post_id ) { foreach ( $this->meta_box_fields() as $tab => $meta_fields ) { foreach ( $meta_fields as $field_key => $field_data ) { if ( isset( $field_data['required'] ) && $field_data['required'] ) { $post_meta = get_post_meta( $post_id, 'wpsl_' . $field_key, true ); if ( empty( $post_meta ) ) { return true; } } } } } /** * The html for the map preview in the sidebar. * * @since 2.0.0 * @return void */ public function map_preview() { ?> <div id="wpsl-gmap-wrap"></div> <p class="wpsl-submit-wrap"> <a id="wpsl-lookup-location" class="button-primary" href="#wpsl-meta-nav"><?php _e( 'Preview Location', 'wpsl' ); ?></a> <span class="wpsl-info"><span class="wpsl-info-text wpsl-hide"><?php echo sprintf( __( 'The map preview is based on the provided address, city and country details. %s It will ignore any custom latitude or longitude values.', 'wpsl' ), '<br><br>' ); ?></span></span> <em class="wpsl-desc"><?php _e( 'You can drag the marker to adjust the exact location of the marker.', 'wpsl' ); ?></em> </p> <?php } /** * The html for the export details section in the sidebar. * * @since 2.2.15 * @return void */ public function export_data() { global $post; $link_url = wp_nonce_url( admin_url( 'post.php?'. $_SERVER['QUERY_STRING'] . '&wpsl_data_export=1' ), 'wpsl_export_' . $post->ID, 'wpsl_export_nonce' ); ?> <p class="wpsl-submit-wrap"> <a id="wpsl-export-data" class="button-primary" href="<?php echo esc_url( $link_url ); ?>"><?php _e( 'Export Location Data', 'wpsl' ); ?></a> </p> <?php } /** * Store update messages. * * @since 2.0.0 * @param array $messages Existing post update messages. * @return array $messages Amended post update messages with new CPT update messages. */ function store_update_messages( $messages ) { $post = get_post(); $post_type = get_post_type( $post ); $post_type_object = get_post_type_object( $post_type ); $messages['wpsl_stores'] = array( 0 => '', // Unused. Messages start at index 1. 1 => __( 'Store updated.', 'wpsl' ), 2 => __( 'Custom field updated.', 'wpsl' ), 3 => __( 'Custom field deleted.', 'wpsl' ), 4 => __( 'Store updated.', 'wpsl' ), 5 => isset( $_GET['revision'] ) ? sprintf( __( 'Store restored to revision from %s', 'wpsl' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false, 6 => __( 'Store published.', 'wpsl' ), 7 => __( 'Store saved.', 'wpsl' ), 8 => __( 'Store submitted.', 'wpsl' ), 9 => sprintf( __( 'Store scheduled for: <strong>%1$s</strong>.', 'wpsl' ), date_i18n( __( 'M j, Y @ G:i', 'wpsl' ), strtotime( $post->post_date ) ) ), 10 => __( 'Store draft updated.', 'wpsl' ) ); if ( ( 'wpsl_stores' == $post_type ) && ( $post_type_object->publicly_queryable ) ) { $permalink = get_permalink( $post->ID ); $view_link = sprintf( ' <a href="%s">%s</a>', esc_url( $permalink ), __( 'View store', 'wpsl' ) ); $messages[ $post_type ][1] .= $view_link; $messages[ $post_type ][6] .= $view_link; $messages[ $post_type ][9] .= $view_link; $preview_permalink = add_query_arg( 'preview', 'true', $permalink ); $preview_link = sprintf( ' <a target="_blank" href="%s">%s</a>', esc_url( $preview_permalink ), __( 'Preview store', 'wpsl' ) ); $messages[ $post_type ][8] .= $preview_link; $messages[ $post_type ][10] .= $preview_link; } return $messages; } } }
| ver. 1.4 |
Github
|
.
| PHP 8.2.29 | Генерация страницы: 0 |
proxy
|
phpinfo
|
Настройка