WordPress.org

Make WordPress Core

Ticket #36666: 36666.2.diff

File 36666.2.diff, 3.5 KB (added by jmichaelward, 5 years ago)
  • theme.php

     
    18321832 * @since 3.0.0
    18331833 * @see add_theme_support()
    18341834 * @param string $feature the feature being added
     1835 * @param array $args Optional arguments
    18351836 * @return bool|void Whether feature was removed.
    18361837 */
    1837 function remove_theme_support( $feature ) {
     1838function remove_theme_support( $feature, $args = array() ) {
    18381839        // Blacklist: for internal registrations not used directly by themes.
    18391840        if ( in_array( $feature, array( 'editor-style', 'widgets', 'menus' ) ) )
    18401841                return false;
    18411842
    1842         return _remove_theme_support( $feature );
     1843        return _remove_theme_support( $feature, $args );
    18431844}
    1844 
    18451845/**
    18461846 * Do not use. Removes theme support internally, ignorant of the blacklist.
    18471847 *
     
    18531853 * @global Custom_Background   $custom_background
    18541854 *
    18551855 * @param string $feature
     1856 * @param array $args Optional arguments
     1857 * @return bool|void
    18561858 */
    1857 function _remove_theme_support( $feature ) {
     1859function _remove_theme_support( $feature, $args = array() ) {
    18581860        global $_wp_theme_features;
    18591861
     1862        // Theme support was never added for this feature.
     1863        if ( ! isset( $_wp_theme_features[ $feature ] ) ) {
     1864                return false;
     1865        }
     1866
     1867        // Partial removal of theme support, such as a particular post format or thumbnails on a specific post type.
     1868        if ( $args ) {
     1869                switch ( $feature ) {
     1870                        // Remove the passed arguments from this feature, reassigning those that remain.
     1871                        case 'html5' :
     1872                        case 'post-formats' :
     1873                                $kept_args = array_diff( $_wp_theme_features[ $feature ][0], $args );
     1874
     1875                                if ( ! empty( $kept_args ) ) {
     1876                                        $_wp_theme_features[ $feature ][0] = $kept_args;
     1877                                        return true;
     1878                                }
     1879
     1880                                return false;
     1881
     1882                        case 'post-thumbnails' :
     1883                                if ( is_bool( $_wp_theme_features['post-thumbnails'] ) ) {
     1884                                        $_wp_theme_features['post-thumbnails'] = array();
     1885                                        $_wp_theme_features['post-thumbnails'][] = get_post_types_by_support( 'thumbnail' );
     1886                                }
     1887
     1888                                $kept_args = array_diff( $_wp_theme_features[ $feature ][0], $args );
     1889
     1890                                if ( ! empty( $kept_args ) ) {
     1891                                        $_wp_theme_features[ $feature ][0] = $kept_args;
     1892                                        return true;
     1893                                }
     1894
     1895                                return false;
     1896
     1897                        default :
     1898                                return false;
     1899                }
     1900        }
     1901
     1902        // Full removal of theme support.
    18601903        switch ( $feature ) {
    18611904                case 'custom-header-uploads' :
    1862                         if ( ! isset( $_wp_theme_features['custom-header'] ) )
     1905                        if ( ! isset( $_wp_theme_features['custom-header'] ) ) {
    18631906                                return false;
     1907                        }
    18641908                        add_theme_support( 'custom-header', array( 'uploads' => false ) );
     1909
    18651910                        return; // Do not continue - custom-header-uploads no longer exists.
    1866         }
    18671911
    1868         if ( ! isset( $_wp_theme_features[ $feature ] ) )
    1869                 return false;
    1870 
    1871         switch ( $feature ) {
    18721912                case 'custom-header' :
    1873                         if ( ! did_action( 'wp_loaded' ) )
     1913                        if ( ! did_action( 'wp_loaded' ) ) {
    18741914                                break;
     1915                        }
    18751916                        $support = get_theme_support( 'custom-header' );
    1876                         if ( $support[0]['wp-head-callback'] )
     1917                        if ( $support[0]['wp-head-callback'] ) {
    18771918                                remove_action( 'wp_head', $support[0]['wp-head-callback'] );
     1919                        }
    18781920                        remove_action( 'admin_menu', array( $GLOBALS['custom_image_header'], 'init' ) );
    18791921                        unset( $GLOBALS['custom_image_header'] );
    18801922                        break;
    18811923
     1924
    18821925                case 'custom-background' :
    1883                         if ( ! did_action( 'wp_loaded' ) )
     1926                        if ( ! did_action( 'wp_loaded' ) ) {
    18841927                                break;
     1928                        }
    18851929                        $support = get_theme_support( 'custom-background' );
    18861930                        remove_action( 'wp_head', $support[0]['wp-head-callback'] );
    18871931                        remove_action( 'admin_menu', array( $GLOBALS['custom_background'], 'init' ) );