get_post_types() as $post_type ) { add_filter( "manage_{$post_type}_posts_columns", array( $this, 'add_order_column' ) ); add_action( "manage_{$post_type}_posts_custom_column", array( $this, 'render_order_column' ), 10, 2 ); add_filter( "manage_edit-{$post_type}_sortable_columns", array( $this, 'sortable_order_column' ) ); } add_action( 'pre_get_posts', array( $this, 'default_order_by_menu_order' ) ); add_action( 'quick_edit_custom_box', array( $this, 'quick_edit_order_field' ), 10, 2 ); add_action( 'save_post', array( $this, 'save_quick_edit_order' ) ); } /** * Get configured post types. * * @return string[] */ private function get_post_types() { $settings = EDMINBOOST_Settings::get_feature_settings( $this->get_id() ); $types = isset( $settings['post_types'] ) && is_array( $settings['post_types'] ) ? $settings['post_types'] : array( 'post', 'page' ); return $types; } /** * Add order column. * * @param array $columns Columns. * @return array */ public function add_order_column( $columns ) { $columns['edminboost_order'] = __( 'Order', 'edminboost-admin-customization' ); return $columns; } /** * Render order value. * * @param string $column Column key. * @param int $post_id Post ID. * @return void */ public function render_order_column( $column, $post_id ) { if ( 'edminboost_order' !== $column ) { return; } echo esc_html( (string) get_post_field( 'menu_order', $post_id ) ); } /** * Make order column sortable. * * @param array $columns Sortable columns. * @return array */ public function sortable_order_column( $columns ) { $columns['edminboost_order'] = 'menu_order'; return $columns; } /** * Default admin list ordering by menu_order. * * @param WP_Query $query Query. * @return void */ public function default_order_by_menu_order( $query ) { if ( ! is_admin() || ! $query->is_main_query() ) { return; } $post_type = $query->get( 'post_type' ); if ( ! $post_type || ! in_array( $post_type, $this->get_post_types(), true ) ) { return; } if ( ! $query->get( 'orderby' ) ) { $query->set( 'orderby', 'menu_order' ); $query->set( 'order', 'ASC' ); } } /** * Add menu_order field to quick edit. * * @param string $column_name Column name. * @param string $post_type Post type. * @return void */ public function quick_edit_order_field( $column_name, $post_type ) { if ( 'edminboost_order' !== $column_name || ! in_array( $post_type, $this->get_post_types(), true ) ) { return; } ?>
post_type, $this->get_post_types(), true ) ) { return; } $nonce_verified = false; if ( isset( $_POST['_inline_edit'] ) ) { $nonce_verified = wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_inline_edit'] ) ), 'inlineeditnonce' ); } elseif ( isset( $_POST['_wpnonce'] ) ) { $nonce_verified = wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce'] ) ), 'update-post_' . $post_id ); } if ( ! $nonce_verified ) { return; } $menu_order = absint( wp_unslash( $_POST['menu_order'] ) ); wp_update_post( array( 'ID' => $post_id, 'menu_order' => $menu_order, ) ); } }