WordPress.org

Make WordPress Core

Ticket #36666: 36666.diff

File 36666.diff, 3.1 KB (added by jmichaelward, 4 years ago)
  • theme.php

     
    18161816 * @since 3.0.0
    18171817 * @see add_theme_support()
    18181818 * @param string $feature the feature being added
     1819 * @param array $args Optional arguments
    18191820 * @return bool|void Whether feature was removed.
    18201821 */
    1821 function remove_theme_support( $feature ) {
     1822function remove_theme_support( $feature, $args = array() ) {
    18221823        // Blacklist: for internal registrations not used directly by themes.
    18231824        if ( in_array( $feature, array( 'editor-style', 'widgets', 'menus' ) ) )
    18241825                return false;
    18251826
    1826         return _remove_theme_support( $feature );
     1827        return _remove_theme_support( $feature, $args );
    18271828}
    1828 
    18291829/**
    18301830 * Do not use. Removes theme support internally, ignorant of the blacklist.
    18311831 *
     
    18371837 * @global Custom_Background   $custom_background
    18381838 *
    18391839 * @param string $feature
     1840 * @param array $args Optional arguments
     1841 * @return bool|void
    18401842 */
    1841 function _remove_theme_support( $feature ) {
     1843function _remove_theme_support( $feature, $args = array() ) {
    18421844        global $_wp_theme_features;
    18431845
     1846        // Theme support was never added for this feature.
     1847        if ( ! isset( $_wp_theme_features[ $feature ] ) ) {
     1848                return false;
     1849        }
     1850
     1851        // Partial removal of theme support, such as a particular post format or thumbnails on a specific post type.
     1852        if ( $args ) {
     1853                switch ( $feature ) {
     1854                        // Remove the passed arguments from this feature, reassigning those that remain.
     1855                        case 'html5' :
     1856                        case 'post-formats' :
     1857                        case 'post-thumbnails' :
     1858                                $kept_args = array_diff( $_wp_theme_features[ $feature ][0], $args );
     1859
     1860                                if ( ! empty( $kept_args ) ) {
     1861                                        $_wp_theme_features[ $feature ][0] = $kept_args;
     1862                                        return true;
     1863                                }
     1864
     1865                                return false;
     1866
     1867                        case 'custom-logo' :
     1868                        case 'widgets' :
     1869                                break;
     1870
     1871                        default :
     1872                                return false;
     1873                }
     1874        }
     1875
     1876        // Full removal of theme support.
    18441877        switch ( $feature ) {
    18451878                case 'custom-header-uploads' :
    1846                         if ( ! isset( $_wp_theme_features['custom-header'] ) )
     1879                        if ( ! isset( $_wp_theme_features['custom-header'] ) ) {
    18471880                                return false;
     1881                        }
    18481882                        add_theme_support( 'custom-header', array( 'uploads' => false ) );
     1883
    18491884                        return; // Do not continue - custom-header-uploads no longer exists.
    1850         }
    18511885
    1852         if ( ! isset( $_wp_theme_features[ $feature ] ) )
    1853                 return false;
    1854 
    1855         switch ( $feature ) {
    18561886                case 'custom-header' :
    1857                         if ( ! did_action( 'wp_loaded' ) )
     1887                        if ( ! did_action( 'wp_loaded' ) ) {
    18581888                                break;
     1889                        }
    18591890                        $support = get_theme_support( 'custom-header' );
    1860                         if ( $support[0]['wp-head-callback'] )
     1891                        if ( $support[0]['wp-head-callback'] ) {
    18611892                                remove_action( 'wp_head', $support[0]['wp-head-callback'] );
     1893                        }
    18621894                        remove_action( 'admin_menu', array( $GLOBALS['custom_image_header'], 'init' ) );
    18631895                        unset( $GLOBALS['custom_image_header'] );
    18641896                        break;
    18651897
     1898
    18661899                case 'custom-background' :
    1867                         if ( ! did_action( 'wp_loaded' ) )
     1900                        if ( ! did_action( 'wp_loaded' ) ) {
    18681901                                break;
     1902                        }
    18691903                        $support = get_theme_support( 'custom-background' );
    18701904                        remove_action( 'wp_head', $support[0]['wp-head-callback'] );
    18711905                        remove_action( 'admin_menu', array( $GLOBALS['custom_background'], 'init' ) );