﻿id,summary,reporter,owner,description,type,status,priority,milestone,component,version,severity,resolution,keywords,cc
17954,add function wp_dropdown_posttypes();,wpsmith,Travis Smith,"This function creates a dropdown select box, for all post types with the option to exclude custom post types. Features currently include ability to show option none, add an additional option (e.g., ALL), include builtin post types (defaults to public builtins, e.g. post,page,attachment), exclude custom post types, and echo and/or return.


{{{
<?php
/**
 * This function creates a dropdown select box,
 * for all custom post types with the option to include
 * pages and posts (but not the other builtins).
 *
 * Version: 1.0
 * Author: Travis Smith
 * URI: http://wpsmith.net
 **/
 
function wp_dropdown_posttypes($args) {
	$defaults = array(
		'pt_args'		=> array (
				'public'   => true,
				'_builtin' => false
			),
		'output'	=> 'objects', // names or objects, note names is the default
		'operator'	=> 'and', // 'and' or 'or'
		'selected' => 0,
		'echo' => 1,
		'show_option_none' => '',
		'show_option_no_change' => '',
		'option_none_value' => '',
		'name' => 'post_type',
		'id' => '',
		'include_builtins' => array('page','post','attachment'), //also mediapage, revision (not public), nav_menu_item (not public)
		'excludes' => '', //array of cpts to exclude
		'add_option' => ''
	); 
	
	$r = wp_parse_args( $args, $defaults );
	extract( $r, EXTR_SKIP );

	$post_types = get_post_types( $pt_args , $output , $operator ); 
	$output = '';
	
	$name = esc_attr($name);
	//print_r($args);
	if ( ! empty($post_types) ) {
		$output = ""<select name=\""$name\"" id=\""$name\"" >\n"";
		if ( $show_option_no_change )
			$output .= ""<option value=\""-1\"">$show_option_no_change</option>"";
		if ( $show_option_none )
			$output .= ""<option value=\"""" . esc_attr($option_none_value) . ""\"">$show_option_none</option>\n"";
		if ( $include_builtins ) {
			foreach ($include_builtins  as $builtin ) {
				$obj = get_post_type_object($builtin);
				if($selected == $obj->name) {	$sel = ' selected = ""selected""'; } else { $sel = ''; }
				$output .= '<option class=""post-type"" value=""'.$obj->name.'""'.$sel.'>'.$obj->label.'</option>';
			}
		}
		foreach ($post_types  as $post_type ) {
			if ($excludes) {
				$skip = false;
				foreach ($excludes  as $exclude ) {
					if ($exclude == $post_type->name) {
						$skip = true;
						break;
					}
				}
				if ($skip) break;
			}
			//print_r($post_type);
			if($selected == $post_type->name) {	$sel = ' selected = ""selected""'; } else { $sel = ''; }
			$output .= '<option class=""post-type"" value=""'.$post_type->name.'""'.$sel.'>'. $post_type->label. '</option>';
		}
		if ( $add_option ) {
			if($selected == $add_option['value']) {	$sel = ' selected = ""selected""'; } else { $sel = ''; }
			$output .= ""<option value='"".$add_option['value'].""'"".$sel."">"".$add_option['name'].""</option>\n"";
		}
		$output .= ""</select>\n"";
	}
	
	$output = apply_filters('wp_dropdown_posttypes', $output);

	//if ( $echo )
		echo $output;

	return $output;
}
?>
}}}
",enhancement,closed,normal,,Post Types,3.2,normal,wontfix,close,
