mirror of
https://github.com/10h30/ultimatemember.git
synced 2026-06-05 15:09:37 +09:00
- added member directories' custom sorting labels;
This commit is contained in:
@@ -114,6 +114,33 @@ textarea.um-forms-field.um-small-field {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.um-multi-selects-option-line .um-field-wrapper.um-custom-order-fields {
|
||||
margin: 5px 0 0 0;
|
||||
}
|
||||
|
||||
.um-multi-selects-option-line .um-field-wrapper.um-custom-order-fields label {
|
||||
float:left;
|
||||
width: 100%;
|
||||
line-height: 30px;
|
||||
box-sizing: border-box;
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
font-weight: bold;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: nowrap;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
}
|
||||
|
||||
.um-multi-selects-option-line .um-field-wrapper.um-custom-order-fields label input[type="text"] {
|
||||
width: auto;
|
||||
display: inline;
|
||||
font-weight: normal;
|
||||
max-width: 70%;
|
||||
flex: 0.9;
|
||||
}
|
||||
|
||||
.um-multi-selects-option-line.um-admin-drag-fld .um-field-wrapper {
|
||||
width: calc( 100% - 90px );
|
||||
}
|
||||
@@ -223,6 +250,10 @@ textarea.um-forms-field.um-small-field {
|
||||
width:calc( 100% - 20px );
|
||||
}
|
||||
|
||||
.um-multi-text-option-line,
|
||||
.um-multi-selects-option-line {
|
||||
margin: 0 0 5px 0;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 782px) {
|
||||
.um-form-fields-section {
|
||||
|
||||
@@ -150,6 +150,61 @@ jQuery(document).ready( function() {
|
||||
forcePlaceholderSize: true
|
||||
});
|
||||
|
||||
jQuery('.um-multi-selects-list[data-field_id="_um_sorting_fields"] li').each( function() {
|
||||
var if_other = jQuery(this).find( '.um-field-wrapper:not(.um-custom-order-fields) select' ).val();
|
||||
if ( if_other === 'other' ) {
|
||||
jQuery(this).find( '.um-field-wrapper.um-custom-order-fields' ).show();
|
||||
} else {
|
||||
jQuery(this).find( '.um-field-wrapper.um-custom-order-fields' ).hide();
|
||||
}
|
||||
});
|
||||
|
||||
jQuery( '.um-forms-line[data-field_type="md_sorting_fields"] .um-multi-selects-add-option' ).click( function() {
|
||||
var list = jQuery(this).siblings('ul.um-multi-selects-list');
|
||||
|
||||
var sortable = list.hasClass( 'um-sortable-multi-selects' );
|
||||
|
||||
var field_id = list.data('field_id');
|
||||
var k = 0;
|
||||
if ( list.find( 'li:last select.um-forms-field' ).length > 0 ) {
|
||||
k = list.find( 'li:last select.um-forms-field' ).attr('id').split("-");
|
||||
k = k[1]*1 + 1;
|
||||
}
|
||||
|
||||
var selector_html = jQuery( '<div>' ).append( list.siblings('.um-hidden-multi-selects').clone() ).html();
|
||||
|
||||
var html = '<li class="um-multi-selects-option-line' + ( sortable ? ' um-admin-drag-fld' : '' ) + '">';
|
||||
if ( sortable ) {
|
||||
html += '<span class="um-field-icon"><i class="um-faicon-sort"></i></span>';
|
||||
}
|
||||
|
||||
html += '<span class="um-field-wrapper">' + selector_html + '</span>' +
|
||||
'<span class="um-field-control">' +
|
||||
'<a href="javascript:void(0);" class="um-select-delete">' + wp.i18n.__( 'Remove', 'ultimate-member' ) + '</a>' +
|
||||
'</span>' +
|
||||
'<span class="um-field-wrapper um-custom-order-fields"><label>' + wp.i18n.__( 'Meta key', 'ultimate-member' ) + ': <input type="text" name="meta_key" /></label></span>' +
|
||||
'<span class="um-field-wrapper um-custom-order-fields"><label>' + wp.i18n.__( 'Label', 'ultimate-member' ) + ': <input type="text" name="label" /></label></span>' +
|
||||
'</li>';
|
||||
list.append( html );
|
||||
|
||||
list.find('li:last .um-hidden-multi-selects').attr('name', jQuery(this).data('name') ).
|
||||
addClass('um-forms-field um-long-field').removeClass('um-hidden-multi-selects').attr('id', list.data('id_attr') + '-' + k).trigger('change');
|
||||
|
||||
jQuery( '#' + list.data('id_attr') + '-' + k ).parents('li').find('.um-field-wrapper.um-custom-order-fields input[name="meta_key"]').attr('name', 'um_metadata[_um_sorting_fields][other_data][' + k + '][meta_key]');
|
||||
jQuery( '#' + list.data('id_attr') + '-' + k ).parents('li').find('.um-field-wrapper.um-custom-order-fields input[name="label"]').attr('name', 'um_metadata[_um_sorting_fields][other_data][' + k + '][label]');
|
||||
});
|
||||
|
||||
|
||||
jQuery( document.body ).on( 'change', '.um-multi-selects-list[data-field_id="_um_sorting_fields"] .um-field-wrapper:not(.um-custom-order-fields) select', function() {
|
||||
var if_other = jQuery(this).val();
|
||||
|
||||
if ( if_other === 'other' ) {
|
||||
jQuery(this).parents('li').find( '.um-field-wrapper.um-custom-order-fields' ).show();
|
||||
} else {
|
||||
jQuery(this).parents('li').find( '.um-field-wrapper.um-custom-order-fields' ).hide();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Multi-selects field
|
||||
@@ -166,6 +221,10 @@ jQuery(document).ready( function() {
|
||||
});
|
||||
|
||||
jQuery( '.um-multi-selects-add-option' ).click( function() {
|
||||
if ( jQuery(this).parents( '.um-forms-line[data-field_type="md_sorting_fields"]' ).length ) {
|
||||
return;
|
||||
}
|
||||
|
||||
var list = jQuery(this).siblings('ul.um-multi-selects-list');
|
||||
|
||||
var sortable = list.hasClass( 'um-sortable-multi-selects' );
|
||||
|
||||
@@ -1370,6 +1370,122 @@ if ( ! class_exists( 'um\admin\core\Admin_Forms' ) ) {
|
||||
return $html;
|
||||
}
|
||||
|
||||
|
||||
function render_md_sorting_fields( $field_data ) {
|
||||
if ( empty( $field_data['id'] ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$id = ( ! empty( $this->form_data['prefix_id'] ) ? $this->form_data['prefix_id'] : '' ) . '_' . $field_data['id'];
|
||||
|
||||
$sorting = ! empty( $field_data['sorting'] ) ? $field_data['sorting'] : false;
|
||||
|
||||
$class = ! empty( $field_data['class'] ) ? $field_data['class'] : '';
|
||||
$class .= ! empty( $field_data['size'] ) ? $field_data['size'] : 'um-long-field';
|
||||
$class .= ! empty( $sorting ) ? 'um-sorting-enabled' : '';
|
||||
$class_attr = ' class="um-forms-field ' . $class . '" ';
|
||||
|
||||
$data = array(
|
||||
'field_id' => $field_data['id'],
|
||||
'id_attr' => $id
|
||||
);
|
||||
|
||||
$data_attr = '';
|
||||
foreach ( $data as $key => $value ) {
|
||||
$data_attr .= ' data-' . $key . '="' . esc_attr( $value ) . '" ';
|
||||
}
|
||||
|
||||
$name = $field_data['id'];
|
||||
$name = ! empty( $this->form_data['prefix_id'] ) ? $this->form_data['prefix_id'] . '[' . $name . ']' : $name;
|
||||
$name = "{$name}[]";
|
||||
$name_attr = ' name="' . $name . '" ';
|
||||
|
||||
$values = $this->get_field_value( $field_data );
|
||||
|
||||
$options = '';
|
||||
foreach ( $field_data['options'] as $key => $option ) {
|
||||
$options .= '<option value="' . $key . '">' . $option . '</option>';
|
||||
}
|
||||
|
||||
$html = "<select class=\"um-hidden-multi-selects\" $data_attr>$options</select>";
|
||||
$html .= "<ul class=\"um-multi-selects-list" . ( ! empty( $sorting ) ? ' um-sortable-multi-selects' : '' ) . "\" $data_attr>";
|
||||
|
||||
if ( $sorting && is_array( $values ) ) {
|
||||
ksort( $values );
|
||||
}
|
||||
|
||||
if ( ! empty( $values ) && is_array( $values ) ) {
|
||||
foreach ( $values as $k => $value ) {
|
||||
|
||||
$other_key = '';
|
||||
$other_label = '';
|
||||
if ( is_array( $value ) ) {
|
||||
$keys = array_keys( $value );
|
||||
$other_key = $keys[0];
|
||||
|
||||
$labels = array_values( $value );
|
||||
$other_label = $labels[0];
|
||||
} else {
|
||||
if ( ! in_array( $value, array_keys( $field_data['options'] ) ) ) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
$id_attr = ' id="' . esc_attr( $id . '-' . $k ) . '" ';
|
||||
|
||||
$options = '';
|
||||
foreach ( $field_data['options'] as $key => $option ) {
|
||||
if ( is_array( $value ) ) {
|
||||
$selected = selected( $key == 'other', true, false );
|
||||
} else {
|
||||
$selected = selected( $key == $value, true, false );
|
||||
}
|
||||
|
||||
$options .= '<option value="' . $key . '" ' . $selected . '>' . $option . '</option>';
|
||||
}
|
||||
|
||||
$html .= '<li class="um-multi-selects-option-line' . ( ! empty( $sorting ) ? ' um-admin-drag-fld' : '' ) . '">';
|
||||
if ( $sorting ) {
|
||||
$html .= '<span class="um-field-icon"><i class="um-faicon-sort"></i></span>';
|
||||
}
|
||||
$html .= "<span class=\"um-field-wrapper\">
|
||||
<select $id_attr $name_attr $class_attr $data_attr>$options</select></span>
|
||||
<span class=\"um-field-control\"><a href=\"javascript:void(0);\" class=\"um-select-delete\">" . __( 'Remove', 'ultimate-member' ) . "</a></span>
|
||||
<span class=\"um-field-wrapper um-custom-order-fields\"><label>" . __( 'Meta key', 'ultimate-member' ) . ": <input type=\"text\" name=\"um_metadata[_um_sorting_fields][other_data][" . $k . "][meta_key]\" value=\"" . esc_attr( $other_key ) . "\" /></label></span>
|
||||
<span class=\"um-field-wrapper um-custom-order-fields\"><label>" . __( 'Label', 'ultimate-member' ) . ": <input type=\"text\" name=\"um_metadata[_um_sorting_fields][other_data][" . $k . "][label]\" value=\"" . esc_attr( $other_label ) . "\" /></label></span>
|
||||
</li>";
|
||||
}
|
||||
} elseif ( ! empty( $field_data['show_default_number'] ) && is_numeric( $field_data['show_default_number'] ) && $field_data['show_default_number'] > 0 ) {
|
||||
$i = 0;
|
||||
while ( $i < $field_data['show_default_number'] ) {
|
||||
$id_attr = ' id="' . $id . '-' . $i . '" ';
|
||||
|
||||
$options = '';
|
||||
foreach ( $field_data['options'] as $key => $option ) {
|
||||
$options .= '<option value="' . $key . '">' . $option . '</option>';
|
||||
}
|
||||
|
||||
$html .= '<li class="um-multi-selects-option-line' . ( ! empty( $sorting ) ? ' um-admin-drag-fld' : '' ) . '">';
|
||||
if ( $sorting ) {
|
||||
$html .= '<span class="um-field-icon"><i class="um-faicon-sort"></i></span>';
|
||||
}
|
||||
|
||||
$html .= "<span class=\"um-field-wrapper\">
|
||||
<select $id_attr $name_attr $class_attr $data_attr>$options</select></span>
|
||||
<span class=\"um-field-control\"><a href=\"javascript:void(0);\" class=\"um-select-delete\">" . __( 'Remove', 'ultimate-member' ) . "</a></span>
|
||||
<span class=\"um-field-wrapper um-custom-order-fields\"><label>" . __( 'Meta key', 'ultimate-member' ) . ": <input type=\"text\" name=\"um_metadata[_um_sorting_fields][other_data][" . $i . "][meta_key]\" value=\"\" /></label></span>
|
||||
<span class=\"um-field-wrapper um-custom-order-fields\"><label>" . __( 'Label', 'ultimate-member' ) . ": <input type=\"text\" name=\"um_metadata[_um_sorting_fields][other_data][" . $i . "][label]\" value=\"\" /></label></span>
|
||||
</li>";
|
||||
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
|
||||
$html .= "</ul><a href=\"javascript:void(0);\" class=\"button button-primary um-multi-selects-add-option\" data-name=\"$name\">{$field_data['add_text']}</a>";
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get field value
|
||||
*
|
||||
|
||||
@@ -125,6 +125,30 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
|
||||
$metakeys[] = '_completed';
|
||||
$metakeys[] = '_reviews_avg';
|
||||
|
||||
$sortby_custom_keys = $wpdb->get_col( "SELECT DISTINCT meta_value FROM {$wpdb->postmeta} WHERE meta_key='_um_sortby_custom'" );
|
||||
if ( empty( $sortby_custom_keys ) ) {
|
||||
$sortby_custom_keys = array();
|
||||
}
|
||||
|
||||
$sortby_custom_keys2 = $wpdb->get_col( "SELECT meta_value FROM {$wpdb->postmeta} WHERE meta_key='_um_sorting_fields'" );
|
||||
if ( ! empty( $sortby_custom_keys2 ) ) {
|
||||
foreach ( $sortby_custom_keys2 as $custom_val ) {
|
||||
$custom_val = maybe_unserialize( $custom_val );
|
||||
|
||||
foreach ( $custom_val as $sort_value ) {
|
||||
if ( is_array( $sort_value ) ) {
|
||||
$field_keys = array_keys( $sort_value );
|
||||
$sortby_custom_keys[] = $field_keys[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! empty( $sortby_custom_keys ) ) {
|
||||
$sortby_custom_keys = array_unique( $sortby_custom_keys );
|
||||
$metakeys = array_merge( $metakeys, $sortby_custom_keys );
|
||||
}
|
||||
|
||||
$skip_fields = UM()->builtin()->get_fields_without_metakey();
|
||||
$skip_fields = array_merge( $skip_fields, UM()->member_directory()->core_search_fields );
|
||||
|
||||
@@ -132,9 +156,13 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
|
||||
$real_usermeta = ! empty( $real_usermeta ) ? $real_usermeta : array();
|
||||
$real_usermeta = array_merge( $real_usermeta, array( 'um_member_directory_data' ) );
|
||||
|
||||
if ( ! empty( $sortby_custom_keys ) ) {
|
||||
$real_usermeta = array_merge( $real_usermeta, $sortby_custom_keys );
|
||||
}
|
||||
|
||||
$wp_usermeta_option = array_intersect( array_diff( $metakeys, $skip_fields ), $real_usermeta );
|
||||
|
||||
update_option( 'um_usermeta_fields', $wp_usermeta_option );
|
||||
update_option( 'um_usermeta_fields', array_values( $wp_usermeta_option ) );
|
||||
|
||||
update_option( 'um_member_directory_update_meta', time() );
|
||||
|
||||
|
||||
@@ -25,6 +25,14 @@ $_um_sorting_fields = empty( $_um_sorting_fields ) ? array() : $_um_sorting_fiel
|
||||
'value' => UM()->query()->get_meta_value( '_um_sortby_custom', null, 'na' ),
|
||||
'conditional' => array( '_um_sortby', '=', 'other' )
|
||||
),
|
||||
array(
|
||||
'id' => '_um_sortby_custom_label',
|
||||
'type' => 'text',
|
||||
'label' => __( 'Label of custom sort', 'ultimate-member' ),
|
||||
'tooltip' => __( 'To sort by a custom field, enter the label of sorting here', 'ultimate-member' ),
|
||||
'value' => UM()->query()->get_meta_value( '_um_sortby_custom_label', null, 'na' ),
|
||||
'conditional' => array( '_um_sortby', '=', 'other' )
|
||||
),
|
||||
array(
|
||||
'id' => '_um_enable_sorting',
|
||||
'type' => 'checkbox',
|
||||
@@ -34,13 +42,13 @@ $_um_sorting_fields = empty( $_um_sorting_fields ) ? array() : $_um_sorting_fiel
|
||||
),
|
||||
array(
|
||||
'id' => '_um_sorting_fields',
|
||||
'type' => 'multi_selects',
|
||||
'type' => 'md_sorting_fields',
|
||||
'label' => __( 'Choose field(s) to enable in sorting', 'ultimate-member' ),
|
||||
'value' => $_um_sorting_fields,
|
||||
'options' => UM()->member_directory()->sort_fields,
|
||||
'options' => array_merge( UM()->member_directory()->sort_fields, array( 'other' => __( 'Other (Custom Field)', 'ultimate-member' ) ) ),
|
||||
'add_text' => __( 'Add New Field', 'ultimate-member' ),
|
||||
'show_default_number' => 1,
|
||||
'conditional' => array( '_um_enable_sorting', '=', 1 )
|
||||
'conditional' => array( '_um_enable_sorting', '=', 1 ),
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user