Trusted WordPress tutorials, when you need them most.
Beginner’s Guide to WordPress
Copa WPB
25 Million+
Websites using our plugins
16+
Years of WordPress experience
3000+
WordPress tutorials
by experts

Como adicionar posts fixos nos arquivos de tipo de post personalizado do WordPress

Uma maneira de ajudar os visitantes a encontrar suas postagens mais importantes é colocá-las na parte superior da página, onde podem ser notadas com mais facilidade.

No entanto, embora o recurso de posts fixos do WordPress possa fazer isso com posts padrão, ele não funciona com os tipos de posts personalizados (CPTs) que você criou. Em nossa experiência, a maneira mais fácil de adicionar essa funcionalidade ao seu site WordPress é com um plug-in.

Neste artigo, mostraremos como adicionar a funcionalidade sticky post aos seus tipos de post personalizados e exibi-los nas páginas de arquivo de tipos de post personalizados.

How to Add Sticky Posts in WordPress Custom Post Type Archives

Por que tornar os posts personalizados do WordPress fixos?

Se você cria conteúdo para o seu site WordPress com um formato diferente de um post ou página padrão, provavelmente já está usando um tipo de post personalizado. Por exemplo, se você administra um site de resenhas de livros, pode ter criado um tipo de post Book Reviews.

Talvez você queira colocar seu conteúdo mais importante na parte superior do arquivo do tipo de post personalizado. Essa é uma das melhores maneiras de apresentar conteúdo detalhado e sensível ao tempo, bem como suas postagens personalizadas mais populares.

Mas, embora o WordPress ofereça um recurso de posts fixos, ele não está disponível para tipos de posts personalizados.

Vamos dar uma olhada em como adicionar um recurso de fixação às suas páginas de arquivo de tipo de post personalizado.

Adição de Sticky Posts em Custom Post Types

Primeiro, você precisará instalar e ativar o plug-in Sticky Posts – Switch. Para obter mais detalhes, consulte nosso guia passo a passo sobre como instalar um plug-in do WordPress.

Observação: embora esse plug-in não tenha sido atualizado há algum tempo, ele ainda funciona bem em nossos testes. Talvez você queira ler nosso artigo sobre o uso de plug-ins não testados com sua versão do WordPress.

Na ativação, você precisa visitar a página Settings ” Sticky Posts – Switch para configurar o plug-in. Basta marcar a caixa ao lado dos tipos de post personalizados que você deseja tornar fixos.

Para este tutorial, verificaremos o tipo de postagem “Resenhas de livros”.

Visit the Settings » Sticky Posts - Switch Page to Configure the Plugin

Depois disso, você precisa clicar no botão “Save Changes” (Salvar alterações) na parte inferior da tela.

Agora, quando você visitar a página de administração desse tipo de post personalizado, verá uma nova coluna na qual poderá tornar os posts fixos. Tudo o que você precisa fazer é clicar na estrela ao lado das postagens que deseja destacar.

Click the Star Next to the Posts You Wish to Make Sticky

Agora você tornou a postagem fixa. O problema é que o WordPress só mostra posts fixos na página inicial. A seguir, veremos como exibir posts fixos em páginas de arquivo.

Exibição de posts fixos em arquivos de tipos de post personalizados

Para exibir suas postagens fixas na parte superior da página de arquivo de postagens personalizadas, você precisa criar um novo modelo.

Para fazer isso, você precisará usar um cliente FTP ou a opção de gerenciador de arquivos no painel de controle da sua hospedagem WordPress. Se você nunca usou FTP antes, consulte nosso guia sobre como usar o FTP para fazer upload de arquivos no WordPress.

Você precisa acessar seu site usando o cliente FTP ou o gerenciador de arquivos e, em seguida, ir para a pasta /wp-content/themes/YOURTHEME/.

Por exemplo, se você usar o tema Twenty Twenty-One, precisará navegar até /wp-content/themes/twentytwentyone/.

Em seguida, você precisa criar um novo arquivo nessa pasta com um nome como archive-POSTTYPE.php.

