i have this custom post_type: tvr_apartment
function custom_post_apartment() {
$labels = array(
'name' => 'Apartments',
'singular_name' => 'Apartment',
'add_new' => 'Add New',
'add_new_item' => 'Add New Apartment',
'edit_item' => 'Edit Apartment',
'new_item' => 'New Apartment',
'all_items' => 'All Apartments',
'view_item' => 'View Apartment',
'search_items' => 'Search Apartments',
'not_found' => 'No apartments found',
'not_found_in_trash' => 'No apartments found in trash',
'parent_item_colon' => '',
'menu_name' => 'Apartments'
);
$args = array(
'labels' => $labels,
'public' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => null,
'taxonomies' => array('rf_apartment_feature'),
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt' )
);
register_post_type( 'tvr_apartment', $args );
}
And I would like to enable the sticky post functionality to it,
I searched here:
http://codex.wordpress.org/Function_Reference/post_type_supports
But i it seems is not the way to go, any ideas?
According to extensive and long running trac ticket #12702, custom post types don’t (and likely won’t) support sticky functionality.
It’s probably not impossible to reuse it (with unholy amount of copy paste and edge cases) for CPT in custom site, but in my opinion custom solution (probably custom fields based) would be more practical and clean approach.
Edit 2022:
You can use the plugin mentioned in @Ray’s answer now! Tested and seems to save the sticky attribute in a native way, so you can use e.g.
ignore_sticky_posts
Original Answer:
As none of the currently existing plugins for this purpose supports WP5, a simple (but not great) solution is to use a new metabox.
In your CPT’s plugin:
Then in the query
I’ve managed to get the following to work. Let me describe the technique so that you can decide whether or not to use it.
the code uses two hooks, one fired just before the “side” meta boxes
get placed, and another immediately after the “date/time” section in
the publish meta box.
the first hook (before) records the original post type, and then
switches it to “post”, wordpress thinks it’s a post and sets the
default fields specific to the “post” post type.
the second hook (after) will reset the post type back to the
original.
If anyone runs into any issues or can come up with any unforeseen use cases where this technique may fail, please do reply.
Note: the above takes care of adding the option to the UI, you would still need to check-for and work-with sticky posts in you templates/output .. something like the following (just without the plugin):
https://wordpress.stackexchange.com/a/185915/466
For those looking, I can confirm this plugin works as of WP version 5.9: https://wordpress.org/plugins/sticky-posts-switch/
I was surprised to find out that this feature is still not available.
I was hoping at least in the
WP_Query
we may get something likesticky_posts
and then you pass the IDs into that, but that wasn’t there.So I did something like this:
Of course this isn’t the best solution, it has multiple caveats, but it worked for my simple requirement where I had just one post I want to stick to the top.
Problems/Caveats: