Automatisch Thema-Kategorie basierend auf Post-Kategorie auswählen?

Ich habe absichtlich genau die gleichen Kategorien in WordPress und Discourse, aber es gibt keine Option, die Beitrags-Kategorie als Thema-Kategorie zuzuweisen, daher muss ich sie jedes Mal manuell festlegen, nachdem ich veröffentlicht habe.

Das scheint eine offensichtliche Funktion zu sein, vielleicht übersehe ich etwas?

Ich benutze das WP Discourse Plugin.

1 „Gefällt mir“

Sie können dies mit dem wpdc_publish_post_category-Filter tun. Es wäre etwas wie (ungetesteter Beispielcode, könnte aber sofort funktionieren):

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' );

Dann, egal welche Kategorie Sie ausgewählt haben, würde der Beitrag immer in einer Kategorie mit einem Namen veröffentlicht, der mit dem Namen der Wordpress-Beitrags kategorie übereinstimmt. Stellen Sie jedoch sicher, dass diese Namen exakt übereinstimmen, sonst funktioniert es nicht.

Die offizielle Unterstützung dieser Funktion wäre mit Schwierigkeiten verbunden, da sie darauf beruhen würde, dass Benutzer Listen von Kategorien mit exakt denselben Namen pflegen, davon ausgehen, dass die Kategorienmodelle zwischen den beiden Plattformen gleich bleiben und damit umgehen, dass das Taxonomiesystem von Wordpress von Natur aus veränderlich ist (d. h. es wird nicht auf jeder Wordpress-Installation, auf der das Plugin installiert ist, gleich sein).

1 „Gefällt mir“

Danke!

Sie können dies mit dem wpdc_change_post_category-Filter tun. Es wäre so etwas wie (ungetesteter Beispielcode, der aber sofort funktionieren könnte):

Sie meinen wahrscheinlich wpdc_publish_post_category? wpdc_change_post_category scheint nicht wirklich zu existieren. Es ist nur ein benutzerdefinierter Funktionsname, der alles sein kann, richtig?

$wp_category_name = get_the_category( $post_id )[0]->name fehlt das schließende ;.

Danach erhalte ich einen zu wenige Argumente-Fehler bezüglich function wpdc_change_post_category( $category, $post_id ) {. Es könnte daran liegen, dass $category undefiniert ist? Ich werde später mehr testen.

Was das Hinzufügen als offizielles Feature angeht, glaube ich nicht, dass es eine so große Sache wäre, wenn man zwei Optionen bedenkt:

  1. Die Option Kategorie-Update erzwingen existiert bereits. Diese könnte zu einer Funktion erweitert werden, die Kategorien von Discourse/WordPress immer synchron hält.

oder

  1. Vielleicht müssen sie gar nicht synchron sein, sondern wenn eine Kategorie in Discourse nicht existiert, wird sie einfach erstellt.
2 „Gefällt mir“

Ja, das stimmt, Entschuldigung für den Tippfehler.

Es gibt einen großen Unterschied zwischen dem Lesen einer Liste von Kategorien über die API (Kategorie-Update erzwingen) und der automatischen Synchronisierung von Kategorien zwischen WordPress und Discourse.

1 „Gefällt mir“

Würde ähnlicher Code für die Abbildung von wp_categories auf discourse_tags funktionieren?

Ich lebe das Leben „Kategorien sind Mauern“ :sunglasses:

Leider gibt es derzeit keinen gleichwertigen wpdc_publish_post_tags-Filter.

Was genau möchten Sie mit Tags erreichen?

Ich habe einen benutzerdefinierten Beitragstyp von policies mit einer hierarchischen benutzerdefinierten Taxonomie policy_categories auf zwei Ebenen (Eltern/Kind). Es gibt ungefähr 45 Unterkategorien.

Ich habe WP Discourse so eingerichtet, dass es in eine Discourse-Kategorie von policies veröffentlicht wird, aber anstatt eine riesige Menge an Unterkategorien zu erstellen (nachdem ich mich in diesem Forum umgesehen habe), scheint es besser zu sein, die Unterkategorien als Tags zu erstellen.

Ich werde verschiedene WordPress-Benutzer haben, die policies mit unterschiedlichen Erfahrungsstufen veröffentlichen (wenn ich es allein machen würde, würde ich sie jedes Mal taggen). Um einen zusätzlichen Schritt und wahrscheinlich eine Menge Support-Aufwand zu sparen, wäre es ideal, wenn es einen Filter gäbe, damit WP Discourse die WordPress-Kategorien übernimmt und die passenden Discourse-Tags hinzufügt.

Ich würde sicherstellen, dass die Kategorien und Tags IDs/Slugs usw. übereinstimmen, da ich alle Updates davon als Administrator verwalten werde.

Vielen Dank für Ihre Hilfe.

Vielleicht ist das etwas für Marketplace?

Obwohl es keinen dedizierten Tag-Filter gibt, gibt es einen allgemeinen Filter, den Sie verwenden können: wpdc_publish_body. In Ihrem Fall sieht er so aus:

add_filter(  'wpdc_publish_body', function( $body, $remote_post_type, $post_id ) {
   // Code zum Abrufen der Post-Policy-Kategorie
   if ( // Wenn es eine Post-Policy gibt ) {
      $policy_tags = // Ordnet die Post-Policy-Kategorie den entsprechenden Tags zu
      $body['tags'] = $policy_tags
   }
   return $body;
}, 10, 3);