WordPress.org

Ready to get started?Download WordPress

Forums

Developer's Custom Fields
optgroup in post query select (3 posts)

  1. ch8rt
    Member
    Posted 6 months ago #

    Fantastic plugin – if I've not said so already.

    I've got a situation where by I'm using a select input with several sets of posts from different post types as its options. Can anyone shed any light on the possibility of adding dividing optgroup labels in the select to help with readability and usability. Its currently a little unwieldy.

    The only way I can think of doing this is to do the loops for each post type separately. Not sure where to do this within the plugin, but it certainly seems like a change to the plugin rather than an addition.

    I'd be interested to hear any opinions on alternatives as well.

    http://wordpress.org/plugins/developers-custom-fields/

  2. ch8rt
    Member
    Posted 6 months ago #

    Whilst I'm still look for a better option, this is my solution thus far.

    Around line 516 in slt_cf_init.php I replaced...

    $current_category = array();
    foreach ( $posts as $post_data ) {
    	if ( $field[ 'group_options' ] ) {
    
    		$this_category = get_the_category( $post_data->ID );
    
    		if ( empty( $current_category ) || $this_category[0]->cat_ID != $current_category[0]->cat_ID ) {
    			// New category, initiate an option group
    			$field['options'][ $this_category[0]->cat_name ] = '[optgroup]';
    			$current_category = $this_category;
    		}
    	}

    ...with...

    $current_post_type = array();
    foreach ( $posts as $post_data ) {
    	if ( $field[ 'group_options' ] ) {
    
    		$this_post_type = get_post_type( $post_data->ID );
    		$this_post_type = get_post_type_object( $this_post_type );
    
    		if ( empty( $current_post_type ) || !in_array( $this_post_type->name, $current_post_type ) ) {
    			// New category, initiate an option group
    			$field['options'][ $this_post_type->name ] = '[optgroup]';
    			array_push( $current_post_type, $this_post_type->name );
    		}
    	}

    Which essentially switch the grouping from categories (which I'm not using) to post types.

    The next problem was that the posts don't come out in post-type order, rather they are mixed up. And there is no out of the box orderby parameter for post-type so I've resorted to creating a hidden meta field that stores the post-type name for each post – thus I can use the meta_value and orderby value options that are available.

    It works a treat really, and seeing Steve's notes in vicinity suggesting that this grouping feature might get expanded beyond category makes me think it'll do for now.

    But as before andy views would be most welcome, this stuff doesn't come naturally to me.

  3. Steve Taylor
    Member
    Plugin Author

    Posted 6 months ago #

    It seems you can order by post type, just by passing something like 'post_type title' to the orderby parameter. You're right, it's not listed on the Codex, but it seems to work.

    For the plugin I think it's probably best to add this in automatically rather than asking people to make sure they pass post_type to orderby if they're using multiple post types.

    I've made some changes to the development code on GitHub, could you try it out?

    https://github.com/gyrus/WordPress-Developers-Custom-Fields/archive/master.zip

    Looking at the group_options parameter, firstly the grouping is currently only really working with select fields, using the <optgroup> tag. I guess it could apply to checkboxes with sub-headings, but I'll leave that for now.

    Secondly, it's quite limited, a boolean. So I've added a new parameter, group_by_post_type. If this is set to true and multiple post types are being queried, the query should order by post type (then by the field passed in the query), and if the select field type is being used the post types should be grouped together.

    Works OK for me - would appreciate it if you could give it a whirl and let me know any issues!

Reply

You must log in to post.

About this Plugin

About this Topic

Tags

No tags yet.