Skip to content

Tudo para WordPress, desenvolvimento web — e não só

📝 WP-Recall: configurar a publicação de posts privados por utilizadores

📝 WP-Recall: configurar a publicação de posts privados por utilizadores

Os utilizadores preenchiam um formulário na sua conta pessoal, clicavam em «Submeter» e a candidatura acabava por aparecer no feed público do site. Juntamente com o número de telefone, morada e dados do passaporte.

Isto acontece quando um tipo de conteúdo personalizado é configurado como público. O WordPress, por predefinição, mostra tudo o que é criado com 'public' => true, quer tenha sido publicado por um administrador ou por um visitante através de um formulário no frontend no WP-Recall.

Abaixo encontra um guia passo a passo: vamos criar um tipo de conteúdo personalizado, atribuir-lhe um estado privado na publicação e configurar um redireccionamento de volta para a conta do utilizador. Sem plugins caros «tudo-em-um»: WP-Recall, MB Custom Post Type e três funções no functions.php.

💡 Visão geral rápida:

  • Instale o WP-Recall e o MB Custom Post Type, dois plugins gratuitos do catálogo do WordPress.org.
  • Crie um tipo de conteúdo personalizado através da interface do MB Custom Post Type, sem uma única linha de código.
  • Adicione três funções ao functions.php: registo do CPT com código (opcional), redireccionamento após a publicação e transição automática para o estado private.
  • Verifique: o utilizador publica uma candidatura a partir da sua conta pessoal e esta fica visível apenas para administradores e editores.

Passo 1: Instalar o WP-Recall e o MB Custom Post Type

Vai precisar de dois plugins. Ambos são gratuitos e estão disponíveis no catálogo oficial do WordPress.org.

WP-Recall cria uma conta pessoal para o utilizador: registo, perfil, mensagens privadas e, o que é importante para a nossa tarefa, a publicação de conteúdos a partir do frontend. O utilizador inicia sessão na sua conta, preenche o formulário e submete a candidatura. Nada de painel de administração, tudo acontece nas páginas do site.

MB Custom Post Types & Custom Taxonomies, uma extensão do plugin Meta Box. Fornece uma interface visual para criar tipos de conteúdo e taxonomias personalizados. No momento em que este texto foi escrito, o plugin tem mais de 10.000 instalações ativas e uma classificação de 4,7 no WordPress.org. É atualizado regularmente, a versão mais recente foi lançada em junho de 2026.

Ambos os plugins são instalados da forma padrão: Plugins → Adicionar novo, pesquise pelo nome, «Instalar» → «Ativar».

Passo 2: Criar um tipo de conteúdo personalizado através da interface do MB Custom Post Type

Após ativar o plugin, aparece um menu Meta Box → Tipos de Conteúdo no painel de administração. Clique em «Adicionar Novo» e preencha os campos:

Interface de criação de tipos de conteúdo personalizados no plugin MB Custom Post Types

Principais definições que vale a pena configurar desde já:

  • ID do tipo de conteúdo, nome de sistema em latim, por exemplo claim ou user_request. Este slug aparecerá nos URLs e no código.
  • Etiquetas, o plugin irá preencher automaticamente as etiquetas em português se introduzir o nome no campo Nome Singular. Edite manualmente o que não lhe servir.
  • Suportes, marque title, editor e custom-fields. Normalmente, não são necessárias miniaturas nem comentários para candidaturas.
  • Excluir da pesquisa, ative. Os conteúdos dos utilizadores não devem ser indexados.
  • Público, true (o formulário do WP-Recall precisa de ver o tipo de conteúdo). Trataremos da privacidade com código no passo 4.

Clique em «Guardar», o tipo de conteúdo personalizado fica registado. O mesmo resultado pode ser obtido com código (uma alternativa para quem prefere o functions.php):

