WordPress.org

Make WordPress Core

Ticket #24498: 24498rd2.2.patch

File 24498rd2.2.patch, 1.6 KB (added by chriscct7, 6 years ago)

if a post id is passed in not the object, try for the optimization as well

  • src/wp-admin/includes/template.php

     
    666666 */
    667667function meta_form( $post = null ) {
    668668        global $wpdb;
    669         $post = get_post( $post );
    670 
     669        $post = get_post( $post );     
    671670        /**
    672671         * Filter the number of custom fields to retrieve for the drop-down
    673672         * in the Custom Fields meta box.
     
    677676         * @param int $limit Number of custom fields to retrieve. Default 30.
    678677         */
    679678        $limit = apply_filters( 'postmeta_form_limit', 30 );
    680         $sql = "SELECT DISTINCT meta_key
    681                 FROM $wpdb->postmeta
    682                 WHERE meta_key NOT BETWEEN '_' AND '_z'
    683                 HAVING meta_key NOT LIKE %s
    684                 ORDER BY meta_key
    685                 LIMIT %d";
    686         $keys = $wpdb->get_col( $wpdb->prepare( $sql, $wpdb->esc_like( '_' ) . '%', $limit ) );
     679
     680        if ( $post instanceof WP_Post && isset( $post->ID ) && is_int( $post->ID ) && $post->ID > 0 ){
     681                $post_id = (int) $post->ID;
     682                $sql = "SELECT DISTINCT meta_key
     683                        FROM $wpdb->postmeta
     684                        WHERE post_id = %d AND meta_key NOT BETWEEN '_' AND '_z'
     685                        HAVING meta_key NOT LIKE %s
     686                        LIMIT %d";
     687               
     688                $keys = $wpdb->get_col( $wpdb->prepare( $sql, $post_id, $wpdb->esc_like( '_' ) . '%', $limit ) );
     689        } else {
     690                $sql = "SELECT DISTINCT meta_key
     691                        FROM $wpdb->postmeta
     692                        WHERE meta_key NOT BETWEEN '_' AND '_z'
     693                        HAVING meta_key NOT LIKE %s
     694                        LIMIT %d";
     695
     696                $keys = $wpdb->get_col( $wpdb->prepare( $sql, $wpdb->esc_like( '_' ) . '%', $limit ) );
     697        }
     698
    687699        if ( $keys ) {
    688700                natcasesort( $keys );
    689701                $meta_key_input_id = 'metakeyselect';