# Use WP Discourse para publicar posts do Wordpress no Discourse

**URL:** https://meta.discourse.org/t/use-wp-discourse-to-publish-posts-from-wordpress-to-discourse/223492
**Category:** Administrators
**Tags:** wordpress, video, how-to
**Created:** [6 Abril , 2022 13:01 UTC](https://meta.discourse.org/t/use-wp-discourse-to-publish-posts-from-wordpress-to-discourse/223492 "2022-04-06T13:01:40Z")
**Posts on this page:** 1
**Showing post:** 1

<div class="post-metadata">

### Author: ![angus](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/angus/32/341715_2.png) [@angus](https://meta.discourse.org/u/angus)
#### Post date: [6 Abril , 2022 13:01 UTC](https://meta.discourse.org/t/use-wp-discourse-to-publish-posts-from-wordpress-to-discourse/223492/1 "2022-04-06T13:01:40Z")

</div>

Você pode usar o plugin [WP Discourse](https://github.com/discourse/wp-discourse) para publicar posts do WordPress no seu Discourse, permitindo que sua comunidade discuta seu conteúdo do WordPress. Antes de configurar a publicação, você primeiro precisa [instalar o plugin WP Discourse no WordPress](https://meta.discourse.org/t/install-the-wp-discourse-plugin/223489) e [conectá-lo ao seu Discourse](https://meta.discourse.org/t/connect-wp-discourse-to-discourse/223490). Se você está pronto para começar, assista a este vídeo curto ou siga as instruções abaixo.

https://www.loom.com/embed/322aaa3165884921af0f27c106c78fff

## Próximo passo

Depois de configurar a publicação, você pode querer conferir os seguintes tópicos:

- [Usando o Discourse para comentários no WordPress](https://meta.discourse.org/t/wp-discourse-and-commenting/223493)
- [Fazer login no Discourse com o WordPress (DiscourseConnect)](https://meta.discourse.org/t/wp-discourse-and-discourseconnect/223494)

* * *

## Instruções

### Configurações de Publicação

> ⚠ Certifique-se de sempre salvar suas configurações após alterá-las. Clique no botão „Salvar Opções” na parte inferior da página.

As configurações devem ser relativamente autoexplicativas. Se tiver dificuldade em entender alguma delas, responda a este tópico para obter mais esclarecimentos.

#### Categoria Padrão do Discourse

Define a categoria padrão na qual seus posts serão publicados no Discourse. Essa configuração pode ser substituída para posts individuais na tela de criação de novos posts do WordPress.

#### Exibir Subcategorias

Indica se deseja ou não que as subcategorias do seu fórum estejam disponíveis como categorias para as quais você possa publicar a partir do WordPress. Você precisará salvar essa configuração antes que as subcategorias fiquem disponíveis no campo de entrada da opção Categoria Padrão do Discourse.

#### Forçar Atualização de Categoria

Use quando tiver adicionado novas categorias ao seu fórum e quiser que elas estejam disponíveis no seu site WordPress. Ativar essa configuração e salvar a página de opções fará uma única chamada à API do Discourse para recuperar as categorias do Discourse. Após ativá-la, na próxima vez que você navegar para a guia „Comentários”, encontrará a configuração desativada.

#### Permitir Tags

Ative esta opção se desejar adicionar tags aos tópicos do Discourse criados via WordPress.

#### Publicar como Tópicos Não Listados

Fará com que os posts publicados a partir do WordPress sejam não listados no Discourse. Se você ativar a configuração do webhook „Sincronizar Dados de Comentários”, os posts não listados ficarão visíveis quando receberem sua primeira resposta no Discourse.

#### Usar Conteúdo Completo do Post

Permite publicar posts completos do WordPress, em vez de trechos, no seu fórum Discourse. Para evitar que o botão „Mostrar Post Completo” apareça abaixo do seu post no Discourse, você deve desmarcar a configuração de site „embed truncate” no Discourse (encontrada em `seuforum.com/admin/site_settings/category/posting`).

#### Comprimento Personalizado do Trecho

Se você não selecionou a configuração „Usar Conteúdo Completo do Post”, essa configuração criará trechos desse comprimento para serem publicados no Discourse. Você também pode criar trechos manualmente ao criar um post no WordPress, adicionando o trecho à caixa de metadados „Trecho”.

#### Publicação Automática

Esta opção marca automaticamente a caixa de seleção „Publicar no Discourse” que aparece na tela de criação de novos posts para tipos de post que devem ser publicados no Discourse. A caixa de seleção ainda pode ser desmarcada ao criar o post.

#### Rastreamento Automático de Tópicos Publicados

Essa configuração está ativada por padrão. Quando ativada, o autor de um post publicado no Discourse a partir do WordPress será automaticamente „observador” do tópico (ele receberá notificações do Discourse sobre cada nova resposta).

#### Tipos de Post para Publicar

Essa configuração deve ser definida. O padrão é „post”, mas páginas e tipos de post personalizados também podem ser selecionados.

#### Excluir Posts por Tag

Se você adicionar tags do WordPress a essa configuração, qualquer post do WordPress com uma dessas tags não será publicado no Discourse.

#### Não Exibir Campo de Nome do Discourse

Isso ocultará o campo „Nome de Usuário do Discourse” nos perfis dos usuários. O Nome de Usuário do Discourse é usado para definir o autor do tópico ao publicar posts no Discourse.

#### Nome de Usuário do Discourse Editável

Isso determina se usuários não administradores podem editar seu próprio Nome de Usuário do Discourse no perfil. O Nome de Usuário do Discourse é usado para definir o autor do tópico ao publicar posts no Discourse.

#### Flags de Publicação Direta no Banco de Dados

Essa configuração é usada em certas configurações com ambientes WordPress especializados. Não use essa configuração a menos que saiba o que ela faz.

#### Logs de Publicação Verbosos

Ativar essa configuração fará com que todos os posts publicados no Discourse sejam registrados nos logs do [WP Discourse](https://github.com/discourse/wp-discourse), mesmo que tenham sido bem-sucedidos. Normalmente, apenas erros são registrados.

### Habilitar postagem via XML-RPC

XML-RPC é uma chamada de procedimento remoto frequentemente usada por softwares de blog para enviar posts ao WordPress. Aplicativos que usam esse procedimento incluem o aplicativo de blog do [wordpress.com](http://wordpress.com) [blogging app](https://apps.wordpress.com/).

Por padrão, o [WP Discourse](https://github.com/discourse/wp-discourse) não publicará no Discourse posts criados via XML-RPC. O motivo é que não há uma boa maneira de indicar se um post publicado por meio de software de blog deve ser publicado no Discourse.

Se você deseja usar software de blog para criar posts que sejam publicados diretamente no Discourse, precisa adicionar algum código ao arquivo `functions.php` do seu tema que se conecte ao filtro `wp_discourse_before_xmlrpc_publish`. O filtro `wp_discourse_before_xmlrpc_publish` passa dois argumentos para as funções que se conectam a ele. O primeiro argumento, `$publish_to_discourse`, é um valor booleano definido como `false` para desativar a publicação via XML-RPC. O segundo argumento é o objeto `post`.

Para que todos os posts via XML-RPC sejam publicados automaticamente no Discourse, você precisa escrever uma função que sempre retorne `true`. Use algo como o código a seguir:

**Aviso:** isso fará com que **todos** os posts publicados via XML-RPC sejam publicados no Discourse, incluindo posts antigos que são editados no software de blog.

```php
add_filter('wp_discourse_before_xmlrpc_publish', 'my_namespace_xmlrpc_publish', 10, 2 );
function my_namespace_xmlrpc_publish( $publish_to_discourse, $post ) {
  return true;
}

```

#### Filtrar posts via XML-RPC por tag do post

O aplicativo de blog do [wordpress.com](http://wordpress.com) permite adicionar tags aos posts. As tags podem ser usadas para controlar se um post deve ou não ser publicado no Discourse. Para publicar apenas posts que tenham a tag „discourse”, use algo como isso:

```php
add_filter('wp_discourse_before_xmlrpc_publish', 'my_namespace_xmlrpc_publish_by_tag', 10, 2 );
function my_namespace_xmlrpc_publish_by_tag( $publish_to_discourse, $post ) {
  if ( has_tag( 'discourse', $post ) ) {
    return true;
  }
  return false;
}

```

Se você deseja usar esse método, mas não quiser que a tag „discourse” apareça nos seus posts publicados, pode removê-la com um código como este:

```php
add_filter( 'term_links-post_tag', 'my_prefix_remove_discourse_tag' );
function my_prefix_remove_discourse_tag( $tags ) {
    foreach( $tags as $key => $value ) {
        if ( strpos( $value, 'discourse' ) ) {
            unset( $tags[$key] );
        }
    }

    return $tags;
}

```

#### Filtrar posts via XML-RPC por data do post

Para permitir apenas que posts publicados após uma determinada data sejam publicados no Discourse via XML-RPC, adicione algum código como este ao seu arquivo `functions.php`. Este código permitirá que todos os posts publicados após 1º de janeiro de 2016 sejam publicados no Discourse.

```php
add_filter('wp_discourse_before_xmlrpc_publish', 'my_namespace_xmlrpc_publish_by_date', 10, 2 );
function my_namespace_xmlrpc_publish_by_date( $publish_to_discourse, $post ) {
  if ( strtotime( $post->post_date ) > strtotime( '2016-01-01') ) {
    return true;
  }
  return false;
}

```

**A fazer:** adicionar um filtro ao plugin wp-discourse para permitir a publicação apenas de novos posts (em vez de posts editados) via XML-RPC.

### Filtrar as categorias disponíveis para um tipo de post personalizado

Antes de as categorias do Discourse serem exibidas na caixa de metadados „Publicar no Discourse” na página `admin/post-new` do WordPress, o filtro do WordPress `'wp_discourse_publish_categories'` é aplicado a elas. Ele recebe o array de categorias do Discourse e o post atual como argumentos. Isso pode ser usado no arquivo `functions.php` do seu tema para limitar quais categorias estão disponíveis para um determinado tipo de post.

Aqui está um exemplo que cria um tipo de post `'acme_product'` e depois retorna as categorias do Discourse „fun” e „scratch” para serem exibidas na caixa de metadados „Publicar no Discourse” para posts desse tipo.

```php
// Criar o tipo de post.
add_action( 'init', 'my_namespace_create_post_type' );
function my_namespace_create_post_type() {
  register_post_type( 'acme_product',
    array(
      'labels' => array(
      'name' => __( 'Produtos' ),
      'singular_name' => __( 'Produto' )
    ),
    'public' => true,
    'supports' => array( 'title', 'editor', 'comments', 'custom-fields' ),
    'has_archive' => true,
    'show_in_rest' => true,
    )
  );
}

// Filtrar as categorias disponíveis para o tipo de post 'acme_product'.
add_filter( 'wp_discourse_publish_categories', 'my_namespace_filter_categories', 10, 2 );
function my_namespace_filter_categories( $categories, $post ) {
   if ( 'acme_product' === get_post_type( $post ) ) {
     $output = [];
     foreach ( $categories as $category ) {
        if ( 'fun' === $category['name'] || 'scratch' === $category['name'] ) {
          $output[] = $category;
        }
     }
     return $output;
   }
   return $categories;
}

```

Se você deseja aplicar estritamente uma categoria específica a tipos de post específicos (ou seja, 1:1), deve usar `wpdc_publish_post_category` em vez disso.

```php
function wpdc_change_post_category( $category, $post_id ) {
  if ( 'acme_product' === get_post_type( $post ) ) {
       $categories = WPDiscourse\Utilities\Utilities::get_discourse_categories();
       $fun_category = array_search( 'fun' , array_column( $categories, 'name' ));
       return $fun_category;
  } else {
       return $category;
  }
}
add_filter( 'wpdc_publish_post_category', 'wpdc_change_post_category' );

```

### Exibir metadados de um tópico do Discourse conectado

Quando você tiver a publicação configurada, poderá exibir metadados sobre o tópico do Discourse usando [Personalização de Modelos](https://meta.discourse.org/t/wp-discourse-template-customization/50754).

Primeiro, você precisa decidir qual modelo deseja modificar. Se, por exemplo, você quiser mostrar apenas metadados do tópico e nenhuma resposta como comentários, deverá modificar o modelo `no_replies`.

Depois de escolher um modelo, você pode modificá-lo para adicionar metadados do tópico do Discourse. Aqui está um trecho que faz isso, com alguns comentários explicando o que o código está fazendo:

```plaintext
// Certifique-se de que o wp-discourse está presente usando seu método preferido,
// ex. https://wordpress.stackexchange.com/questions/127818/how-to-make-a-plugin-require-another-plugin

// Requer as utilidades do plugin do plugin wp-discourse
require_once ABSPATH . 'wp-content/plugins/wp-discourse/lib/plugin-utilities.php';
use WPDiscourse\Shared\PluginUtilities;

// Encapsule seu modelo de metadados do tópico em uma classe para incluir facilmente as utilidades do plugin
class DiscourseTopicMetadata {
  
  // Inclua as utilidades do plugin WordPress em sua classe
  use PluginUtilities;
  
  public function __construct() {

    // Adicione o filtro de modelo na inicialização da classe
    add_filter( 'discourse_no_replies_html', array( $this, 'topic_metadata_html' ) );
  }

  function topic_metadata_html( $input ) {
    // Obtenha o permalink do Discourse dos metadados do post
    $discourse_permalink = get_post_meta( get_the_ID(), 'discourse_permalink', true );

    // Use o permalink do Discourse para obter o JSON do tópico do Discourse, usando o método auxiliar das utilidades do plugin, que lida com a autorização para você
    $topic = $this->get_discourse_topic($discourse_permalink);
   
    // Saída do seu markup, incluindo quais metadados do tópico você deseja exibir
    ob_start();
    ?>
    
    <div id="discourse-topic-meta">
        <div class="views">
          Visualizações
          <?php echo $topic->views; ?>
        </div>
        <div class="replies">
          Respostas
          <?php echo $topic->reply_count; ?>
        </div>
    </div>
    <?php
    
    return ob_get_clean();
  }
}

// Instancie a classe para adicionar o filtro
new DiscourseTopicMetadata();

```

Para mais detalhes sobre quais metadados do tópico estão disponíveis na resposta de `get_discourse_topic`, consulte [Discourse API Docs](https://docs.discourse.org/#tag/Topics/paths/~1t~1%7Bid%7D.json/get).

---

_[View the full topic](https://meta.discourse.org/t/use-wp-discourse-to-publish-posts-from-wordpress-to-discourse/223492)._
