Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

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.

share|improve this question
    
CPT's don't support sticky posts nor do archive pages so you have 2 things against you, sometimes it's just better to create a taxonomy. –  Wyck Mar 15 '13 at 6:28
    
I'm using custom post types because each post type has its own unique set of taxonomies. –  aminimalanimal Mar 15 '13 at 9:27
add comment

1 Answer 1

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

$sticky = get_option( 'sticky_posts' );

Use a query to get only sticky posts for your post type, then output them at the top of the page

$args = array(
    'posts_type' => [your custom post type slug],
    'post__in'  => $sticky
);
$sticky_query = new WP_Query( $args );
while( $sticky_query->have_posts() ) {
    $sticky_query->next_post();
    echo '<li>' . get_the_title( $sticky_query->post->ID ) . '</li>';
}
wp_reset_postdata();

Then modify the main query to exclude sticky posts using

query_posts(array('post__not_in' => $sticky))
share|improve this answer
1  
query_posts is pretty much always a bad idea. Can you rewrite this the use a filter on pre_get_posts? –  s_ha_dum Jun 17 '13 at 13:58
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.