芝麻web文件管理V1.00
编辑当前文件:/home/paymbalq/www/wp-content/plugins/keydesign-addon/includes/admin/wp-custom-menu-meta.php
setup_hooks(); } /** * To setup action/filter. */ protected function setup_hooks() { /** * Action */ add_action( 'wp_nav_menu_item_custom_fields', array( $this, 'wp_nav_menu_item_custom_fields' ), 10, 2 ); add_action( 'wp_update_nav_menu_item', array( $this, 'wp_update_nav_menu_item' ), 10, 2 ); /** * Filter */ add_filter( 'wp_nav_menu_objects', array( $this, 'wp_nav_menu_objects' ), 10, 2 ); add_filter( 'nav_menu_item_title', array( $this, 'kd_badge_nav_fe' ), 10, 2 ); } /** * Get menu item meta data. * * @param int $menu_item_id Menu item ID. * @param boolean $from_cache Whether to fetch from cache. * * @return array Meta data. */ private function get_nav_menu_meta_data( $menu_item_id, $from_cache = true ) { $data = array(); if ( $from_cache ) { $data = $this->get_nav_menu_cached_meta_data( $menu_item_id ); if ( false !== $data ) { return $data; } } $data = get_post_meta( $menu_item_id, $this->meta_key, true ); return $data; } /** * Add custom fields on menu item edit screen. * * @param int $id Current menu item ID. * @param object $item Current menu object. * * @return void */ public function wp_nav_menu_item_custom_fields( $id, $item ) { $data = $this->get_nav_menu_meta_data( $id, false ); wp_nonce_field( $this->meta_key . '-' . $id, $this->meta_key . '-' . $id ); ?>
meta_key . '-' . $item_id, FILTER_SANITIZE_STRING ); if ( empty( $nonce ) || ! wp_verify_nonce( $nonce, $this->meta_key . '-' . $item_id ) ) { return; } $keys = array( 'badge-label', 'badge-color', ); $data = array(); foreach ( $keys as $key ) { if ( isset( $_POST[ $this->meta_key . '-' . $key ][ $item_id ] ) ) { $data[ $key ] = sanitize_text_field( wp_unslash( $_POST[ $this->meta_key . '-' . $key ][ $item_id ] ) ); } } update_post_meta( $item_id, $this->meta_key, $data ); $this->cache_nav_menu_meta_data( $item_id, $data ); } /** * Function to filter nav menu objects. * * @param array $sorted_items Menu items after being sorted. * @param array $args Menu arguments. * * @return array Sorted menu items. */ public function wp_nav_menu_objects( $sorted_items, $args ) { global $nav_menu_custom_fields; if ( empty( $nav_menu_custom_fields ) || ! is_array( $nav_menu_custom_fields ) ) { $nav_menu_custom_fields = array(); } foreach ( $sorted_items as $item ) { $data = $this->get_nav_menu_meta_data( $item->ID ); if ( ! empty( $data ) ) { $nav_menu_custom_fields[ $item->ID ] = $data; } } return $sorted_items; } /** * Function to filter nav menu objects. */ public function kd_badge_nav_fe( $title, $item ) { global $nav_menu_custom_fields; if ( empty( $nav_menu_custom_fields ) || ! is_array( $nav_menu_custom_fields ) ) { return $title; } $badge_label = $badge_color = ''; if ( ! empty( $nav_menu_custom_fields ) || is_array( $nav_menu_custom_fields ) ) { if ( ! empty( $nav_menu_custom_fields[ $item->ID ]['badge-label'] ) ) { $badge_label = $nav_menu_custom_fields[ $item->ID ]['badge-label']; } if ( ! empty( $nav_menu_custom_fields[ $item->ID ]['badge-color'] ) ) { $badge_color = $nav_menu_custom_fields[ $item->ID ]['badge-color']; } $badge_color_style = ''; if ( '' != $badge_color ) { $badge_color_style = 'style="background-color:'.esc_attr( $badge_color ).'1f;color:'.esc_attr( $badge_color ).';"'; } if ( ! empty( $badge_label ) ) { $title .= '
' . esc_html( $badge_label ) . '
'; } } return $title; } /** * Function to get transient data. * * @param int $item_id Menu item ID. * * @return array|boolean Transient data or false. */ private function get_nav_menu_cached_meta_data( $item_id ) { $data = get_transient( $this->meta_key . '-' . $item_id ); if ( false !== $data ) { return $data; } return false; } /** * Function to set transient data. * * @param int $item_id Menu item ID. * @param array $data Data to be stored in transient. * * @return void */ private function cache_nav_menu_meta_data( $item_id, $data ) { set_transient( $this->meta_key . '-' . $item_id, $data, DAY_IN_SECONDS ); } } new Custom_Nav_Menu_Fields;