is_filter_active() ) { add_action( 'restrict_manage_posts', array( $this, 'render_hidden_input' ) ); } if ( $this->is_filter_active() && $this->get_explanation() !== null ) { add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_explanation_assets' ) ); } } /** * Adds the filter links to the view_edit screens to give the user a filter link. * * @return void */ public function add_filter_links() { foreach ( $this->get_post_types() as $post_type ) { add_filter( 'views_edit-' . $post_type, array( $this, 'add_filter_link' ) ); } } /** * Enqueues the necessary assets to display a filter explanation. * * @return void */ public function enqueue_explanation_assets() { $asset_manager = new WPSEO_Admin_Asset_Manager(); $asset_manager->enqueue_script( 'filter-explanation' ); $asset_manager->enqueue_style( 'filter-explanation' ); wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'filter-explanation', 'yoastFilterExplanation', array( 'text' => $this->get_explanation() ) ); } /** * Adds a filter link to the views. * * @param array $views Array with the views. * * @return array Array of views including the added view. */ public function add_filter_link( array $views ) { $views[ 'yoast_' . $this->get_query_val() ] = sprintf( '%3$s (%4$s)', esc_url( $this->get_filter_url() ), ( $this->is_filter_active() ) ? ' class="current" aria-current="page"' : '', $this->get_label(), $this->get_post_total() ); return $views; } /** * Returns a text explaining this filter. Null if no explanation is necessary. * * @return string|null The explanation or null. */ protected function get_explanation() { return null; } /** * Renders a hidden input to preserve this filter's state when using sub-filters. * * @return void */ public function render_hidden_input() { echo ''; } /** * Returns an url to edit.php with post_type and this filter as the query arguments. * * @return string The url to activate this filter. */ protected function get_filter_url() { $query_args = array( self::FILTER_QUERY_ARG => $this->get_query_val(), 'post_type' => $this->get_current_post_type(), ); return add_query_arg( $query_args, 'edit.php' ); } /** * Returns true when the filter is active. * * @return bool Whether or not the filter is active. */ protected function is_filter_active() { return ( $this->is_supported_post_type( $this->get_current_post_type() ) && filter_input( INPUT_GET, self::FILTER_QUERY_ARG ) === $this->get_query_val() ); } /** * Returns the current post type. * * @return string The current post type. */ protected function get_current_post_type() { $filter_options = array( 'options' => array( 'default' => 'post' ), ); return filter_input( INPUT_GET, 'post_type', FILTER_DEFAULT, $filter_options ); } /** * Returns the post types to which this filter should be added. * * @return array The post types to which this filter should be added. */ protected function get_post_types() { return WPSEO_Post_Type::get_accessible_post_types(); } /** * Checks if the post type is supported. * * @param string $post_type Post type to check against. * * @return bool True when it is supported. */ protected function is_supported_post_type( $post_type ) { return in_array( $post_type, $this->get_post_types(), true ); } }