Selezionare automaticamente la categoria dell'argomento in base alla categoria del post?

Ho intenzionalmente le stesse identiche categorie sia in WordPress che in Discourse, ma non c’è opzione per assegnare la categoria del post come categoria dell’argomento, quindi devo impostarla manualmente ogni volta che pubblico.

Sembra una funzionalità ovvia, quindi forse mi sfugge qualcosa?

Sto usando il plugin WP Discourse.

1 Mi Piace

Puoi farlo con il filtro wpdc_publish_post_category. Sarebbe qualcosa del tipo (codice di esempio non testato, ma potrebbe funzionare subito):

function wpdc_change_post_category( $category, $post_id ) {
  $wp_category_name = get_the_category( $post_id )[0]->name;
  $discourse_categories = WPDiscourse\Utilities\Utilities::get_discourse_categories();
  $discourse_category = array_search( $wp_category_name, array_column( $discourse_categories, 'name' ));
  return $discourse_category['id'];
}
add_filter( 'wpdc_publish_post_category', 'wpdc_change_post_category' );

Quindi, indipendentemente dalla categoria selezionata, il post verrebbe sempre pubblicato in una categoria con un nome che corrisponde al nome della categoria del post di Wordpress. Assicurati che quei nomi corrispondano esattamente, altrimenti non funzionerà.

Supportare ufficialmente questa funzionalità come tale sarebbe irto di difficoltà poiché si baserebbe sugli utenti che mantengono elenchi di categorie con nomi esattamente uguali, presupporrebbe che i modelli di categoria tra le due piattaforme rimangano gli stessi e dovrebbe affrontare il fatto che il sistema di tassonomia di Wordpress è intrinsecamente mutabile (cioè, non sarà lo stesso su ogni installazione di Wordpress su cui è installato il plugin).

1 Mi Piace

Grazie!

Puoi farlo con il filtro wpdc_change_post_category. Sarebbe qualcosa del tipo (codice di esempio non testato, ma potrebbe funzionare subito):

Intendi wpdc_publish_post_category? wpdc_change_post_category non sembra esistere realmente. È solo un nome di funzione personalizzato che può essere qualsiasi cosa, corretto?

$wp_category_name = get_the_category( $post_id )[0]->name manca il ; di chiusura.

Dopo di che, ottengo un errore troppi pochi argomenti relativo a function wpdc_change_post_category( $category, $post_id ) {. Potrebbe essere perché $category non è definito? Potrei testare di più in seguito.

Per quanto riguarda l’aggiunta di questa come funzionalità ufficiale, non penso che sarebbe un grosso problema, considerando due opzioni:

  1. L’opzione Force Category Update esiste già. Questa potrebbe essere estesa a una funzionalità che forza le categorie di Discourse/WordPress a essere sempre sincronizzate.

o

  1. Forse non hanno bisogno di essere sincronizzate affatto, ma piuttosto se una categoria non esiste in Discourse, viene semplicemente creata.
2 Mi Piace

Sì, è corretto, mi scuso per l’errore di battitura.

C’è una grande differenza tra leggere un elenco di categorie tramite l’API (forza aggiornamento categorie) e sincronizzare automaticamente le categorie stesse tra Wordpress e Discourse.

1 Mi Piace

Funzionerebbe un codice simile per mappare le wp_categories sui discourse_tags?

Sto vivendo la vita “le categorie sono muri” :smiling_face_with_sunglasses:

Sfortunatamente, al momento non esiste un filtro equivalente wpdc_publish_post_tags.

Cosa stai cercando di ottenere esattamente con i tag?

Ho un tipo di post personalizzato di policies con una tassonomia personalizzata gerarchica policy_categories su due livelli (genitore/figlio). Ci sono circa 45 categorie figlio.

Ho configurato WP Discourse per pubblicare in una categoria Discourse di policies, ma piuttosto che creare un enorme set di sottocategorie (avendo letto in questo forum) sembra meglio creare le sottocategorie come tag.

Avrò vari utenti WordPress che pubblicheranno policies con diversi livelli di esperienza (se fossi solo io a farlo, li taggherei ogni volta). Quindi, per risparmiare un passaggio in più e probabilmente un bel po’ di problemi di supporto, idealmente ci sarebbe un filtro per far sì che WP Discourse prenda le Categorie di WordPress e aggiunga i Tag Discourse corrispondenti.

Sarei felice di assicurarmi che le categorie e i tag corrispondano a ID/slug, ecc., poiché manterrò qualsiasi aggiornamento di questi come amministratore.

Grazie per il tuo aiuto in merito.

Forse questo è qualcosa per Marketplace?

Sebbene non esista un filtro dedicato per i tag, c’è un filtro generale che puoi utilizzare: wpdc_publish_body. Nel tuo caso, apparirà così

add_filter(  'wpdc_publish_body', function( $body, $remote_post_type, $post_id ) {
   // codice per ottenere la categoria di policy del post
   if ( // se c'è una policy del post ) {
      $policy_tags = // mappa la categoria di policy del post ai tag appropriati
      $body['tags'] = $policy_tags
   }
   return $body;
}, 10, 3);