*/ namespace RankMath\Admin; use RankMath\Helper; use RankMath\Runner; use RankMath\Traits\Ajax; use RankMath\Traits\Hooker; use MyThemeShop\Helpers\Param; defined( 'ABSPATH' ) || exit; /** * Post_Columns class. */ class Post_Columns implements Runner { use Hooker, Ajax; /** * Register hooks. */ public function hooks() { $this->action( 'admin_init', 'init' ); $this->ajax( 'bulk_edit_columns', 'save' ); } /** * Intialize. */ public function init() { if ( ! Helper::has_cap( 'general' ) ) { return; } $this->register_post_columns(); $this->register_media_columns(); $this->action( 'admin_enqueue_scripts', 'enqueue' ); // Column Content. $this->filter( 'rank_math_title', 'get_column_title', 5 ); $this->filter( 'rank_math_description', 'get_column_description', 5 ); $this->filter( 'rank_math_seo_details', 'get_column_seo_details', 5 ); } /** * Save rows. */ public function save() { check_ajax_referer( 'rank-math-ajax-nonce', 'security' ); $this->has_cap_ajax( 'general' ); $rows = Param::post( 'rows', '', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY ); if ( ! $rows ) { $this->error( esc_html__( 'No data found.', 'rank-math' ) ); } foreach ( $rows as $post_id => $data ) { $post_id = absint( $post_id ); if ( ! $post_id ) { continue; } $this->save_row( $post_id, $data ); } $this->success( 'done' ); } /** * Save single row. * * @param int $post_id Post id. * @param array $data Post data. */ private function save_row( $post_id, $data ) { foreach ( $data as $key => $value ) { if ( ! in_array( $key, [ 'focus_keyword', 'title', 'description', 'image_alt', 'image_title' ], true ) ) { continue; } if ( 'image_title' === $key ) { wp_update_post([ 'ID' => $post_id, 'post_title' => $value, ]); continue; } if ( 'focus_keyword' === $key ) { $fk = get_post_meta( $post_id, 'rank_math_' . $key, true ); $fk = explode( ',', $fk ); $fk[0] = $value; $value = implode( ',', $fk ); } $key = 'image_alt' === $key ? '_wp_attachment_image_alt' : 'rank_math_' . $key; update_post_meta( $post_id, $key, $value ); } } /** * Register post column hooks. */ private function register_post_columns() { foreach ( Helper::get_allowed_post_types() as $post_type ) { $this->filter( "manage_{$post_type}_posts_columns", 'add_columns', 11 ); $this->action( "manage_{$post_type}_posts_custom_column", 'columns_contents', 11, 2 ); $this->filter( "manage_edit-{$post_type}_sortable_columns", 'sortable_columns', 11 ); // Also make them hidden by default. $user_id = get_current_user_id(); $columns_hidden = (array) get_user_meta( $user_id, "manageedit-{$post_type}columnshidden", true ); $maybe_hidden = get_user_meta( $user_id, "manageedit-{$post_type}columnshidden_default", true ); // Continue if default is already set. if ( $maybe_hidden ) { continue; } // Set it to hidden by default. $columns_hidden = array_unique( array_merge( $columns_hidden, [ 'rank_math_title', 'rank_math_description' ] ) ); update_user_meta( $user_id, "manageedit-{$post_type}columnshidden", $columns_hidden ); update_user_meta( $user_id, "manageedit-{$post_type}columnshidden_default", '1' ); } } /** * Register media column hooks. */ private function register_media_columns() { if ( ! Helper::get_settings( 'titles.pt_attachment_bulk_editing' ) ) { return; } $this->filter( 'manage_media_columns', 'add_media_columns', 11 ); $this->action( 'manage_media_custom_column', 'media_contents', 11, 2 ); } /** * Enqueue styles and scripts. */ public function enqueue() { $screen = get_current_screen(); $allowed_post_types = Helper::get_allowed_post_types(); $allowed_post_types[] = 'attachment'; if ( ( 'edit' !== $screen->base && 'upload' !== $screen->base ) || ! in_array( $screen->post_type, $allowed_post_types, true ) ) { return; } wp_enqueue_style( 'rank-math-post-bulk-edit', rank_math()->plugin_url() . 'assets/admin/css/post-list.css', null, rank_math()->version ); $allow_editing = Helper::get_settings( 'titles.pt_' . $screen->post_type . '_bulk_editing' ); if ( ! $allow_editing || 'readonly' === $allow_editing ) { return; } wp_enqueue_script( 'rank-math-post-bulk-edit', rank_math()->plugin_url() . 'assets/admin/js/post-list.js', null, rank_math()->version, true ); wp_localize_script( 'rank-math-post-bulk-edit', 'rankMath', [ 'security' => wp_create_nonce( 'rank-math-ajax-nonce' ), 'bulkEditTitle' => esc_attr__( 'Bulk Edit This Field', 'rank-math' ), 'buttonSaveAll' => esc_attr__( 'Save All Edits', 'rank-math' ), 'buttonCancel' => esc_attr__( 'Cancel', 'rank-math' ), ]); } /** * Add new columns for SEO title, description and focus keywords. * * @param array $columns Array of column names. * @return array */ public function add_columns( $columns ) { global $post_type; $columns['rank_math_seo_details'] = esc_html__( 'SEO Details', 'rank-math' ); if ( Helper::get_settings( 'titles.pt_' . $post_type . '_bulk_editing' ) ) { $columns['rank_math_title'] = esc_html__( 'SEO Title', 'rank-math' ); $columns['rank_math_description'] = esc_html__( 'SEO Desc', 'rank-math' ); } return $columns; } /** * Make the SEO Score column sortable. * * @param array $columns Array of column names. * @return array */ public function sortable_columns( $columns ) { $columns['rank_math_seo_details'] = 'rank_math_seo_score'; return $columns; } /** * Add new columns for Media Alt & Title. * * @param array $columns An array of column names. * @return array */ public function add_media_columns( $columns ) { $columns['rank_math_image_title'] = esc_html__( 'Title', 'rank-math' ); $columns['rank_math_image_alt'] = esc_html__( 'Alternative Text', 'rank-math' ); return $columns; } /** * Add content for custom column. * * @param string $column_name The name of the column to display. * @param int $post_id The current post ID. */ public function columns_contents( $column_name, $post_id ) { do_action( $column_name, $post_id ); } /** * Add content for title column. * * @param int $post_id The current post ID. */ public function get_column_title( $post_id ) { $title = get_post_meta( $post_id, 'rank_math_title', true ); $post_type = get_post_type( $post_id ); if ( ! $title ) { $title = Helper::get_settings( "titles.pt_{$post_type}_title" ); } ?>
get_seo_score_class( $score ); $score = $score . ' / 100'; if ( ! metadata_exists( 'post', $post_id, 'rank_math_seo_score' ) ) { $score = __( 'Update your post', 'rank-math' ); $class = 'no-score'; } ?>