1function sdstudio_register_private_cpt() {
2 $args = array(
3 'label' => 'Applications',
4 'public' => true,
5 'exclude_from_search' => true,
6 'publicly_queryable' => true,
7 'show_ui' => true,
8 'show_in_rest' => false,
9 'menu_icon' => 'dashicons-lock',
10 'capability_type' => 'post',
11 'hierarchical' => false,
12 'has_archive' => false,
13 'supports' => array( 'title', 'editor', 'author', 'custom-fields' ),
14 'rewrite' => array( 'slug' => 'claims' ),
15 );
16
17 register_post_type( 'user_claim', $args );
18}
19add_action( 'init', 'sdstudio_register_private_cpt' );

Adicione este código ao functions.php do seu tema filho ou através do plugin Code Snippets. Após guardar, vá ao painel de administração, aparecerá uma secção «Candidaturas» na barra lateral.

Passo 3: Configurar o redireccionamento após a publicação

Por predefinição, o WP-Recall mostra ao utilizador o próprio conteúdo após a submissão. Para candidaturas, isto é inútil, a pessoa precisa da sua conta pessoal, não de uma página com o formulário que acabou de submeter.

A função abaixo interceta o hook update_post_rcl (evento do WP-Recall após a publicação) e redireciona o utilizador de volta para a sua secção de candidaturas:

1/**
2 * Redirect to personal account after publishing a post via WP-Recall.
3 * Add to functions.php of the child theme.
4 */
5function sdstudio_redirect_after_rcl_publish() {
6 $user_id = get_current_user_id();
7 wp_redirect( '/account/?user=' . $user_id . '&tab=publics' );
8 exit;
9}
10add_action( 'update_post_rcl', 'sdstudio_redirect_after_rcl_publish' );

Aqui, o get_current_user_id() é chamado dentro da função, ao contrário do padrão comum com uma variável fora, isto é fiável independentemente da ordem de carregamento do ficheiro. Substitua o caminho /account/ pelo URL da sua conta pessoal na sua instalação do WP-Recall.

Verifique: inicie sessão como um utilizador de teste, publique um conteúdo a partir da conta, o navegador deve voltar para a página com a lista de candidaturas.

Passo 4: Tornar o conteúdo automaticamente privado

Este é o passo fundamental. Mesmo que o tipo de conteúdo personalizado esteja oculto da pesquisa, o conteúdo em si com post_status = 'publish' está acessível através de um link direto. E há formas suficientes de encontrar este link: desde feeds RSS até à API REST wp-json.

O hook transition_post_status é acionado em qualquer mudança de estado do conteúdo. Capturamos o momento em que o estado muda para publish e definimo-lo forçosamente como private:

1/**
2 * Automatically makes a post private upon publication.
3 * Checks that it is our custom post type — user_claim.
4 * Source: https://stackoverflow.com/questions/54508808/
5 */
6function sdstudio_force_private_status( $new_status, $old_status, $post ) {
7 if ( 'user_claim' === $post->post_type
8 && 'publish' === $new_status
9 && $old_status !== $new_status ) {
10 $post->post_status = 'private';
11 wp_update_post( $post );
12 }
13}
14add_action( 'transition_post_status', 'sdstudio_force_private_status', 10, 3 );
Configurações de tipo de conteúdo personalizado para candidaturas privadas de utilizadores

O que está a acontecer aqui, linha a linha:

  • transition_post_status, um hook do WordPress que é chamado em cada transição de um conteúdo de um estado para outro.
  • A primeira condição verifica o post_type para evitar afetar conteúdos e páginas normais.
  • A segunda condição captura o momento da publicação (publish), não da despublicação.
  • A terceira condição ($old_status !== $new_status) impede o desencadeamento repetido quando o próprio wp_update_post chama este mesmo hook.

Certifique-se de que substitui 'user_claim' pelo ID do seu tipo de conteúdo personalizado. Se não tiver a certeza do ID, verifique-o na barra de endereço ao editar o tipo de conteúdo em Meta Box → Tipos de Conteúdo.

O vídeo acima é um guia detalhado sobre a criação de tipos de conteúdo personalizados no WordPress: da teoria ao código funcional no ecrã. Se preferir um formato visual, o autor mostra cada passo com a explicação dos argumentos de register_post_type().

⁉️🤔 Perguntas frequentes

