From e2aa6fbb4c793fdaa630856849795c8cec0b9831 Mon Sep 17 00:00:00 2001 From: Simon Costea Date: Tue, 27 Feb 2024 17:36:27 +0200 Subject: [PATCH 1/3] Apply filters only to supported post types --- .../bcc-login/includes/class-bcc-coreapi-client.php | 1 - .../bcc-login/includes/class-bcc-login-visibility.php | 10 ++++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/plugins/bcc-login/includes/class-bcc-coreapi-client.php b/plugins/bcc-login/includes/class-bcc-coreapi-client.php index 713cee2..c682fd4 100644 --- a/plugins/bcc-login/includes/class-bcc-coreapi-client.php +++ b/plugins/bcc-login/includes/class-bcc-coreapi-client.php @@ -51,7 +51,6 @@ function fetch_groups($group_uids) ) ) ); - if ( is_wp_error( $response ) ) { wp_die( $response->get_error_message() ); } diff --git a/plugins/bcc-login/includes/class-bcc-login-visibility.php b/plugins/bcc-login/includes/class-bcc-login-visibility.php index 3d245fd..99e41e1 100644 --- a/plugins/bcc-login/includes/class-bcc-login-visibility.php +++ b/plugins/bcc-login/includes/class-bcc-login-visibility.php @@ -381,7 +381,7 @@ function filter_by_selected_target_groups($query) { if (!isset($_GET['target-groups'])) return; - if (is_admin() || array_key_exists('post_type', $query->query) && $query->query['post_type'] === 'nav_menu_item') + if (is_admin() || !$this->is_a_supported_post_type($query)) return; // Get original meta query @@ -468,6 +468,9 @@ private function get_user_bcc_groups_list() { } } + if (!is_array($user_site_groups)) + return array(); + // Sort by name usort($user_site_groups, fn($a, $b) => $a->name <=> $b->name); @@ -773,7 +776,6 @@ function bcc_groups_filtered_tags() { return $html; } - function get_bcc_group_name_by_id($atts) { $attributes = shortcode_atts(array('uid' => ''), $atts); $uid = $attributes['uid']; @@ -783,6 +785,10 @@ function get_bcc_group_name_by_id($atts) { return $this->get_group_name($uid); } + function is_a_supported_post_type($query) { + return array_key_exists('post_type', $query->query) && in_array($query->query['post_type'], $this->post_types); + } + /** * Deletes all `bcc_login_visibility` values from the database. */ From 7ff5f8fe0b94ea1f3d9bb2786563e7ae340e46c7 Mon Sep 17 00:00:00 2001 From: Simon Costea Date: Tue, 27 Feb 2024 17:54:00 +0200 Subject: [PATCH 2/3] Adjust filter buttons & localization for buttons text --- plugins/bcc-login/includes/class-bcc-login-visibility.php | 4 ++-- plugins/bcc-login/src/filtering.css | 7 +++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/plugins/bcc-login/includes/class-bcc-login-visibility.php b/plugins/bcc-login/includes/class-bcc-login-visibility.php index 99e41e1..c8e812e 100644 --- a/plugins/bcc-login/includes/class-bcc-login-visibility.php +++ b/plugins/bcc-login/includes/class-bcc-login-visibility.php @@ -738,9 +738,9 @@ function bcc_groups_filtering() { $bcc_groups_selected = isset($_GET['target-groups']) ? $_GET['target-groups'] : array(); $html = '
' . - ' Filter' . + ' ' . __('Filters', 'bcc-login') . '' . '
' . - 'Close'; + '' . __('Close', 'bcc-login') . ''; $html .= '
    '; foreach ($user_site_groups as $group) : diff --git a/plugins/bcc-login/src/filtering.css b/plugins/bcc-login/src/filtering.css index fc5704a..b32e6ca 100644 --- a/plugins/bcc-login/src/filtering.css +++ b/plugins/bcc-login/src/filtering.css @@ -76,10 +76,9 @@ } .bcc-filter #close-bcc-groups { - position: absolute; - right: 16px; - top: 16px; - height: 40px; + display: block; + margin-bottom: 1rem; + font-size: 14px; } .bcc-filter #toggle-bcc-filter { From 4f0cda91d00ee16077aca3d3a87a528c0588db8e Mon Sep 17 00:00:00 2001 From: Simon Costea Date: Wed, 28 Feb 2024 13:54:34 +0200 Subject: [PATCH 3/3] Split filter hooks logic between visibility & queries --- .../includes/class-bcc-login-visibility.php | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/plugins/bcc-login/includes/class-bcc-login-visibility.php b/plugins/bcc-login/includes/class-bcc-login-visibility.php index c8e812e..0eab30d 100644 --- a/plugins/bcc-login/includes/class-bcc-login-visibility.php +++ b/plugins/bcc-login/includes/class-bcc-login-visibility.php @@ -25,7 +25,8 @@ class BCC_Login_Visibility { self::VISIBILITY_MEMBER => 'Members' ); - private $post_types = array( 'post', 'page' ); + private $visibility_post_types = array( 'post', 'page' ); + private $post_types_allowing_filtering = array( 'post', 'page' ); function __construct( BCC_Login_Settings $settings, BCC_Login_Client $client, BCC_Coreapi_Client $groups ) { $this->_settings = $settings; @@ -39,7 +40,7 @@ function __construct( BCC_Login_Settings $settings, BCC_Login_Client $client, BC add_action( 'updated_post_meta', array( $this, 'on_meta_saved' ), 10, 4 ); add_action( 'enqueue_block_editor_assets', array( $this, 'on_block_editor_assets' ) ); add_filter( 'pre_get_posts', array( $this, 'filter_pre_get_posts' ) ); - add_filter( 'pre_get_posts', array( $this, 'filter_by_selected_target_groups' ) ); + add_filter( 'pre_get_posts', array( $this, 'filter_by_queried_target_groups' ) ); add_filter( 'wp_get_nav_menu_items', array( $this, 'filter_menu_items' ), 20 ); add_filter( 'render_block', array( $this, 'on_render_block' ), 10, 2 ); @@ -61,9 +62,10 @@ function __construct( BCC_Login_Settings $settings, BCC_Login_Client $client, BC * Registers the `bcc_login_visibility` meta for posts and pages. */ function on_init() { - $this->post_types = apply_filters( 'visibility_post_types_filter', $this->post_types ); + $this->visibility_post_types = apply_filters( 'visibility_post_types_filter', $this->visibility_post_types ); + $this->post_types_allowing_filtering = apply_filters( 'post_types_for_filtering_target_groups', $this->post_types_allowing_filtering ); - foreach ( $this->post_types as $post_type ) { + foreach ( $this->visibility_post_types as $post_type ) { add_filter( "manage_{$post_type}_posts_columns", array( $this, 'add_post_audience_column' ) ); add_action( "manage_{$post_type}_posts_custom_column", array( $this, 'populate_post_audience_column'), 10, 2 ); @@ -283,8 +285,9 @@ function filter_pre_get_posts( $query ) { return $query; } - // Don't filter menu items. They are handled in 'filter_menu_items()' - if ( array_key_exists('post_type', $query->query) && $query->query['post_type'] === 'nav_menu_item' ) { + // Don't filter visibility for not supported post types + // Menu items are e.g. handled in 'filter_menu_items()' + if ( !$this->supports_target_groups_visibility($query) ) { return $query; } @@ -377,11 +380,11 @@ function filter_pre_get_posts( $query ) { * @param WP_Query $query * @return WP_Query */ - function filter_by_selected_target_groups($query) { + function filter_by_queried_target_groups($query) { if (!isset($_GET['target-groups'])) return; - if (is_admin() || !$this->is_a_supported_post_type($query)) + if (is_admin() || !$this->supports_target_groups_filtering($query)) return; // Get original meta query @@ -418,7 +421,7 @@ function filter_menu_items( $items ) { continue; } - if ( in_array( $item->object, $this->post_types, true ) ) { + if ( in_array( $item->object, $this->visibility_post_types, true ) ) { $visibility = (int) get_post_meta( $item->object_id, 'bcc_login_visibility', true ); if (!$visibility) { $visibility = $this->_settings->default_visibility; @@ -785,8 +788,12 @@ function get_bcc_group_name_by_id($atts) { return $this->get_group_name($uid); } - function is_a_supported_post_type($query) { - return array_key_exists('post_type', $query->query) && in_array($query->query['post_type'], $this->post_types); + function supports_target_groups_visibility($query) { + return array_key_exists('post_type', $query->query) && in_array($query->query['post_type'], $this->visibility_post_types); + } + + function supports_target_groups_filtering($query) { + return array_key_exists('post_type', $query->query) && in_array($query->query['post_type'], $this->post_types_allowing_filtering); } /**