WordPress.org

Make WordPress Core

Ticket #14746: 14746.3.diff

File 14746.3.diff, 3.7 KB (added by ryan, 8 years ago)

More API, untested

  • wp-includes/taxonomy.php

     
    7070                'show_ui' => false,
    7171                '_builtin' => true,
    7272        ) ) ;
     73
     74        register_taxonomy( 'post_mode', array('post', 'page', 'attachment'), array(
     75                'hierarchical' => false,
     76                'labels' => array(
     77                        'name' => '',
     78                        'singular_name' => '',
     79                ),
     80                'query_var' => false,
     81                'rewrite' => false,
     82                'show_ui' => false,
     83                '_builtin' => true,
     84                'show_in_nav_menus' => false,
     85        ) ) ;
    7386}
    7487add_action( 'init', 'create_initial_taxonomies', 0 ); // highest priority
    7588
  • wp-includes/post.php

     
    471471}
    472472
    473473/**
     474 * Retrieve the mode for a post
     475 *
     476 * @param int|object $post A post
     477 *
     478 * @return mixed The mode if successful. False if no mode is set.  WP_Error if errors.
     479 */
     480function get_post_mode( $post ) {
     481        $post = get_post($post);
     482
     483        $mode = wp_get_object_terms( $post->ID, 'post_mode', array('order' => 'none', 'fields' => 'names') );
     484
     485        if ( is_wp_error($mode) )
     486                return $mode;
     487
     488        if ( empty($mode) )
     489                return false;
     490
     491        return ( str_replace('mode-', '', $mode[0]) );
     492}
     493
     494/** Retrieve a list of registered post modes.
     495 *
     496 * @param string $post_type Limit modes to those registered for a given post type.  Optional. Default is any post type.
     497 * @return array List of registered modes
     498 */
     499function get_post_modes( $post_type = null ) {
     500        global $wp_post_modes;
     501
     502        if ( !isset($wp_post_modes) )
     503                return array();
     504
     505        if ( null === $post_type )
     506                return array_keys($wp_post_modes);
     507
     508        $modes = array();
     509        foreach ( $wp_post_modes as $mode => $types ) {
     510                if ( in_array($post_type, $types) )
     511                        $modes[] = $mode;
     512        }
     513
     514        return $modes;
     515}
     516
     517/**
     518 * Register support for a post mode.
     519 *
     520 * @param string|array $modes A mode or array of modes to register.  Valid modes are 'aside', 'chat', 'gallery', 'image', 'link', 'quote', or 'video'.
     521 * @param string|array $post_types Post types to register $modes for. Default is 'post'.
     522 * @return mixed WP_Error on error.
     523 */
     524function register_post_mode( $modes, $post_types = array('post') ) {
     525        global $wp_post_modes;
     526
     527        if ( !isset($wp_post_modes) )
     528                $wp_post_modes = array();
     529
     530        $the_modes = array('aside', 'chat', 'gallery', 'image', 'link', 'quote', 'video');
     531        // Dummy gettext calls to get translations for modes into the default catalog.
     532        // @todo gettext context.  Move to an admin function?
     533        __('Aside'); __('Chat'); __('Gallery'); __('Image'); __('Link'); __('Quote'); __('Video');
     534
     535        foreach ( (array) $modes as $mode ) {
     536                if ( !in_array($mode, $the_modes) )
     537                        return new WP_Error('invalid_mode', __('Invalid mode'));
     538                $wp_post_modes[$mode] = (array) $post_types;
     539        }
     540}
     541
     542/**
     543 * Assign a mode to a post
     544 *
     545 * @param int|object $post The post for which to assign a mode
     546 * @param string $mode  A mode to assign.  The mode must have already been registered with register_post_mode().
     547 * @return mixed WP_Error on error. Array of affected term IDs on success.
     548 */
     549function set_post_mode( $post, $mode ) {
     550        global $wp_post_modes;
     551
     552        $post = get_post($post);
     553
     554        if ( empty($post) )
     555                return new WP_Error('invalid_post', __('Invalid post'));
     556
     557        if ( !isset($wp_post_nodes) || ! in_array($mode, $wp_post_modes) )
     558                return new WP_Error('invalid_mode', __('Invalid mode'));
     559
     560        return wp_set_post_terms($post_id, array('mode-' . $mode), 'post_mode');
     561}
     562
     563/**
    474564 * Retrieve the post status based on the Post ID.
    475565 *
    476566 * If the post ID is of an attachment, then the parent post status will be given