Porquê usar o estado privado se o conteúdo está excluído da pesquisa?

Excluir da pesquisa (exclude_from_search) remove o conteúdo apenas dos resultados do WP_Query no frontend. Os URLs diretos, a API REST e os feeds RSS continuam a servir o conteúdo. O estado private fecha o acesso ao nível do núcleo do WordPress, o conteúdo fica visível apenas para utilizadores com a capacidade read_private_posts (administradores e editores).

O utilizador pode alterar o estado do conteúdo após a publicação?

Através da interface padrão do WP-Recall, não. O formulário do frontend não dá acesso à seleção de estado. Mas se o utilizador, de alguma forma, obtiver acesso ao painel de administração (função de Autor ou superior), pode editar os seus conteúdos. Por isso, para sites que aceitam candidaturas, não atribua aos utilizadores uma função superior a Subscritor.

O que fazer se o WP-Recall não reconhecer o meu tipo de conteúdo personalizado?

Verifique dois parâmetros nas definições do tipo de conteúdo: public deve estar true e show_ui, true. Depois, vá às definições do WP-Recall → «Publicação» e certifique-se de que o seu tipo de conteúdo está marcado na lista de tipos permitidos. Após alterar as definições, limpe a cache dos permalinks: Definições → Permalinks → Guardar alterações.

É obrigatório usar especificamente o MB Custom Post Type?

Não. Qualquer método de registo de um tipo de conteúdo personalizado funciona: código no functions.php (como no passo 2), o plugin Custom Post Type UI ou o ACF. O MB Custom Post Type foi escolhido pela combinação de interface visual e custo zero. Se já usa o ACF Pro, crie os tipos de conteúdo lá, a lógica não muda.

O código funciona, mas os conteúdos antigos permaneceram públicos, como os oculto?

A função do passo 4 é acionada apenas no evento de publicação. Os conteúdos existentes precisam de ser processados separadamente. A forma mais segura é ir ao painel de administração, selecionar todos os conteúdos do tipo necessário e, através da Edição Rápida, mudar o estado para Privado. Para centenas de conteúdos, use o WP-CLI: wp post list --post_type=user_claim --format=ids | xargs -I {} wp post update {} --post_status=private. Antes de fazer uma atualização em massa, faça uma cópia de segurança da base de dados.

Esta abordagem funciona em dezenas de sites: os utilizadores submetem candidaturas através da sua conta pessoal e os administradores veem-nas no painel de administração. Para a configuração típica «WP-Recall + conteúdos privados», não é necessário mais nada.

Se vai aceitar dados de pagamento ou digitalizações de passaportes através do tipo de conteúdo personalizado, configure adicionalmente SSL e encriptação de campos. Mas isso é tema para um artigo separado.

O que obtivemos: lista de verificação para o lançamento

  • WP-Recall e MB Custom Post Type estão instalados e ativados.
  • O tipo de conteúdo personalizado está criado, através da interface do plugin ou com código.
  • Nas definições do WP-Recall → «Publicação», o tipo de conteúdo necessário está marcado.
  • A função de redireccionamento do passo 3 está adicionada ao functions.php.
  • A função de estado privado do passo 4 está adicionada, post_type está substituído pelo seu.
  • Os permalinks foram limpos: Definições → Permalinks → Guardar alterações.
  • Um utilizador de teste submeteu uma candidatura a partir da sua conta pessoal, o redireccionamento funciona, o conteúdo está privado.

Um único teste de submissão de candidatura poupa uma hora de depuração do «porque é que não funciona» em produção. Não salte este passo.

Comece por instalar o MB Custom Post Type, o construtor visual poupar-lhe-á o incómodo com os argumentos do register_post_type(). E se já usa outro construtor de tipos de conteúdo (ACF, CPT UI), basta aproveitar as funções dos passos 3 e 4: o redireccionamento e o estado privado funcionam independentemente do método de registo do CPT.

E que método usa para aceitar candidaturas de utilizadores nos seus sites WordPress? Partilhe nos comentários, é interessante comparar abordagens.