WordPress.org

Make WordPress Core

Ticket #12966: 12966.3.diff

File 12966.3.diff, 7.8 KB (added by scribu, 8 years ago)

add $operator argument

  • wp-includes/taxonomy.php

     
    6767 * @uses $wp_taxonomies
    6868 * @see register_taxonomy
    6969 *
    70  * @param array $args An array of key => value arguments to match against the taxonomies.
    71  *  Only taxonomies having attributes that match all arguments are returned.
     70 * @param array $args An array of key => value arguments to match against the taxonomy objects.
    7271 * @param string $output The type of output to return, either taxonomy 'names' or 'objects'. 'names' is the default.
     72 * @param string $operator The logical operation to perform. 'or' means only one element
     73 *  from the array needs to match; 'and' means all elements must match. The default is 'and'.
    7374 * @return array A list of taxonomy names or objects
    7475 */
    75 function get_taxonomies( $args = array(), $output = 'names' ) {
     76function get_taxonomies( $args = array(), $output = 'names', $operator = 'and' ) {
    7677        global $wp_taxonomies;
    7778
    78         $taxonomies = array();
    79         foreach ( (array) $wp_taxonomies as $taxname => $taxobj )
    80                 if ( empty($args) || array_intersect_assoc((array) $taxobj, $args) )
    81                         $taxonomies[$taxname] = $taxobj;
     79        $field = ('names' == $output) ? 'name' : false;
    8280
    83         if ( 'names' == $output )
    84                 return array_keys($taxonomies);
    85 
    86         return $taxonomies;
     81        return wp_filter_object_list($wp_taxonomies, $args, $operator, $field);
    8782}
    8883
     84
    8985/**
    9086 * Return all of the taxonomy names that are of $object_type.
    9187 *
  • wp-includes/post.php

     
    622622 * @see register_post_status
    623623 * @see get_post_status_object
    624624 *
    625  * @param array|string $args An array of key => value arguments to match against the post statuses.
    626  *  Only post statuses having attributes that match all arguments are returned.
     625 * @param array|string $args An array of key => value arguments to match against the post status objects.
    627626 * @param string $output The type of output to return, either post status 'names' or 'objects'. 'names' is the default.
    628  * @param string $operator Whether the elements in $args should be logicallly 'or'ed or 'and'ed together. 'or' means only one element from the array needs to match. 'and' means all elements must match. The default is 'or'.
     627 * @param string $operator The logical operation to perform. 'or' means only one element
     628 *  from the array needs to match; 'and' means all elements must match. The default is 'and'.
    629629 * @return array A list of post type names or objects
    630630 */
    631 function get_post_stati( $args = array(), $output = 'names', $operator = 'or' ) {
     631function get_post_stati( $args = array(), $output = 'names', $operator = 'and' ) {
    632632        global $wp_post_statuses;
    633633
    634         $do_names = false;
    635         if ( 'names' == $output )
    636                 $do_names = true;
     634        $field = ('names' == $output) ? 'name' : false;
    637635
    638         if ( 'and' == $operator )
    639                 $arg_count = count($args);
    640         else
    641                 $arg_count = 0;
    642 
    643         $post_statuses = array();
    644         foreach ( (array) $wp_post_statuses as $post_status ) {
    645                 if ( empty($args) ) {
    646                         if ( $do_names )
    647                                 $post_statuses[] = $post_status->name;
    648                         else
    649                                 $post_statuses[] = $post_status;
    650                 } elseif ( $intersect = array_intersect_assoc((array) $post_status, $args) ) {
    651                         if ( $arg_count && ( $arg_count != count($intersect) ) )
    652                                 continue;
    653                         if ( $do_names )
    654                                 $post_statuses[] = $post_status->name;
    655                         else
    656                                 $post_statuses[] = $post_status;
    657                 }
    658         }
    659 
    660         return $post_statuses;
     636        return wp_filter_object_list($wp_post_statuses, $args, $operator, $field);
    661637}
    662638
    663639/**
     
    692668 * @param mixed $the_post Optional. Post object or post ID.
    693669 * @return bool|string post type or false on failure.
    694670 */
    695 function get_post_type($the_post = false) {
     671function get_post_type( $the_post = false ) {
    696672        global $post;
    697673
    698674        if ( false === $the_post )
     
    736712 * @since 2.9.0
    737713 * @uses $wp_post_types
    738714 * @see register_post_type
    739  * @see get_post_types
    740715 *
    741  * @param array|string $args An array of key => value arguments to match against the post types.
    742  *  Only post types having attributes that match all arguments are returned.
     716 * @param array|string $args An array of key => value arguments to match against the post type objects.
    743717 * @param string $output The type of output to return, either post type 'names' or 'objects'. 'names' is the default.
     718 * @param string $operator The logical operation to perform. 'or' means only one element
     719 *  from the array needs to match; 'and' means all elements must match. The default is 'and'.
    744720 * @return array A list of post type names or objects
    745721 */
    746 function get_post_types( $args = array(), $output = 'names' ) {
     722function get_post_types( $args = array(), $output = 'names', $operator = 'and' ) {
    747723        global $wp_post_types;
    748724
    749         $do_names = false;
    750         if ( 'names' == $output )
    751                 $do_names = true;
     725        $field = ('names' == $output) ? 'name' : false;
    752726
    753         $post_types = array();
    754         foreach ( (array) $wp_post_types as $post_type ) {
    755                 if ( empty($args) ) {
    756                         if ( $do_names )
    757                                 $post_types[] = $post_type->name;
    758                         else
    759                                 $post_types[] = $post_type;
    760                 } elseif ( array_intersect_assoc((array) $post_type, $args) ) {
    761                         if ( $do_names )
    762                                 $post_types[] = $post_type->name;
    763                         else
    764                                 $post_types[] = $post_type;
    765                 }
    766         }
    767 
    768         return $post_types;
     727        return wp_filter_object_list($wp_post_types, $args, $operator, $field);
    769728}
    770729
    771730/**
  • wp-includes/functions.php

     
    29012901 * @param array|string $list
    29022902 * @return array Sanitized array of IDs
    29032903 */
    2904 function wp_parse_id_list($list) {
     2904function wp_parse_id_list( $list ) {
    29052905        if ( !is_array($list) )
    29062906                $list = preg_split('/[\s,]+/', $list);
    29072907
     
    29092909}
    29102910
    29112911/**
     2912 * Filters a list of objects, based on a set of key => value arguments
     2913 *
     2914 * @since 3.0.0
     2915 *
     2916 * @param array $list An array of objects to filter
     2917 * @param array $args An array of key => value arguments to match against each object
     2918 * @param string $operator The logical operation to perform. 'or' means only one element
     2919 *      from the array needs to match; 'and' means all elements must match. The default is 'and'.
     2920 * @param bool|string $field A field from the object to place instead of the entire object
     2921 * @return array A list of objects or object fields
     2922 */
     2923function wp_filter_object_list( $list, $args = array(), $operator = 'and', $field = false ) {
     2924        if ( !is_array($list) )
     2925                return array();
     2926
     2927        if ( empty($args) )
     2928                $args = array();
     2929
     2930        if ( empty($args) && !$field )
     2931                return $list;   // nothing to do
     2932
     2933        $count = count($args);
     2934
     2935        $filtered = array();
     2936
     2937        foreach ( $list as $key => $obj ) {
     2938                $matched = count(array_intersect_assoc(get_object_vars($obj), $args));
     2939                if ( ('and' == $operator && $matched == $count) || ('or' == $operator && $matched <= $count) )
     2940                        $filtered[$key] = $field ? $obj->$field : $obj;
     2941        }
     2942
     2943        return $filtered;
     2944}
     2945
     2946/**
    29122947 * Determines if default embed handlers should be loaded.
    29132948 *
    29142949 * Checks to make sure that the embeds library hasn't already been loaded. If
  • wp-includes/query.php

     
    22552255
    22562256                        if ( is_admin() ) {
    22572257                                // Add protected states that should show in the admin all list.
    2258                                 $admin_all_states = get_post_stati( array('protected' => true, 'show_in_admin_all_list' => true), 'names', 'and' );
     2258                                $admin_all_states = get_post_stati( array('protected' => true, 'show_in_admin_all_list' => true) );
    22592259                                foreach ( (array) $admin_all_states as $state )
    22602260                                        $where .= " OR $wpdb->posts.post_status = '$state'";
    22612261                        }