thor', 'jet-engine' ), 'bookmark' => esc_html__( 'Bookmark', 'jet-engine' ), 'external' => esc_html__( 'External', 'jet-engine' ), 'help' => esc_html__( 'Help', 'jet-engine' ), 'license' => esc_html__( 'License', 'jet-engine' ), 'next' => esc_html__( 'Next', 'jet-engine' ), 'nofollow' => esc_html__( 'Nofollow', 'jet-engine' ), 'noreferrer' => esc_html__( 'Noreferrer', 'jet-engine' ), 'noopener' => esc_html__( 'Noopener', 'jet-engine' ), 'prev' => esc_html__( 'Prev', 'jet-engine' ), 'search' => esc_html__( 'Search', 'jet-engine' ), 'tag' => esc_html__( 'Tag', 'jet-engine' ), ); if ( ARRAY_N === $format ) { $result = array(); foreach ( $options as $value => $label ) { $result[] = array( 'value' => $value, 'label' => $label, ); } return $result; } return $options; } /** * Duplicate of `Jet_Engine_Tools::insert_after`. */ public static function array_insert_after( $source = array(), $after = null, $insert = array() ) { return self::insert_after( $source, $after, $insert ); } /** * Returns list of menu positions with index and appropriate labels * @return [type] [description] */ public static function get_available_menu_positions() { return apply_filters( 'jet-engine/tools/available-menu-positions', array( array( 'value' => 3, 'label' => __( 'Dashboard', 'jet-engine' ), ), array( 'value' => 4, 'label' => __( 'First Separator', 'jet-engine' ), ), array( 'value' => 6, 'label' => __( 'Posts', 'jet-engine' ), ), array( 'value' => 11, 'label' => __( 'Media', 'jet-engine' ), ), array( 'value' => 16, 'label' => __( 'Links', 'jet-engine' ), ), array( 'value' => 21, 'label' => __( 'Pages', 'jet-engine' ), ), array( 'value' => 26, 'label' => __( 'Comments', 'jet-engine' ), ), array( 'value' => 59, 'label' => __( 'Second Separator', 'jet-engine' ), ), array( 'value' => 61, 'label' => __( 'Appearance', 'jet-engine' ), ), array( 'value' => 66, 'label' => __( 'Plugins', 'jet-engine' ), ), array( 'value' => 71, 'label' => __( 'Users', 'jet-engine' ), ), array( 'value' => 76, 'label' => __( 'Tools', 'jet-engine' ), ), array( 'value' => 81, 'label' => __( 'Settings', 'jet-engine' ), ), array( 'value' => 100, 'label' => __( 'Third Separator', 'jet-engine' ), ), ) ); } /** * Returns default menu poistion for JetEngine user-created instance. * Main purpose - compatibility with JetDashboard module * * @return [type] [description] */ public static function get_default_menu_position() { return apply_filters( 'jet-engine/tools/default-menu-position', '' ); } /** * Ensures a string is a valid SQL 'order by' clause. * * Accepts one or more columns, with or without a sort order (ASC / DESC). * e.g. 'column_1', 'column_1, column_2', 'column_1 ASC, column_2 DESC' etc. * * Also accepts 'posts.column_1', 'posts.column_1, column_2', 'posts.column_1 ASC, column_2 DESC' etc. * * Also accepts 'RAND()'. * * @param string $orderby Order by clause to be validated. * @return string|false Returns $orderby if valid, false otherwise. */ public static function sanitize_sql_orderby( $orderby ) { if ( preg_match( '/^\s*(([a-z0-9_\.]+|`[a-z0-9_\.]+`)(\s+(ASC|DESC))?\s*(,\s*(?=[a-z0-9_`\.])|$))+$/i', $orderby ) || preg_match( '/^\s*RAND\(\s*\)\s*$/i', $orderby ) || preg_match( '/^\s*FIELD\s*\(.*?\)\s*$/i', $orderby ) ) { return $orderby; } return false; } public static function delete_metadata_by_object_where( $meta_type = null, $meta_key = null, $object_where = array() ) { if ( empty( $meta_type ) || empty( $meta_key ) || empty( $object_where ) ) { return false; } if ( ! in_array( $meta_type, array( 'post', 'term', 'user' ) ) ) { return false; } global $wpdb; $raw_meta_table = $meta_type . 'meta'; $raw_object_table = ( 'term' === $meta_type ) ? 'term_taxonomy' : $meta_type . 's'; if ( empty( $wpdb->$raw_meta_table ) || empty( $wpdb->$raw_object_table ) ) { return false; } $meta_table = $wpdb->$raw_meta_table; $object_table = $wpdb->$raw_object_table; $meta_column = sanitize_key( $meta_type . '_id' ); $object_column = ( 'term' === $meta_type ) ? 'term_id' : 'ID'; $id_column = ( 'user' === $meta_type ) ? 'umeta_id' : 'meta_id'; $query = "SELECT $raw_meta_table.$id_column FROM $meta_table AS $raw_meta_table "; $query .= "INNER JOIN $object_table AS $raw_object_table ON $raw_object_table.$object_column = $raw_meta_table.$meta_column "; $query .= "WHERE "; $where = array( "$raw_meta_table.meta_key" => $meta_key ); foreach ( $object_where as $column => $value ) { $where["$raw_object_table.$column"] = $value; } $glue = ''; foreach ( $where as $column => $value ) { if ( empty( $value ) ) { continue; } if ( is_array( $value ) ) { $operator = 'IN'; $value = array_map( 'trim', $value ); $value = array_map( function ( $item ) { return sprintf( "'%s'", esc_sql( $item ) ); }, $value ); $value = sprintf( '( %s )', implode( ', ', $value ) ); } else { $operator = '='; $value = sprintf( "'%s'", esc_sql( $value ) ); } $column = esc_sql( $column ); $query .= $glue; $query .= "$column $operator $value"; $glue = ' AND '; } $meta_ids = $wpdb->get_col( $query ); if ( ! count( $meta_ids ) ) { return false; } $object_ids_query = str_replace( "SELECT $raw_meta_table.$id_column", "SELECT $raw_meta_table.$meta_column", $query ); $object_ids = $wpdb->get_col( $object_ids_query ); $object_ids = array_unique( $object_ids ); $object_ids = array_values( $object_ids ); $delete_query = "DELETE FROM $meta_table WHERE $id_column IN( " . implode( ',', $meta_ids ) . " )"; $count = $wpdb->query( $delete_query ); if ( ! $count ) { return false; } wp_cache_delete_multiple( (array) $object_ids, $meta_type . '_meta' ); return true; } }