Por exemplo, se o slug do seu tipo de post personalizado for “bookreviews”, você deverá criar um novo arquivo chamado archive-bookreviews.php.

Visit Your Theme Folder Using an FTP Client

Depois disso, você precisa localizar o arquivo archive.php na mesma pasta. Basta copiar o conteúdo do archive.php e colá-lo no novo arquivo que você criou.

A próxima etapa exige que você adicione código aos arquivos do tema. Se precisar de ajuda para adicionar código ao seu site, consulte nosso guia sobre como adicionar código personalizado no WordPress.

Quando estiver pronto, você precisará adicionar o seguinte código ao arquivo functions.php do seu tema ou a um plug-in de snippets de código como o WPCode (recomendado):

function wpb_cpt_sticky_at_top( $posts ) {
  
    // apply it on the archives only
    if ( is_main_query() && is_post_type_archive() ) {
        global $wp_query;
  
        $sticky_posts = get_option( 'sticky_posts' );
        $num_posts = count( $posts );
        $sticky_offset = 0;
  
        // Find the sticky posts
        for ($i = 0; $i < $num_posts; $i++) {
  
            // Put sticky posts at the top of the posts array
            if ( in_array( $posts[$i]->ID, $sticky_posts ) ) {
                $sticky_post = $posts[$i];
  
                // Remove sticky from current position
                array_splice( $posts, $i, 1 );
  
                // Move to front, after other stickies
                array_splice( $posts, $sticky_offset, 0, array($sticky_post) );
                $sticky_offset++;
  
                // Remove post from sticky posts array
                $offset = array_search($sticky_post->ID, $sticky_posts);
                unset( $sticky_posts[$offset] );
            }
        }
  
        // Look for more sticky posts if needed
        if ( !empty( $sticky_posts) ) {
  
            $stickies = get_posts( array(
                'post__in' => $sticky_posts,
                'post_type' => $wp_query->query_vars['post_type'],
                'post_status' => 'publish',
                'nopaging' => true
            ) );
  
            foreach ( $stickies as $sticky_post ) {
                array_splice( $posts, $sticky_offset, 0, array( $sticky_post ) );
                $sticky_offset++;
            }
        }
  
    }
  
    return $posts;
}
  
add_filter( 'the_posts', 'wpb_cpt_sticky_at_top' );
 
// Add sticky class in article title to style sticky posts differently
 
function cpt_sticky_class($classes) {
            if ( is_sticky() ) : 
            $classes[] = 'sticky';
            return $classes;
        endif; 
        return $classes;
                }
    add_filter('post_class', 'cpt_sticky_class');

Esse código move suas postagens fixas para o topo. Se o seu tema estiver usando a função post_class(), ele também adicionará uma classe ‘sticky’ para que você possa estilizar suas postagens fixas usando CSS.

Esta é a aparência do arquivo do tipo de postagem personalizada Book Reviews em nosso site de demonstração. Antes de adicionar o código, a postagem fixa estava em segundo lugar na lista.

Preview of Sticky Post on Custom Post Type Archive

Agora você pode estilizar suas postagens fixas usando a classe .sticky na folha de estilo style.css do seu tema. Aqui está um exemplo:

.sticky { 
background-color:#ededed;
background-image:url('http://example.com/wp-content/uploads/featured.png');
background-repeat:no-repeat;
background-position:right top;
}

Aqui está uma captura de tela atualizada do nosso site de demonstração.

Preview of CSS Styling of Sticky Post

Guias especializados sobre posts fixos

Agora que você já sabe como adicionar posts fixos aos arquivos de tipo de post personalizado, talvez queira ver outros guias relacionados a posts fixos no WordPress.

Esperamos que este tutorial tenha ajudado você a aprender como adicionar posts fixos nos arquivos de tipos de posts personalizados do WordPress. Talvez você também queira ver nosso guia sobre como acelerar seu site WordPress ou nossas escolhas de especialistas para os melhores plug-ins de pesquisa do WordPress.

