Você pode usar o plugin 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 e conectá-lo ao seu Discourse. Se você está pronto para começar, assista a este vídeo curto ou siga as instruções abaixo.
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
- Fazer login no Discourse com o WordPress (DiscourseConnect)
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, 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 blogging app.
Por padrão, o 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.
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 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:
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:
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.
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.
// 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.
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.
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:
// 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.

