In WordPress, Custom Post Types do not have Sticky functionality as a core feature. It is possible, I’m sure, to create it in certain casesâand I’m working on a project that requires it for archive-{customposttype}.php
templates.
I have downloaded and installed a plugin, called Sticky Custom Post Types, which I read in this article could be used along with a little bit of PHP to get_option( ‘sticky_posts’ ) and reconfigure the array of the query currently being executed.
I know that the plugin works because using if (!is_sticky()) {et cetera}
within the loop allows me to alter the output of the sticky (custom post type) posts.
I haven’t been able to successfully implement the code from the articleâthe order doesn’t seem to change at all when I place it at the top of my archive-{customposttype}.php
template, nor have I been able to make it work through several other attempts. This is probably because I’m not very adept at PHP.
Another thing I tried is creating a new query, specifying that I want only sticky posts (which worked at showing me only sticky posts); trying to store that query in a variable, then calling wp_reset_query()
, then creating another query specifying that I don’t want sticky posts, trying to store that in a variable, calling wp_reset_query()
again; and then merging the two query arrays with array_merge()
.
Unfortunately my various implementations of this either broke the page, or succeeded at doing absolutely nothing, or only showed the second query’s output… and I deleted them out of scorn.
I don’t know if I’m going about this in the right way at all, really; and I’m sure plenty of people have confronted and overcome this issue. If anyone has any advice or code snippets to help me implement this feature, it’d be greatly appreciated.
To reiterate for the sake of clarity, I’m attempting to show sticky posts at the top of my archive pages for custom post types.
I think the answer to your questions lies on the following webpage.
Its author (Tareq Hasan) faced the same problem as we do and found a solution.
https://tareq.co/2013/01/sticky-posts-in-custom-post-type-archives/
Basically, you need to install the plugin you already have (Sticky Custom Post Types) and add a filter: (I paste the code here so if the page went down, we still have it.)
The plugin is quite old but is very simple in the way it works so it still works perfectly with WordPress 4.2. Same apply to the below code snippet.
Hope it helps you as it helped me.
I’m implementing sticky posts in two custom post types, and I’ve just had a look at the plugin you mention here. It uses the sticky posts global option which WordPress uses to identify sticky posts – as far as I can see in the code, it will stick custom post types to the home page. What you need to do in your archive page is:
Get sticky posts
Use a query to get only sticky posts for your post type, then output them at the top of the page
Then modify the main query to exclude sticky posts using