Se você gostou deste artigo, inscreva-se em nosso canal do YouTube para receber tutoriais em vídeo sobre o WordPress. Você também pode nos encontrar no Twitter e no Facebook.

Divulgação: Nosso conteúdo é apoiado pelo leitor. Isso significa que, se você clicar em alguns de nossos links, poderemos receber uma comissão. Veja como o WPBeginner é financiado, por que isso é importante e como você pode nos apoiar. Aqui está nosso processo editorial.

Avatar

Editorial Staff at WPBeginner is a team of WordPress experts led by Syed Balkhi with over 16 years of experience in WordPress, Web Hosting, eCommerce, SEO, and Marketing. Started in 2009, WPBeginner is now the largest free WordPress resource site in the industry and is often referred to as the Wikipedia for WordPress.

O kit de ferramentas definitivo WordPress

Obtenha acesso GRATUITO ao nosso kit de ferramentas - uma coleção de produtos e recursos relacionados ao WordPress que todo profissional deve ter!

Reader Interactions

14 ComentáriosDeixe uma resposta

  1. Syed Balkhi

    Hey WPBeginner readers,
    Did you know you can win exciting prizes by commenting on WPBeginner?
    Every month, our top blog commenters will win HUGE rewards, including premium WordPress plugin licenses and cash prizes.
    You can get more details about the contest from here.
    Start sharing your thoughts below to stand a chance to win!

  2. Clare

    I got a custom post type to be “sticky” in an archive in 15 minutes following your example. Super helpful, thank you!

    • WPBeginner Support

      Glad to hear our guide was helpful! :)

      Administrador

  3. rom

    Hi,

    I’m banging my head right now….
    I’m using this plugin, it works fine, I can see it in the admin, and on the data base, I can see it update the sticky_posts in wp_options. But, when I try to use ‘post__not_in’ => get_option(‘sticky_posts’), it doesn’t filter any thing.
    So I try to var_dump(get_option(‘sticky_posts’)), and all I get is the id of the ‘normal post’, not the full list of id who I can see are in the wp_options/sticky_posts.

    Which mean if I try to use is_stiky in my loop, it only work in ‘normal’ post, not in CPT, which is logic, since get_option(‘sticky_posts’) is not working properly…. Any idea how I can fix that ? it’s driving me crazy :D

  4. Markus Froehlich

    You can use this Sticky Post Switch Plugin
    It also enables the featuere for custom post types

  5. Pat Ducat

    This works good however it makes it sticky on every page of a paginated archive. Is this how the built-in sticky functionality for standard posts work too?

  6. Aaron

    How could i set this up to work with a custom taxonomy archive page?
    I’ve tried adding ‘is_tax’ and ‘is_category’ instead of the is_post_type_archive() on line 4 of your function but it just breaks the page.

    I’m missing something obviously but can’t seem to find it.
    Any ideas?

  7. Daniel Dropik

    Thanks. Is it possible to adapt this tutorial to display sticky posts onto a specialized page template, rather than on the archives page? If so how might I accomplish this?

    • WPBeginner Support

      Daniel, yes sure it can be done in a separate page template. Simply create a custom template and follow the instructions given above.

      Administrador

  8. Shawn

    How do you do this for Custom Taxonomy.php instead of archives.

    • WPBeginner Support

      if the custom taxonomy is displaying post types with sticky posts support, then you can display it in the same manner. Instead of archive-post-type.php template, make changes in taxonomy-custom-taxonomy.php template.

      Administrador

  9. Mr.Ultra

    Thanks. This is useful.
    But if it’s possible not using a plugin to add sticky functionality to custom post types?
    Can you share the snippet?

  10. Anir

    Very informative, thanks for sharing. It helps a lot.

Deixe uma resposta

Obrigado por deixar um comentário. Lembre-se de que todos os comentários são moderados de acordo com nossos política de comentários, e seu endereço de e-mail NÃO será publicado. NÃO use palavras-chave no campo do nome. Vamos ter uma conversa pessoal e significativa.