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;
}
}