-premium' ), ); return $columns; } /** * Modifies the query pieces to allow ordering column by cornerstone. * * @param array $pieces Array of Query pieces. * @param WP_Query $query The Query on which to apply. * * @return array */ public function order_by_cornerstone( $pieces, $query ) { if ( $query->get( 'orderby' ) !== self::CORNERSTONE_COLUMN_NAME ) { return $pieces; } return $this->build_sort_query_pieces( $pieces, $query ); } /** * Builds the pieces for a sorting query. * * @param array $pieces Array of Query pieces. * @param WP_Query $query The Query on which to apply. * * @return array Modified Query pieces. */ protected function build_sort_query_pieces( $pieces, $query ) { // We only want our code to run in the main WP query. if ( ! $query->is_main_query() ) { return $pieces; } // Get the order query variable - ASC or DESC. $order = \strtoupper( $query->get( 'order' ) ); // Make sure the order setting qualifies. If not, set default as ASC. if ( ! \in_array( $order, [ 'ASC', 'DESC' ], true ) ) { $order = 'ASC'; } $table = Model::get_table_name( 'Indexable' ); $pieces['join'] .= " LEFT JOIN $table AS yoast_indexable ON yoast_indexable.object_id = {$this->wpdb->posts}.ID AND yoast_indexable.object_type = 'post' "; $pieces['orderby'] = "yoast_indexable.is_cornerstone $order, FIELD( {$this->wpdb->posts}.post_status, 'publish' ) $order, {$pieces['orderby']}"; return $pieces; } /** * Displays the column content for the given column. * * @param string $column_name Column to display the content for. * @param int $post_id Post to display the column content for. * * @return void */ public function column_content( $column_name, $post_id ) { $indexable = $this->admin_columns_cache->get_indexable( $post_id ); // Nothing to output if we don't have the value. if ( empty( $indexable ) ) { return; } // phpcs:disable WordPress.Security.EscapeOutput -- Reason: The Icons contains safe svg. if ( $column_name === self::CORNERSTONE_COLUMN_NAME ) { if ( $indexable->is_cornerstone === true ) { echo new Checkmark_Icon_Presenter( 20 ); return; } echo new Cross_Icon_Presenter( 20 ); } // phpcs:enable } /** * Sets the sortable columns. * * @param array $columns Array with sortable columns. * * @return array The extended array with sortable columns. */ public function column_sort( $columns ) { $columns[ self::CORNERSTONE_COLUMN_NAME ] = self::CORNERSTONE_COLUMN_NAME; return $columns; } }