¿Es posible crear hilos masivamente para muchas publicaciones de WordPress? ¿Quizás SQL?

Tengo un sitio de WordPress con unas 1000 publicaciones antiguas. Me gustaría crear masivamente hilos de comentarios en Discourse para todas ellas. Parece que puedo editar y guardar cada publicación, y esto crearía un nuevo hilo de comentarios si la configuración del plugin de Discourse para WordPress es correcta.

Pero… prefiero no abrir y guardar 1000 publicaciones.

Puedo obtener fácilmente los IDs y títulos de wp_post que necesito desde la tabla wp_post. ¿Quizás alguien sepa cómo crear una sentencia SQL para Discourse que genere los nuevos hilos con los datos necesarios de wp_posts?

3 Me gusta

¿Estás utilizando el plugin WP-discourse? Si es así, sospecho que te convendrá más automatizar esto en WordPress.

(No sé cómo hacer exactamente lo que estás preguntando.)

1 me gusta

Sí, estoy usando el plugin y está configurado para automatizar, pero para que una publicación genere “automáticamente” un hilo de comentarios en Discourse, la publicación de WordPress necesita ser actualizada. Es decir: abrirla para editarla y guardarla.

De todos modos, no, creo que sería mucho más fácil consultar los datos que necesito directamente en la base de datos MySQL de WordPress y poblarlos en la base de datos de Discourse mediante SQL. Simplemente no conozco nada la base de datos de Discourse y espero poder encontrar a alguien que sí la conozca.

Supongo que podría escribir un script de bash para la CLI de WordPress que abra y guarde todas las publicaciones. Jaja. Quizás lo haga.

1 me gusta

El problema es que tu sitio de WordPress no tendría la información necesaria para mostrar los enlaces adecuados, la cantidad de comentarios y demás, si lo haces desde el lado de Discourse. No tengo una solución para hacerlo en ninguno de los dos lados, pero creo que deberías centrar tus esfuerzos en WordPress.

2 Me gusta

Si las herramientas de línea de comandos de WordPress te permiten iterar sobre los posts y guardarlos de manera que active el plugin de Discourse para crear los temas como deseas, eso es definitivamente lo que yo haría. Probablemente no sea muy eficiente, pero para un trabajo de una sola vez, cualquier sobrecarga costará menos tiempo que intentar encontrar una solución “mejor”.

3 Me gusta

Como otros han mencionado, la forma más sencilla de hacerlo actualmente es mediante el plugin WP Discourse. Actualizar directamente las bases de datos de cada instancia plantea dos problemas potenciales:

  1. Requiere que comprendas todos los datos y metadatos almacenados en cada instancia.
  2. Los datos y metadatos son interdependientes; es decir, después de que una publicación se publica correctamente desde WordPress a Discourse, el ID de la publicación en Discourse se guarda en un campo de metadatos de la publicación en WordPress.

Si ya estuvieras familiarizado con ambos puntos, entonces sí, actualizar directamente las bases de datos podría ser una buena opción; pero, dado que no lo estás, no es una buena idea a menos que quieras dedicar tiempo a aprenderlo solo para este propósito. En ese sentido, podrías contratar a alguien para que lo haga por ti; sin embargo, te recomendaría que simplemente utilices la funcionalidad del plugin WP Discourse.

El uso del plugin WP Discourse tiene la ventaja adicional de que el registro ya está configurado para la publicación mediante WP Discourse, lo que significa que obtendrás información detallada y específica de cada publicación si alguna de las publicaciones falla.

Es cierto que esto implicará unas 1000 solicitudes POST a tu Discourse, ya que el plugin WP Discourse solo publica un tema a la vez; sin embargo, considerando que se trata de una migración única, puedes manejarlo dividiéndolo en lotes e introduciendo pausas (es decir, sleep) en el script. Te recomendaría realizar una verificación manual después de los primeros lotes para asegurarte de que funcione como esperas.

En cuanto al script en sí, deberías utilizar el método WPDiscourse\\DiscoursePublish publish_post_after_save para cada publicación, es decir, en un bucle (con el agrupamiento en lotes y las pausas adecuados).

7 Me gusta

¡Gracias a todos!

No me había dado cuenta de que había cambios en la base de datos en ambos lados. Interesante. Estoy muy familiarizado con la base de datos de WP. Demasiado, supongo. A menudo acudo primero a la base de datos cuando probablemente debería usar otros enfoques.

Sí, soy un tonto obsesionado con las bases de datos. Me encanta el diseño y la creación de bases de datos. Pero… no estoy familiarizado en absoluto (todavía) con la base de datos de Discourse. Así que…

Ah, sí… un registro adecuado es algo maravilloso.

Sí, excelente. Consideraré esta la respuesta correcta, ya que es exactamente lo que necesitaba.

Sin embargo…

Lo que finalmente hice fue usar la herramienta de WP cli de la siguiente manera:

$wp post update 396 398 402 {varias más aquí} --tags_input=discourse

Antes de esto, obtuve una lista de IDs de fila de la tabla wp_posts que tenían post_status = ‘publish’ y post_type = post.

Le di esa lista al comando wp post y tardó unos 500 ms por fila usando un servidor de 4 núcleos. Si especificaba más de 20 filas o así, Discourse… ???.. pero después de eso no se crearían más enlaces. Así que le alimenté 20 a la vez con un retraso de 30 segundos y trabajé en otros proyectos.

Así que esa respuesta es un verdadero truco, pero para mí (sin tener aún la respuesta de @angus), fue la ruta más directa.

5 Me gusta

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.