Ho un sito WP con circa 1000 vecchi post. Vorrei creare in blocco i thread di commenti su Discourse per tutti. Sembra che possa modificare e salvare ogni singolo post, il che creerebbe un nuovo thread di commenti se le impostazioni del plugin Discourse per WP sono corrette.
Però… preferirei non dover aprire e salvare 1000 post.
Posso facilmente ottenere gli ID e i titoli dei post necessari dalla tabella wp_post. Forse qualcuno sa come scrivere una query SQL per Discourse che crei i nuovi thread con i dati necessari provenienti da wp_posts?
Sì, sto usando il plugin ed è impostato su automazione, ma affinché un post generi “automaticamente” un thread di commenti in Discourse, il post di WordPress deve essere aggiornato. Esempio: aperto per la modifica e salvato.
Comunque, no, penso che sarebbe molto più semplice interrogare i dati necessari dal database MySQL di WordPress e popolarli nel database di Discourse tramite SQL. Non conosco affatto il database di Discourse e spero di trovare qualcuno che lo conosca.
Forse potrei scrivere uno script bash per WP-CLI che apra e salvi tutti i post. lol. Forse lo farò.
Il problema è che il tuo sito WordPress non avrebbe le informazioni necessarie per visualizzare i collegamenti corretti, il numero di commenti e così via, se lo fai dal lato di Discourse. Non ho una soluzione su come farlo da nessuna delle due parti, ma penso che tu possa voler concentrare i tuoi sforzi su WP.
Se gli strumenti da riga di comando di Wordpress ti permettono di iterare sui post e salvarli in modo da attivare il plugin Discourse per creare i topic come desideri, è senz’altro quello che farei. Probabilmente non è molto efficiente, ma per un lavoro una tantum, qualsiasi sovraccarico richiederà meno tempo rispetto al tentativo di trovare una soluzione “migliore”.
Come già menzionato da altri, il modo più semplice per farlo attualmente è tramite il plugin WP Discourse. Aggiornare direttamente i database di ciascuna istanza solleva due potenziali problemi:
Richiede una comprensione completa di tutti i dati e i metadati memorizzati su ciascuna istanza.
I dati e i metadati sono interdipendenti; ad esempio, dopo che un post è stato pubblicato con successo da WordPress a Discourse, l’ID del post su Discourse viene salvato in un campo dei metadati del post su WordPress.
Se fossi già familiare con entrambi i punti 1 e 2, allora sì, aggiornare direttamente i database potrebbe essere un’opzione valida. Tuttavia, dato che non lo sei, non è una buona idea a meno che tu non voglia dedicare tempo ad apprendere tutto ciò solo per questo scopo. In tal senso, potresti assumere qualcuno per farlo al posto tuo, ma ti consiglio di utilizzare semplicemente le funzionalità del plugin WP Discourse.
L’utilizzo del plugin WP Discourse offre anche il vantaggio aggiuntivo di avere già configurata la registrazione per le pubblicazioni di WP Discourse, il che significa che otterrai informazioni dettagliate e specifiche per ogni post nel caso in cui alcune pubblicazioni falliscano.
È vero che questo comporterà circa 1000 richieste POST al tuo Discourse, poiché il plugin WP Discourse invia solo un argomento alla volta. Tuttavia, considerando che si tratta di una migrazione una tantum, puoi gestire la situazione suddividendo il processo in batch e inserendo pause (ad esempio, sleep) nello script. Ti consiglio di effettuare un controllo manuale dopo i primi batch per verificare che tutto funzioni come previsto.
Per quanto riguarda lo script stesso, dovresti utilizzare il metodo WPDiscourse\DiscoursePublishpublish_post_after_save per ogni post, ovvero all’interno di un ciclo (con la corretta suddivisione in batch e le pause).
Non sapevo che ci fossero modifiche al database su entrambi i lati. Interessante. Conosco molto bene il database di WP. Forse troppo. Spesso ricorro al database per primo, quando dovrei probabilmente usare altri approcci.
Sì, sono un folle ossessionato dal database. Amo la progettazione e la creazione di database. Ma… non conosco affatto il database di Discourse (ancora). Quindi…
Ah sì… un logging corretto è una cosa meravigliosa.
Sì, eccellente. Considererò questa la risposta corretta, poiché è esattamente ciò di cui avevo bisogno.
Tuttavia…
Quello che ho finito per fare è stato utilizzare lo strumento WP cli come segue
$wp post update 396 398 402 {alcuni altri qui} --tags_input=discourse
Prima di questo, ho recuperato un elenco di ID riga dalla tabella wp_posts che avevano post_status = ‘publish’ e post_type = post
Ho passato quell’elenco al comando wp post e ha richiesto circa 500 ms per riga, utilizzando un server a 4 core. Se specificavo più di 20 righe circa, Discourse avrebbe… ???.. ma dopo di ciò non venivano più creati collegamenti. Quindi gliene ho inviati 20 alla volta con un ritardo di 30 secondi, lavorando nel frattempo su altri progetti.
Quindi, quella risposta è un vero e proprio hack, ma per me (non avendo ancora la risposta di @angus), è stata la strada più diretta.