Making WordPress.org

Ticket #1508: private-content.patch

File private-content.patch, 6.6 KB (added by lkwdwrd, 9 years ago)

Switches parser post types to not use wpautop on the_content

  • inc/explanations.php

     
    3737
    3838                // Setup.
    3939                add_action( 'init',                    array( $this, 'register_post_type'     ), 0   );
    40                 add_action( 'init',                    array( $this, 'remove_editor_support'  ), 100 );
    4140                add_action( 'edit_form_after_title',   array( $this, 'post_to_expl_controls'  )      );
    4241                add_action( 'edit_form_top',           array( $this, 'expl_to_post_controls'  )      );
    4342
     
    8180        }
    8281
    8382        /**
    84          * Remove 'editor' support for the function, hook, class, and method post types.
    85          *
    86          * @access public
    87          */
    88         public function remove_editor_support() {
    89                 foreach ( $this->post_types as $type ) {
    90                         remove_post_type_support( $type, 'editor' );
    91                 }
    92         }
    93 
    94         /**
    9583         * Output the Post-to-Explanation controls in the post editor for functions,
    9684         * hooks, classes, and methods.
    9785         *
  • inc/formatting.php

     
    2828                add_filter( 'the_content', array( __CLASS__, 'remove_inline_internal' ) );
    2929
    3030                add_action( 'the_content', array( __CLASS__, 'fix_unintended_markdown' ) );
     31
     32                add_action( 'init', array( __CLASS__, 'replace_autop' ) );
    3133        }
    3234
    3335        /**
     
    224226                return $text;
    225227        }
    226228
     229        /**
     230         * Replaces the normal content autop with a custom version to skip parser types.
     231         *
     232         * By running this filter replacement late on the wp hook, plugins are given ample
     233         * time to remove autop themselves. If they have removed autop, then the maybe_autop
     234         * filter is not added. There are potentially conflicting edge cases, but this
     235         * should catch at least some of them.
     236         *
     237         * Other plugins can also remove this functionality fairly easily by removing the wp
     238         * hook and stopping this process if needed.
     239         */
     240        public static function replace_autop() {
     241                if ( has_filter( 'the_content', 'wpautop' ) ) {
     242                        remove_filter( 'the_content', 'wpautop' );
     243                        add_filter( 'the_content', array( __CLASS__, 'maybe_autop' ) );
     244                }
     245        }
     246
     247        /**
     248         * Autop's all post content except for wp-parser types.
     249         *
     250         * @param  string $content The content to filter.
     251         * @return string          The filtered content, conditionally with autop run.
     252         */
     253        public static function maybe_autop( $content ) {
     254                return ( \DevHub\is_parsed_post_type( get_post_type() ) ) ? $content : wpautop( $content );
     255        }
     256
    227257} // DevHub_Formatting
    228258
    229259DevHub_Formatting::init();
  • inc/parsed-content.php

     
    3232                // Data.
    3333                add_action( 'add_meta_boxes',              array( $this, 'add_meta_boxes'        ) );
    3434                add_action( 'save_post',                   array( $this, 'save_post'             ) );
     35                add_filter( 'wp_insert_post_data',         array( $this, 'autop_post_content'    ) );
    3536
    3637                // Script and styles.
    3738                add_action( 'admin_enqueue_scripts',       array( $this, 'admin_enqueue_scripts' ) );
     
    5455        public function add_meta_boxes() {
    5556                if ( in_array( $screen = get_current_screen()->id, $this->post_types ) ) {
    5657                        remove_meta_box( 'postexcerpt', $screen, 'normal' );
    57                         add_meta_box( 'wporg_parsed_content', __( 'Parsed Content', 'wporg' ), array( $this, 'parsed_meta_box_cb' ), $screen, 'normal' );
     58                        add_meta_box( 'wporg_parsed_content', __( 'Parsed Content', 'wporg' ), array( $this, 'parsed_meta_box_cb' ), $screen, 'normal', 'high' );
    5859                }
    5960        }
    6061
     
    8788                                        <label for="excerpt"><?php _e( 'Parsed Summary:', 'wporg' ); ?></label>
    8889                                </th>
    8990                                <td>
    90                                         <div class="wporg_parsed_readonly <?php echo $ticket ? 'hidden' : ''; ?>"><?php echo apply_filters( 'the_content', $post->post_excerpt ); ?></div>
     91                                        <div class="wporg_parsed_readonly <?php echo $ticket ? 'hidden' : ''; ?>"><?php echo apply_filters( 'the_content', wpautop( $post->post_excerpt ) ); ?></div>
    9192                                        <textarea rows="2" cols="40" name="excerpt" class="wporg_parsed_content <?php echo $ticket ? '' : 'hidden'; ?>"><?php echo $post->post_excerpt; ?></textarea>
    9293                                </td>
    9394                        </tr><!-- .wporg_parsed_content -->
     
    9697                                        <label for="wporg_parsed_content"><?php _e( 'Parsed Description:', 'wporg' ); ?></label>
    9798                                </th>
    9899                                <td>
    99                                         <div class="wporg_parsed_readonly <?php echo $ticket ? 'hidden' : ''; ?>"><?php echo apply_filters( 'the_content', $content ); ?></div>
     100                                        <div class="wporg_parsed_readonly <?php echo $ticket ? 'hidden' : ''; ?>"><?php echo wp_kses_post( $content ); ?></div>
    100101                                        <div class="wporg_parsed_content <?php echo $ticket ? '' : 'hidden'; ?>">
    101102                                                <?php wp_editor( $content, 'content', array(
    102103                                                        'media_buttons' => false,
     
    156157        }
    157158
    158159        /**
     160         * Checks to see if paragraph tags are missing from parsed content and pre-runs autop if not.
     161         *
     162         * @param  array $data The array of post data to be inserted.
     163         * @return array       The updated array of post data, content run through autop if needed.
     164         */
     165        public function autop_post_content( $data ) {
     166                if ( \DevHub\is_parsed_post_type( $data['post_type'] ) && false === strpos( $data['post_content'], '<p>' ) ) {
     167                        $data['post_content'] = wpautop( $data['post_content'] );
     168                }
     169
     170                return $data;
     171        }
     172
     173        /**
    159174         * Enqueue JS and CSS on the edit screens for all four post types.
    160175         *
    161176         * @access public
  • inc/registrations.php

     
    3838                $supports = array(
    3939                        'comments',
    4040                        'custom-fields',
    41                         'editor',
    4241                        'excerpt',
    4342                        'revisions',
    4443                        'title',
  • scss/admin.scss

     
    7979/* Parsed Content Meta Box */
    8080.wporg_parsed_content {
    8181        width: 100%;
     82}
     83
     84.form-table .wporg_parsed_readonly {
     85        pre > code {
     86                display: block;
     87        }
     88
     89        p ~ p {
     90                margin-top: 20px;
     91        }
    8292}
     93 No newline at end of file
  • stylesheets/admin.css

     
    7575.wporg_parsed_content {
    7676  width: 100%;
    7777}
     78
     79.form-table .wporg_parsed_readonly pre > code {
     80  display: block;
     81}
     82.form-table .wporg_parsed_readonly p ~ p {
     83  margin-top: 20px;
     84}
     85
     86/*# sourceMappingURL=admin.css.map */