Inventory_Presser_Admin_Posts_List
On This Page
Description Description
Enhances the list of vehicle posts in the dashboard.
Source Source
File: includes/admin/class-admin-posts-list.php
class Inventory_Presser_Admin_Posts_List { /** * Adds slugs to the post table columns array so the dashboard list of * vehicles is more informative than the vanilla list for posts. * * @param array $column * @return array */ public function add_columns_to_vehicles_table( $column ) { // add our columns. $column[ apply_filters( 'invp_prefix_meta_key', 'stock_number' ) ] = __( 'Stock #', 'inventory-presser' ); $column[ apply_filters( 'invp_prefix_meta_key', 'color' ) ] = __( 'Color', 'inventory-presser' ); $column[ apply_filters( 'invp_prefix_meta_key', 'odometer' ) ] = apply_filters( 'invp_odometer_word', __( 'Odometer', 'inventory-presser' ) ); $column[ apply_filters( 'invp_prefix_meta_key', 'price' ) ] = __( 'Price', 'inventory-presser' ); $column[ apply_filters( 'invp_prefix_meta_key', 'photo_count' ) ] = __( 'Photos', 'inventory-presser' ); $column[ apply_filters( 'invp_prefix_meta_key', 'thumbnail' ) ] = __( 'Thumbnail', 'inventory-presser' ); // remove the date and tags columns. unset( $column['date'] ); unset( $column['tags'] ); return $column; } /** * Handles the ORDER BY on the vehicle list (edit.php) when sorting by photo * count. * * @param array $pieces * @param WP_Query $query * @return array */ public function enable_order_by_attachment_count( $pieces, $query ) { if ( ! is_admin() ) { return $pieces; } /** * We only want our code to run in the main WP query * AND if an orderby query variable is designated. */ if ( $query->is_main_query() ) { // 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, array( 'ASC', 'DESC' ), true ) ) { $order = 'ASC'; } $orderby = $query->get( 'orderby', '' ); if ( apply_filters( 'invp_prefix_meta_key', 'photo_count' ) === $orderby || apply_filters( 'invp_prefix_meta_key', 'thumbnail' ) === $orderby ) { global $wpdb; $pieces['orderby'] = "( SELECT COUNT( ID ) FROM {$wpdb->posts} forget WHERE post_parent = {$wpdb->posts}.ID ) $order, " . $pieces['orderby']; } } return $pieces; } /** * Adds hooks * * @return void */ public function add_hooks() { add_filter( 'posts_clauses', array( $this, 'enable_order_by_attachment_count' ), 1, 2 ); // Add columns to the table that lists all the Vehicles on edit.php. add_filter( 'manage_' . INVP::POST_TYPE . '_posts_columns', array( $this, 'add_columns_to_vehicles_table' ) ); // Populate the columns we added to the Vehicles table. add_action( 'manage_' . INVP::POST_TYPE . '_posts_custom_column', array( $this, 'populate_columns_we_added_to_vehicles_table' ), 10, 2 ); // Make our added columns to the Vehicles table sortable. add_filter( 'manage_edit-' . INVP::POST_TYPE . '_sortable_columns', array( $this, 'make_vehicles_table_columns_sortable' ) ); // Implement the orderby for each of these added columns. add_filter( 'pre_get_posts', array( $this, 'vehicles_table_columns_orderbys' ) ); add_action( 'admin_enqueue_scripts', array( $this, 'scripts_and_styles' ) ); } /** * Enqueues a stylesheet for the list of vehicles in the dashboard. * * @return void */ public function scripts_and_styles() { global $pagenow, $post_type; if ( is_admin() && 'edit.php' === $pagenow && INVP::POST_TYPE === $post_type ) { $min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; wp_enqueue_style( 'invp-posts-list', plugins_url( "/css/posts-list{$min}.css", INVP_PLUGIN_FILE_PATH ), array(), INVP_PLUGIN_VERSION ); } } /** * Declares which of our custom columns on the list of posts are sortable. * * @param array $columns * @return array */ public function make_vehicles_table_columns_sortable( $columns ) { $custom = array( // meta column id => sortby value used in query. apply_filters( 'invp_prefix_meta_key', 'color' ) => apply_filters( 'invp_prefix_meta_key', 'color' ), apply_filters( 'invp_prefix_meta_key', 'odometer' ) => apply_filters( 'invp_prefix_meta_key', 'odometer' ), apply_filters( 'invp_prefix_meta_key', 'price' ) => apply_filters( 'invp_prefix_meta_key', 'price' ), apply_filters( 'invp_prefix_meta_key', 'stock_number' ) => apply_filters( 'invp_prefix_meta_key', 'stock_number' ), apply_filters( 'invp_prefix_meta_key', 'photo_count' ) => apply_filters( 'invp_prefix_meta_key', 'photo_count' ), apply_filters( 'invp_prefix_meta_key', 'thumbnail' ) => apply_filters( 'invp_prefix_meta_key', 'thumbnail' ), ); return wp_parse_args( $custom, $columns ); } /** * Populates the custom columns we added to the posts table in the * dashboard. * * @param string $column_name * @param int $post_id * @return void */ public function populate_columns_we_added_to_vehicles_table( $column_name, $post_id ) { $custom_fields = get_post_custom( $post_id ); $val = ( isset( $custom_fields[ $column_name ] ) ? $custom_fields[ $column_name ][0] : '' ); switch ( $column_name ) { case apply_filters( 'invp_prefix_meta_key', 'thumbnail' ): /* phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped */ echo edit_post_link( get_the_post_thumbnail( $post_id, 'thumbnail' ) ); break; case apply_filters( 'invp_prefix_meta_key', 'odometer' ): echo esc_html( invp_get_the_odometer( '', $post_id ) ); break; case apply_filters( 'invp_prefix_meta_key', 'photo_count' ): echo esc_html( invp_get_the_photo_count( $post_id ) ); break; case apply_filters( 'invp_prefix_meta_key', 'price' ): /** * Template tag invp_get_the_price() sometimes returns HTML and * escapes its own entities. */ /* phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped */ echo invp_get_the_price( '-', $post_id ); break; default: echo esc_html( $val ); } } /** * Change the dashboard post query to sort based on a custom column we * added. * * @param WP_Query $query * @return void */ public function vehicles_table_columns_orderbys( $query ) { if ( ! is_admin() || ! $query->is_main_query() ) { return; } $columns = array( 'color', 'odometer', 'price', 'stock_number', ); $orderby = $query->get( 'orderby' ); foreach ( $columns as $column ) { $meta_key = apply_filters( 'invp_prefix_meta_key', $column ); if ( $orderby === $meta_key ) { $query->set( 'meta_key', $meta_key ); $query->set( 'orderby', 'meta_value' . ( INVP::meta_value_is_number( $meta_key ) ? '_num' : '' ) ); return; } } } }
Expand full source codeCollapse full source codeView on Github
Methods Methods
- add_columns_to_vehicles_table — Adds slugs to the post table columns array so the dashboard list of vehicles is more informative than the vanilla list for posts.
- add_hooks — Adds hooks
- enable_order_by_attachment_count — Handles the ORDER BY on the vehicle list (edit.php) when sorting by photo count.
- make_vehicles_table_columns_sortable — Declares which of our custom columns on the list of posts are sortable.
- populate_columns_we_added_to_vehicles_table — Populates the custom columns we added to the posts table in the dashboard.
- scripts_and_styles — Enqueues a stylesheet for the list of vehicles in the dashboard.
- vehicles_table_columns_orderbys — Change the dashboard post query to sort based on a custom column we added.
Changelog Changelog
Version | Description |
---|---|
14.10.0 | Introduced. |