É Possível Criar Threads em Massa para Vários Posts do WordPress? Talvez SQL?

Tenho um site WP com cerca de 1.000 posts antigos. Gostaria de criar em massa threads de comentários no Discourse para todos eles. Parece que posso editar e salvar cada post, e isso criaria uma nova thread de comentários se as configurações estiverem corretas no Plugin Discourse para WP.

Mas… eu prefiro não abrir e salvar 1.000 posts.

Posso facilmente obter os IDs e títulos dos wp_post que preciso a partir da tabela wp_post. Talvez alguém saiba como criar uma instrução SQL para o Discourse que crie as novas threads com os dados necessários de wp_posts?

Você está usando o plugin WP-discourse? Se sim, suspeito que seja melhor automatizar isso no WordPress.

(Não sei como fazer exatamente o que você está pedindo.)

Sim, estou usando o plugin e ele está configurado para automatizar, mas, para que um post “automaticamente” gere um thread de comentários no Discourse, o post do WordPress precisa ser atualizado. Ou seja: aberto para edição e salvo.

De qualquer forma, não, sinto que seria muito mais fácil consultar os dados que preciso diretamente no banco de dados MySQL do WordPress e populá-los no banco de dados do Discourse com SQL. Só que não conheço nada do banco de dados do Discourse e espero conseguir encontrar alguém que conheça.

Acho que poderia escrever um script bash para o WP-CLI abrir e salvar todos os posts. lol. Talvez eu faça isso.

O problema é que seu site WordPress não teria as informações necessárias para exibir os links corretos, o número de comentários e assim por diante, se você fizer isso do lado do Discourse. Eu também não tenho uma solução para fazer isso de nenhum dos lados, mas acho que você pode querer focar seus esforços no WP.

Se as ferramentas de linha de comando do WordPress permitirem iterar pelos posts e salvá-los de forma que acione o plugin do Discourse para criar os tópicos como você deseja, com certeza é isso que eu faria. Provavelmente não é muito eficiente, mas para uma tarefa única, qualquer sobrecarga custará menos tempo do que tentar encontrar uma solução “melhor”.

Como outros já mencionaram, a maneira mais fácil de fazer isso atualmente é por meio do plugin WP Discourse. Atualizar diretamente os bancos de dados de cada instância levanta dois problemas potenciais:

  1. Exige que você entenda todos os dados e metadados armazenados em cada instância.
  2. Os dados e metadados são interdependentes, ou seja, após uma postagem ser publicada com sucesso do WordPress para o Discourse, o ID da postagem no Discourse é salvo em um campo de metadados da postagem no WordPress.

Se você já estivesse familiarizado com ambos os pontos 1 e 2, então, sim, atualizar diretamente os bancos de dados poderia ser uma boa opção. Mas, considerando que você não está, não é uma boa ideia, a menos que você queira gastar tempo aprendendo isso apenas para esse fim. Nesse sentido, você poderia contratar alguém para fazer isso por você; no entanto, recomendo que você simplesmente utilize a funcionalidade do plugin WP Discourse.

O uso do plugin WP Discourse traz o benefício adicional de já ter o registro (logging) configurado para publicações do WP Discourse, o que significa que você obterá informações detalhadas e específicas por postagem caso alguma publicação falhe.

É verdade que isso resultará em cerca de 1000 solicitações POST para o seu Discourse, já que o plugin WP Discourse envia apenas um tópico por vez. No entanto, considerando que se trata de uma migração única, você pode lidar com isso dividindo o processo em lotes e inserindo pausas (ou seja, sleep) no script. Recomendo fazer uma verificação manual após os primeiros lotes para confirmar que está funcionando como esperado.

Em relação ao próprio script, você usaria o método WPDiscourse\DiscoursePublish publish_post_after_save para cada postagem, ou seja, em um loop (com agrupamento em lotes e pausas adequadas).

Obrigado a todos!

Eu não sabia que havia mudanças no banco de dados em ambos os lados. Interessante. Estou muito familiarizado com o banco de dados do WP. Talvez até demais. Frequentemente vou direto ao banco de dados quando deveria usar outras abordagens.

Sim, sou um tolo obcecado por banco de dados. Adoro projetar e criar bancos de dados. Mas… não conheço nada do banco de dados do Discourse (ainda). Então…

Ah, sim… um registro adequado é algo maravilhoso.

Sim, excelente. Vou considerar essa a resposta correta, pois é exatamente o que eu precisava.

No entanto…

O que acabei fazendo foi usar a ferramenta WP CLI da seguinte forma:

$wp post update 396 398 402 {vários outros aqui} --tags_input=discourse

Antes disso, recuperei uma lista de IDs de linhas da tabela wp_posts que tinham post_status = ‘publish’ e post_type = post.

Entreguei essa lista ao comando wp post, e ele levou cerca de 500ms por linha usando um servidor de 4 núcleos. Se eu especificasse mais de 20 linhas ou mais, o Discourse… ???.. mas depois disso, nenhum link seria criado. Então, alimentei-o com 20 de cada vez, com um atraso de 30 segundos, e trabalhei em outros projetos.

Portanto, essa resposta é realmente uma solução improvisada, mas para mim (ainda sem a resposta do @angus), foi o caminho mais direto.