Making WordPress.org


Ignore:
Timestamp:
04/29/2019 07:09:55 PM (5 years ago)
Author:
coffee2code
Message:

Developer: Fix Block Editor handbook edit links.

Temporary fix while the manifest specifies a link to the raw file instead of the expected non-raw link.

Fixes #4419.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/inc/import-block-editor.php

    r8689 r8701  
    1313
    1414        add_filter( 'handbook_label', array( $this, 'change_handbook_label' ), 10, 2 );
     15        add_filter( 'get_post_metadata',               array( $this, 'fix_markdown_source_meta' ), 10, 4 );
    1516        add_filter( 'wporg_markdown_before_transform', array( $this, 'wporg_markdown_before_transform' ),  10, 2 );
    1617        add_filter( 'wporg_markdown_after_transform',  array( $this, 'wporg_markdown_after_transform' ), 10, 2 );
     
    4243
    4344        return $label;
     45    }
     46
     47    /**
     48     * Fixes fetched value of markdown_source meta field to not be the
     49     * raw.githubcontent.com domain that is currently incorrectly used
     50     * in the block editor manifest.
     51     *
     52     * @param mixed  $null      A value for the meta if its data retrieval is
     53     *                          overridden, else null.
     54     * @param int    $object_id Object ID.
     55     * @param string $meta_key  Meta key.
     56     * @param bool   $single    Whether to return only the first value of the specified $meta_key.
     57     * @return mixed
     58     */
     59    public function fix_markdown_source_meta( $null, $object_id, $meta_key, $single ) {
     60        if (
     61            // Not the markdown source meta key.
     62            $meta_key !== $this->meta_key
     63        ||
     64            // Not the block editor handbook.
     65            $this->get_post_type() !== get_post_type( $object_id )
     66        ) {
     67            return $null;
     68        }
     69
     70        $post = get_post( $object_id );
     71
     72        $meta_type = 'post';
     73
     74        /* Most of the rest of this is taken from get_metadata() */
     75
     76        $meta_cache = wp_cache_get( $object_id, $meta_type . '_meta' );
     77
     78        if ( ! $meta_cache ) {
     79            $meta_cache = update_meta_cache( $meta_type, array( $object_id ) );
     80            $meta_cache = $meta_cache[ $object_id ];
     81        }
     82
     83        if ( ! $meta_key ) {
     84            return $null;
     85        }
     86
     87        if ( isset( $meta_cache[ $meta_key ] ) ) {
     88            if ( $single ) {
     89                $value = maybe_unserialize( $meta_cache[ $meta_key ][0] );
     90                $value = str_replace( 'https://raw.githubusercontent.com/WordPress/gutenberg/', 'https://github.com/WordPress/gutenberg/edit/', $value );
     91            } else {
     92                $value = array_map( 'maybe_unserialize', $meta_cache[ $meta_key ] );
     93                $value = array_map(
     94                    function( $x ) {
     95                        return str_replace( 'https://raw.githubusercontent.com/WordPress/gutenberg/', 'https://github.com/WordPress/gutenberg/edit/', $x );
     96                    },
     97                    $value
     98                );
     99            }
     100            return $value;
     101        }
     102
     103        return $null;
    44104    }
    45105
Note: See TracChangeset for help on using the changeset viewer.