Changeset 3312220
- Timestamp:
- 06/16/2025 01:49:04 AM (10 months ago)
- Location:
- filterflex
- Files:
-
- 2 deleted
- 8 edited
- 7 copied
-
tags/1.2.0 (copied) (copied from filterflex/trunk)
-
tags/1.2.0/admin/css/filterflex-admin.css (copied) (copied from filterflex/trunk/admin/css/filterflex-admin.css)
-
tags/1.2.0/admin/js/filterflex-admin.js (copied) (copied from filterflex/trunk/admin/js/filterflex-admin.js) (3 diffs)
-
tags/1.2.0/filterflex.php (copied) (copied from filterflex/trunk/filterflex.php) (1 diff)
-
tags/1.2.0/includes/class-filterflex-filter-application.php (modified) (2 diffs)
-
tags/1.2.0/includes/class-filterflex.php (copied) (copied from filterflex/trunk/includes/class-filterflex.php) (3 diffs)
-
tags/1.2.0/includes/core-functions.php (modified) (1 diff)
-
tags/1.2.0/readme.txt (copied) (copied from filterflex/trunk/readme.txt) (2 diffs)
-
tags/1.2.0/static/css (deleted)
-
tags/1.2.0/static/img (copied) (copied from filterflex/trunk/static/img)
-
tags/1.2.0/static/js (deleted)
-
trunk/admin/js/filterflex-admin.js (modified) (3 diffs)
-
trunk/filterflex.php (modified) (1 diff)
-
trunk/includes/class-filterflex-filter-application.php (modified) (2 diffs)
-
trunk/includes/class-filterflex.php (modified) (3 diffs)
-
trunk/includes/core-functions.php (modified) (1 diff)
-
trunk/readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
filterflex/tags/1.2.0/admin/js/filterflex-admin.js
r3311998 r3312220 104 104 $valueSelect.empty(); // Clear loading indicator 105 105 106 if (response.success && response.data.values && Object.keys(response.data.values).length > 0) { 106 if (response.success && response.data.values && typeof response.data.values === 'object' && Object.keys(response.data.values).length > 0) { 107 $valueSelect.prop('disabled', false); // Enable before populating 107 108 $valueSelect.append($('<option>', { value: '', text: filterFlexData.i18n?.selectValue || '-- Select Value --' })); 108 109 $.each(response.data.values, function(value, label) { … … 119 120 } else if ((!initialLoad || (initialLoad && savedVal === null)) && param === 'post_type' && response.data.values.hasOwnProperty('post')) { 120 121 $valueSelect.val('post'); // Set default to 'Posts' 121 } 122 else { 122 } else { 123 123 $valueSelect.val(''); // Select default if no saved value or not found 124 124 } 125 $valueSelect.show();125 $valueSelect.show(); 126 126 } else { 127 // No options returned or error 128 $valueSelect.append($('<option>', { value: '', text: filterFlexData.i18n?.noOptions || '-- N/A --' })); 129 // Keep it hidden or show N/A? Let's show N/A but keep it disabled-like 130 $valueSelect.show().prop('disabled', true); // Visually indicate no options 127 // No options returned or error from PHP (response.data.values is null or empty) 128 $valueSelect.append($('<option>', { value: '', text: response.data?.message || filterFlexData.i18n?.noOptions || '-- N/A --' })); 129 $valueSelect.show().prop('disabled', true); 131 130 } 132 131 }, … … 139 138 $valueSelect.append($('<option>', { value: '', text: errorMsg })).show().prop('disabled', true); 140 139 }, 141 complete: function() { 142 // Re-enable dropdown if it was disabled 143 if ($valueSelect.prop('disabled')) { 144 // Only re-enable if options were actually loaded successfully 145 if ($valueSelect.find('option').length > 1) { // More than just the default/error option 146 $valueSelect.prop('disabled', false); 147 } 148 } 149 // Clear the saved value data attribute after using it on initial load 150 // Although it might not be strictly necessary to remove it 151 // if (initialLoad) { 152 // $valueSelect.removeData('saved-value'); 153 // } 154 } 140 // complete: function() { 141 // // Re-enable dropdown if it was disabled 142 // if ($valueSelect.prop('disabled')) { 143 // // Only re-enable if options were actually loaded successfully 144 // if ($valueSelect.find('option').length > 1 && $valueSelect.find('option[value=""]').text() !== (filterFlexData.i18n?.noOptions || '-- N/A --')) { 145 // $valueSelect.prop('disabled', false); 146 // } 147 // } 148 // } 155 149 }); 156 150 } -
filterflex/tags/1.2.0/filterflex.php
r3311998 r3312220 4 4 * Plugin URI: https://wordpress.org/plugins/filterflex 5 5 * Description: A powerful plugin for applying filters to various WordPress elements with custom field support and dynamic tag replacement. 6 * Version: 1. 1.26 * Version: 1.2.0 7 7 * Requires at least: 5.0 8 8 * Requires PHP: 7.4 -
filterflex/tags/1.2.0/includes/class-filterflex-filter-application.php
r3311711 r3312220 412 412 // Check the operator 413 413 switch ( $operator ) { 414 case 'is': 414 415 case '==': 415 416 return $actual_value == $value; 417 case 'is_not': 416 418 case '!=': 417 419 return $actual_value != $value; … … 457 459 $terms = get_the_terms( get_the_ID(), get_query_var( 'taxonomy' ) ); 458 460 return ! empty( $terms ) ? $terms[0]->term_id : ''; 461 case 'logged_in_status': 462 return is_user_logged_in() ? 'logged_in' : 'logged_out'; 463 case 'specific_user': 464 return (string) get_current_user_id(); 465 case 'page_parent': 466 $post = get_post(); 467 if ( $post && is_post_type_hierarchical( $post->post_type ) ) { 468 return (string) $post->post_parent; 469 } 470 return '0'; 459 471 default: 460 472 // Allow custom parameters via filter -
filterflex/tags/1.2.0/includes/class-filterflex.php
r3311998 r3312220 477 477 $icon_html = '<span class="filterflex-tag-icon dashicons dashicons-tag"></span>'; 478 478 $extra_class = ' filterflex-tag-tags'; 479 } elseif ( $tag_placeholder === '{author}' ) { 480 $icon_html = '<span class="filterflex-tag-icon dashicons dashicons-admin-users"></span>'; 481 $extra_class = ' filterflex-tag-author'; 479 482 } elseif ( $tag_placeholder === '{custom_field}' ) { 480 483 $icon_html = '<span class="filterflex-tag-icon dashicons dashicons-welcome-widgets-menus"></span>'; … … 569 572 $config = [ 570 573 'params' => [ 571 'post_type' => __( 'Post Type', 'filterflex' ), 572 'page_template' => __( 'Page Template', 'filterflex' ), 573 'page' => __( 'Page', 'filterflex' ), 574 'post' => __( 'Post', 'filterflex' ), 575 'post_category' => __( 'Post Category', 'filterflex' ), 576 'user_role' => __( 'User Role', 'filterflex' ), 577 'page_type' => __( 'Page Type', 'filterflex' ), 574 'post' => __( 'Post', 'filterflex' ), 575 'post_category' => __( 'Post Category', 'filterflex' ), 576 'post_type' => __( 'Post Type', 'filterflex' ), 577 'page' => __( 'Page', 'filterflex' ), 578 'page_parent' => __( 'Page Parent', 'filterflex' ), 579 'page_type' => __( 'Page Type', 'filterflex' ), 580 'user_role' => __( 'User Role', 'filterflex' ), 581 'logged_in_status' => __( 'Logged-in Status', 'filterflex' ), 582 'specific_user' => __( 'Specific User', 'filterflex' ), 583 'page_template' => __( 'Page Template', 'filterflex' ), 578 584 ], 579 585 'operators' => [ 580 586 '==' => __('is equal to', 'filterflex'), 581 587 '!=' => __('is not equal to', 'filterflex'), 588 'is' => __('is', 'filterflex'), 589 'is_not' => __('is not', 'filterflex'), 582 590 ], 583 591 ]; … … 920 928 foreach ($categories as $category) { $values[$category->term_id] = $category->name; } 921 929 break; 930 case 'logged_in_status': 931 $values = [ 'logged_in' => __( 'Logged In', 'filterflex' ), 'logged_out' => __( 'Logged Out', 'filterflex' ) ]; 932 break; 933 case 'specific_user': 934 $users = get_users(); 935 foreach ( $users as $user ) { 936 $values[ $user->ID ] = $user->display_name; 937 } 938 break; 939 case 'page_parent': 940 $pages = get_pages(); 941 foreach ( $pages as $page ) { 942 $values[ $page->ID ] = $page->post_title; 943 } 944 break; 922 945 default: 923 946 $values = apply_filters( "filterflex_location_values_{$param}", [] ); -
filterflex/tags/1.2.0/includes/core-functions.php
r3311280 r3312220 189 189 ]; 190 190 break; 191 case 'logged_in_status': 192 $values = [ 'logged_in' => __( 'Logged In', 'filterflex' ), 'logged_out' => __( 'Logged Out', 'filterflex' ) ]; 193 break; 194 case 'specific_user': 195 $users = get_users(); 196 foreach ( $users as $user ) { 197 $values[ $user->ID ] = $user->display_name; 198 } 199 break; 200 case 'page_parent': 201 $pages = get_pages(); 202 foreach ( $pages as $page ) { 203 $values[ $page->ID ] = $page->post_title; 204 } 205 break; 191 206 default: 192 207 $values = apply_filters( 'filterflex_ajax_location_values', [], $param ); -
filterflex/tags/1.2.0/readme.txt
r3311998 r3312220 4 4 Requires at least: 5.0 5 5 Tested up to: 6.8 6 Stable tag: 1. 1.26 Stable tag: 1.2.0 7 7 Requires PHP: 7.4 8 8 License: GPLv2 or later … … 56 56 == Changelog == 57 57 58 = 1.2.0 = 59 * New Location Rule: Logged-In Status 60 * New Location Rule: Specific User 61 * New Location Rule: Page Parent 62 58 63 = 1.1.2 = 59 64 * Added icons to available tags -
filterflex/trunk/admin/js/filterflex-admin.js
r3311998 r3312220 104 104 $valueSelect.empty(); // Clear loading indicator 105 105 106 if (response.success && response.data.values && Object.keys(response.data.values).length > 0) { 106 if (response.success && response.data.values && typeof response.data.values === 'object' && Object.keys(response.data.values).length > 0) { 107 $valueSelect.prop('disabled', false); // Enable before populating 107 108 $valueSelect.append($('<option>', { value: '', text: filterFlexData.i18n?.selectValue || '-- Select Value --' })); 108 109 $.each(response.data.values, function(value, label) { … … 119 120 } else if ((!initialLoad || (initialLoad && savedVal === null)) && param === 'post_type' && response.data.values.hasOwnProperty('post')) { 120 121 $valueSelect.val('post'); // Set default to 'Posts' 121 } 122 else { 122 } else { 123 123 $valueSelect.val(''); // Select default if no saved value or not found 124 124 } 125 $valueSelect.show();125 $valueSelect.show(); 126 126 } else { 127 // No options returned or error 128 $valueSelect.append($('<option>', { value: '', text: filterFlexData.i18n?.noOptions || '-- N/A --' })); 129 // Keep it hidden or show N/A? Let's show N/A but keep it disabled-like 130 $valueSelect.show().prop('disabled', true); // Visually indicate no options 127 // No options returned or error from PHP (response.data.values is null or empty) 128 $valueSelect.append($('<option>', { value: '', text: response.data?.message || filterFlexData.i18n?.noOptions || '-- N/A --' })); 129 $valueSelect.show().prop('disabled', true); 131 130 } 132 131 }, … … 139 138 $valueSelect.append($('<option>', { value: '', text: errorMsg })).show().prop('disabled', true); 140 139 }, 141 complete: function() { 142 // Re-enable dropdown if it was disabled 143 if ($valueSelect.prop('disabled')) { 144 // Only re-enable if options were actually loaded successfully 145 if ($valueSelect.find('option').length > 1) { // More than just the default/error option 146 $valueSelect.prop('disabled', false); 147 } 148 } 149 // Clear the saved value data attribute after using it on initial load 150 // Although it might not be strictly necessary to remove it 151 // if (initialLoad) { 152 // $valueSelect.removeData('saved-value'); 153 // } 154 } 140 // complete: function() { 141 // // Re-enable dropdown if it was disabled 142 // if ($valueSelect.prop('disabled')) { 143 // // Only re-enable if options were actually loaded successfully 144 // if ($valueSelect.find('option').length > 1 && $valueSelect.find('option[value=""]').text() !== (filterFlexData.i18n?.noOptions || '-- N/A --')) { 145 // $valueSelect.prop('disabled', false); 146 // } 147 // } 148 // } 155 149 }); 156 150 } -
filterflex/trunk/filterflex.php
r3311998 r3312220 4 4 * Plugin URI: https://wordpress.org/plugins/filterflex 5 5 * Description: A powerful plugin for applying filters to various WordPress elements with custom field support and dynamic tag replacement. 6 * Version: 1. 1.26 * Version: 1.2.0 7 7 * Requires at least: 5.0 8 8 * Requires PHP: 7.4 -
filterflex/trunk/includes/class-filterflex-filter-application.php
r3311711 r3312220 412 412 // Check the operator 413 413 switch ( $operator ) { 414 case 'is': 414 415 case '==': 415 416 return $actual_value == $value; 417 case 'is_not': 416 418 case '!=': 417 419 return $actual_value != $value; … … 457 459 $terms = get_the_terms( get_the_ID(), get_query_var( 'taxonomy' ) ); 458 460 return ! empty( $terms ) ? $terms[0]->term_id : ''; 461 case 'logged_in_status': 462 return is_user_logged_in() ? 'logged_in' : 'logged_out'; 463 case 'specific_user': 464 return (string) get_current_user_id(); 465 case 'page_parent': 466 $post = get_post(); 467 if ( $post && is_post_type_hierarchical( $post->post_type ) ) { 468 return (string) $post->post_parent; 469 } 470 return '0'; 459 471 default: 460 472 // Allow custom parameters via filter -
filterflex/trunk/includes/class-filterflex.php
r3311998 r3312220 477 477 $icon_html = '<span class="filterflex-tag-icon dashicons dashicons-tag"></span>'; 478 478 $extra_class = ' filterflex-tag-tags'; 479 } elseif ( $tag_placeholder === '{author}' ) { 480 $icon_html = '<span class="filterflex-tag-icon dashicons dashicons-admin-users"></span>'; 481 $extra_class = ' filterflex-tag-author'; 479 482 } elseif ( $tag_placeholder === '{custom_field}' ) { 480 483 $icon_html = '<span class="filterflex-tag-icon dashicons dashicons-welcome-widgets-menus"></span>'; … … 569 572 $config = [ 570 573 'params' => [ 571 'post_type' => __( 'Post Type', 'filterflex' ), 572 'page_template' => __( 'Page Template', 'filterflex' ), 573 'page' => __( 'Page', 'filterflex' ), 574 'post' => __( 'Post', 'filterflex' ), 575 'post_category' => __( 'Post Category', 'filterflex' ), 576 'user_role' => __( 'User Role', 'filterflex' ), 577 'page_type' => __( 'Page Type', 'filterflex' ), 574 'post' => __( 'Post', 'filterflex' ), 575 'post_category' => __( 'Post Category', 'filterflex' ), 576 'post_type' => __( 'Post Type', 'filterflex' ), 577 'page' => __( 'Page', 'filterflex' ), 578 'page_parent' => __( 'Page Parent', 'filterflex' ), 579 'page_type' => __( 'Page Type', 'filterflex' ), 580 'user_role' => __( 'User Role', 'filterflex' ), 581 'logged_in_status' => __( 'Logged-in Status', 'filterflex' ), 582 'specific_user' => __( 'Specific User', 'filterflex' ), 583 'page_template' => __( 'Page Template', 'filterflex' ), 578 584 ], 579 585 'operators' => [ 580 586 '==' => __('is equal to', 'filterflex'), 581 587 '!=' => __('is not equal to', 'filterflex'), 588 'is' => __('is', 'filterflex'), 589 'is_not' => __('is not', 'filterflex'), 582 590 ], 583 591 ]; … … 920 928 foreach ($categories as $category) { $values[$category->term_id] = $category->name; } 921 929 break; 930 case 'logged_in_status': 931 $values = [ 'logged_in' => __( 'Logged In', 'filterflex' ), 'logged_out' => __( 'Logged Out', 'filterflex' ) ]; 932 break; 933 case 'specific_user': 934 $users = get_users(); 935 foreach ( $users as $user ) { 936 $values[ $user->ID ] = $user->display_name; 937 } 938 break; 939 case 'page_parent': 940 $pages = get_pages(); 941 foreach ( $pages as $page ) { 942 $values[ $page->ID ] = $page->post_title; 943 } 944 break; 922 945 default: 923 946 $values = apply_filters( "filterflex_location_values_{$param}", [] ); -
filterflex/trunk/includes/core-functions.php
r3311280 r3312220 189 189 ]; 190 190 break; 191 case 'logged_in_status': 192 $values = [ 'logged_in' => __( 'Logged In', 'filterflex' ), 'logged_out' => __( 'Logged Out', 'filterflex' ) ]; 193 break; 194 case 'specific_user': 195 $users = get_users(); 196 foreach ( $users as $user ) { 197 $values[ $user->ID ] = $user->display_name; 198 } 199 break; 200 case 'page_parent': 201 $pages = get_pages(); 202 foreach ( $pages as $page ) { 203 $values[ $page->ID ] = $page->post_title; 204 } 205 break; 191 206 default: 192 207 $values = apply_filters( 'filterflex_ajax_location_values', [], $param ); -
filterflex/trunk/readme.txt
r3311998 r3312220 4 4 Requires at least: 5.0 5 5 Tested up to: 6.8 6 Stable tag: 1. 1.26 Stable tag: 1.2.0 7 7 Requires PHP: 7.4 8 8 License: GPLv2 or later … … 56 56 == Changelog == 57 57 58 = 1.2.0 = 59 * New Location Rule: Logged-In Status 60 * New Location Rule: Specific User 61 * New Location Rule: Page Parent 62 58 63 = 1.1.2 = 59 64 * Added icons to available tags
Note: See TracChangeset
for help on using the changeset viewer.