Verwenden Sie WP Discourse, um Beiträge von WordPress auf Discourse zu veröffentlichen

Sie können das WP Discourse-Plugin verwenden, um WordPress-Beiträge auf Ihrem Discourse zu veröffentlichen, damit Ihre Community über Ihre WordPress-Inhalte diskutieren kann. Bevor Sie die Veröffentlichung einrichten können, müssen Sie zuerst das WP Discourse-Plugin auf WordPress installieren und es mit Ihrem Discourse verbinden. Wenn Sie bereit sind, loszulegen, schauen Sie sich zunächst dieses kurze Video an oder folgen Sie den untenstehenden Anweisungen.

Nächster Schritt

Sobald Sie die Veröffentlichung eingerichtet haben, möchten Sie vielleicht die folgenden Themen durchgehen:


Anweisungen

Veröffentlichungseinstellungen

:warning: Stellen Sie sicher, dass Sie Ihre Einstellungen nach jeder Änderung immer speichern. Klicken Sie am unteren Rand der Seite auf die Schaltfläche „Optionen speichern“.

Die Einstellungen sollten relativ selbsterklärend sein. Falls Sie Schwierigkeiten haben, eine der Einstellungen zu verstehen, antworten Sie bitte auf dieses Thema, um weitere Klarstellung zu erhalten.

Standard-Discourse-Kategorie

Legt die Standardkategorie fest, in der Ihre Beiträge auf Discourse veröffentlicht werden. Diese Einstellung kann für einzelne Beiträge auf dem WordPress-„Neuer Beitrag“-Bildschirm überschrieben werden.

Unterkategorien anzeigen

Gibt an, ob die Unterkategorien Ihres Forums als Kategorien verfügbar sein sollen, in die Sie von WordPress aus veröffentlichen können. Sie müssen diese Einstellung speichern, bevor Unterkategorien in der Eingabe für die Option „Standard-Discourse-Kategorie“ verfügbar werden.

Kategorie-Update erzwingen

Für den Fall, dass Sie neue Kategorien zu Ihrem Forum hinzugefügt haben und diese auf Ihrer WordPress-Website verfügbar sein sollen. Durch Aktivieren dieser Einstellung und Speichern der Optionsseite wird ein einzelner API-Aufruf an Discourse durchgeführt, um die Discourse-Kategorien abzurufen. Nach dem Aktivieren finden Sie die Einstellung beim nächsten Aufruf des Reiters „Kommentierung“ deaktiviert.

Tags zulassen

Aktivieren Sie dies, wenn Sie Tags zu Discourse-Themen hinzufügen möchten, die über WordPress erstellt wurden.

Als nicht aufgeführte Themen veröffentlichen

Veranlasst dazu, dass von WordPress veröffentlichte Beiträge auf Discourse nicht aufgeführt werden. Wenn Sie die Webhook-Einstellung „Kommentardaten synchronisieren“ aktivieren, werden nicht aufgeführte Beiträge sichtbar, sobald sie die erste Antwort auf Discourse erhalten.

Vollständigen Beitraginhalt verwenden

Ermöglicht es Ihnen, vollständige WordPress-Beiträge anstelle von Auszügen in Ihrem Discourse-Forum zu veröffentlichen. Damit der Button „Ganzen Beitrag anzeigen“ unter Ihrem Beitrag auf Discourse nicht erscheint, müssen Sie die Discourse-Site-Einstellung „embed truncate“ deaktivieren (zu finden unter yourforum.com/admin/site_settings/category/posting).

Benutzerdefinierte Länge für Auszüge

Wenn Sie die Einstellung „Vollständigen Beitraginhalt verwenden“ nicht ausgewählt haben, erstellt diese Einstellung Auszüge dieser Länge, die auf Discourse veröffentlicht werden. Sie können auch manuell Auszüge erstellen, wenn Sie einen WordPress-Beitrag erstellen, indem Sie den Auszug im Meta-Feld „Auszug“ hinzufügen.

Automatische Veröffentlichung

Dieses Häkchen setzt das Kontrollkästchen „Auf Discourse veröffentlichen“, das auf dem Bildschirm „Neuer Beitrag“ für die zu veröffentlichenden Beitragstypen angezeigt wird. Das Kontrollkästchen kann beim Erstellen des Beitrags dennoch deaktiviert werden.

Verfolgte veröffentlichte Themen automatisch

Diese Einstellung ist standardmäßig aktiviert. Wenn sie aktiviert ist, wird der Autor eines von WordPress auf Discourse veröffentlichten Beitrags automatisch als „Beobachtend“ für das Thema markiert (sie erhalten Discourse-Benachrichtigungen über jede neue Antwort).

Zu veröffentlichende Beitragstypen

Diese Einstellung muss gesetzt sein. Standardmäßig ist sie auf „post“ festgelegt, aber Seiten und benutzerdefinierte Beitragstypen können ebenfalls ausgewählt werden.

Beiträge nach Tag ausschließen

Wenn Sie WordPress-Tags zu dieser Einstellung hinzufügen, werden keine WordPress-Beiträge mit einem dieser Tags auf Discourse veröffentlicht.

Discourse-Namensfeld nicht anzeigen

Dies versteckt das Feld „Discourse-Benutzername“ in den Benutzerprofilen. Der Discourse-Benutzername wird verwendet, um den Autor des Themas beim Veröffentlichen von Beiträgen auf Discourse festzulegen.

Discourse-Benutzername bearbeitbar

Dies bestimmt, ob Nicht-Administratoren ihren eigenen Discourse-Benutzernamen in ihrem Profil bearbeiten können. Der Discourse-Benutzername wird verwendet, um den Autor des Themas beim Veröffentlichen von Beiträgen auf Discourse festzulegen.

Direkte Datenbankveröffentlichungsflags

Diese Einstellung wird in bestimmten Setup-Konfigurationen mit spezialisierten WordPress-Umgebungen verwendet. Verwenden Sie diese Einstellung nicht, es sei denn, Sie wissen, was sie bewirkt.

Ausführliche Veröffentlichungsprotokolle

Wenn Sie diese Einstellung aktivieren, werden alle auf Discourse veröffentlichten Beiträge in den WP Discourse-Protokollen protokolliert, auch wenn sie erfolgreich waren. Normalerweise werden nur Fehler protokolliert.

Veröffentlichung über XML-RPC aktivieren

XML-RPC ist ein Remote-Procedure-Call, der häufig von Blogging-Software zum Senden von Beiträgen an WordPress verwendet wird. Apps, die dieses Verfahren verwenden, umfassen die wordpress.com Blogging-App.

Standardmäßig veröffentlicht WP Discourse keine Beiträge auf Discourse, die über XML-RPC erstellt wurden. Der Grund dafür ist, dass es keine gute Möglichkeit gibt anzugeben, ob ein über Blogging-Software veröffentlichter Beitrag auf Discourse veröffentlicht werden soll.

Wenn Sie Blogging-Software verwenden möchten, um Beiträge zu erstellen, die direkt auf Discourse veröffentlicht werden, müssen Sie einige Codezeilen in die Datei functions.php Ihres Themes einfügen, die in den Filter wp_discourse_before_xmlrpc_publish eingreifen. Der Filter wp_discourse_before_xmlrpc_publish übergibt zwei Argumente an Funktionen, die damit verbunden sind. Das erste Argument, $publish_to_discourse, ist ein Boolean-Wert, der auf false gesetzt ist, um die Veröffentlichung über XML-RPC zu deaktivieren. Das zweite Argument ist das post-Objekt.

Um alle XML-RPC-Beiträge automatisch von Discourse veröffentlichen zu lassen, müssen Sie eine Funktion schreiben, die immer true zurückgibt. Verwenden Sie beispielsweise folgenden Code:

Warnung: Dies führt dazu, dass alle über XML-RPC veröffentlichten Beiträge auf Discourse veröffentlicht werden, einschließlich alter Beiträge, die in der Blogging-Software bearbeitet werden.

add_filter('wp_discourse_before_xmlrpc_publish', 'my_namespace_xmlrpc_publish', 10, 2 );
function my_namespace_xmlrpc_publish( $publish_to_discourse, $post ) {
  return true;
}

XML-RPC-Beiträge nach Beitragstags filtern

Die wordpress.com-Blogging-App ermöglicht es Ihnen, Tags zu Beiträgen hinzuzufügen. Tags können verwendet werden, um zu steuern, ob ein Beitrag auf Discourse veröffentlicht wird oder nicht. Um nur Beiträge mit dem Tag „discourse“ zu veröffentlichen, verwenden Sie beispielsweise folgenden Code:

add_filter('wp_discourse_before_xmlrpc_publish', 'my_namespace_xmlrpc_publish_by_tag', 10, 2 );
function my_namespace_xmlrpc_publish_by_tag( $publish_to_discourse, $post ) {
  if ( has_tag( 'discourse', $post ) ) {
    return true;
  }
  return false;
}

Wenn Sie diese Methode verwenden möchten, aber nicht möchten, dass das Tag „discourse“ in Ihren veröffentlichten Beiträgen erscheint, können Sie es mit folgendem Code entfernen:

add_filter( 'term_links-post_tag', 'my_prefix_remove_discourse_tag' );
function my_prefix_remove_discourse_tag( $tags ) {
    foreach( $tags as $key => $value ) {
        if ( strpos( $value, 'discourse' ) ) {
            unset( $tags[ $key ] );
        }
    }

    return $tags;
}

XML-RPC-Beiträge nach Beitragsdatum filtern

Um nur Beiträge zu veröffentlichen, die nach einem bestimmten Datum erstellt wurden, fügen Sie einigen Code wie diesen zu Ihrer Datei functions.php hinzu. Dieser Code ermöglicht es, alle Beiträge, die nach dem 1. Januar 2016 veröffentlicht wurden, auf Discourse zu veröffentlichen.

add_filter('wp_discourse_before_xmlrpc_publish', 'my_namespace_xmlrpc_publish_by_date', 10, 2 );
function my_namespace_xmlrpc_publish_by_date( $publish_to_discourse, $post ) {
  if ( strtotime( $post->post_date ) > strtotime( '2016-01-01') ) {
    return true;
  }
  return false;
}

Todo: Fügen Sie einen Filter zum wp-discourse-Plugin hinzu, um nur neue Beiträge (im Gegensatz zu bearbeiteten Beiträgen) über XML-RPC zu veröffentlichen.

Verfügbare Kategorien für einen benutzerdefinierten Beitragstyp filtern

Bevor die Discourse-Kategorien im Meta-Feld „Auf Discourse veröffentlichen“ auf der WordPress-Seite admin/post-new angezeigt werden, wird der WordPress-Filter 'wp_discourse_publish_categories' auf sie angewendet. Als Argumente werden das Discourse-Kategorien-Array und der aktuelle Beitrag übergeben. Dies kann in der Datei functions.php Ihres Themes verwendet werden, um festzulegen, welche Kategorien für einen bestimmten Beitragstyp verfügbar sind.

Hier ist ein Beispiel, das einen Beitragstyp 'acme_product' erstellt und dann die Discourse-Kategorien „fun“ und „scratch“ zurückgibt, die im Meta-Feld „Auf Discourse veröffentlichen“ für Beiträge dieses Typs angezeigt werden sollen.

// Erstellen des Beitragstyps.
add_action(  'init', 'my_namespace_create_post_type' );
function my_namespace_create_post_type() {
  register_post_type( 'acme_product',
    array(
      'labels' => array(
      'name' => __( 'Produkte' ),
      'singular_name' => __( 'Produkt' )
    ),
    'public' => true,
    'supports' => array( 'title', 'editor', 'comments', 'custom-fields' ),
    'has_archive' => true,
    'show_in_rest' => true,
    )
  );
}

// Filtern der verfügbaren Kategorien für den Beitragstyp 'acme_product'.
add_filter( 'wp_discourse_publish_categories', 'my_namespace_filter_categories', 10, 2 );
function my_namespace_filter_categories( $categories, $post ) {
   if ( 'acme_product' === get_post_type( $post ) ) {
     $output = [];
     foreach ( $categories as $category ) {
        if ( 'fun' === $category['name'] || 'scratch' === $category['name'] ) {
          $output[] = $category;
        }
     }
     return $output;
   }
   return $categories;
}

Wenn Sie eine bestimmte Kategorie strikt auf bestimmte Beitragstypen anwenden möchten (d. h. 1:1), sollten Sie stattdessen wpdc_publish_post_category verwenden.

function wpdc_change_post_category( $category, $post_id ) {
  if ( 'acme_product' === get_post_type( $post ) ) {
       $categories = WPDiscourse\Utilities\Utilities::get_discourse_categories();
       $fun_category = array_search( 'fun' , array_column( $categories, 'name' ));
       return $fun_category;
  } else {
       return $category;
  }
}
add_filter( 'wpdc_publish_post_category', 'wpdc_change_post_category' );

Metadaten eines verbundenen Discourse-Themas anzeigen

Wenn Sie die Veröffentlichung eingerichtet haben, können Sie Metadaten über das Discourse-Thema anzeigen, indem Sie Vorlagenanpassungen verwenden.

Zuerst müssen Sie entscheiden, welche Vorlage Sie ändern möchten. Wenn Sie beispielsweise nur die Metadaten des Themas anzeigen möchten und keine Antworten als Kommentare, sollten Sie die Vorlage no_replies ändern.

Sobald Sie eine Vorlage ausgewählt haben, können Sie sie ändern, um Discourse-Themen-Metadaten hinzuzufügen. Hier ist ein Codeausschnitt, der dies tut, mit einigen Kommentaren, die erklären, was der Code macht:

// Stellen Sie sicher, dass wp-discourse vorhanden ist, verwenden Sie Ihre bevorzugte Methode,
// z. B. https://wordpress.stackexchange.com/questions/127818/how-to-make-a-plugin-require-another-plugin

// Erfordern Sie die Plugin-Utilities aus dem wp-discourse-Plugin
require_once ABSPATH . 'wp-content/plugins/wp-discourse/lib/plugin-utilities.php';
use WPDiscourse\Shared\PluginUtilities;

// Kapseln Sie Ihre Themen-Metadaten-Vorlage in einer Klasse ein, damit Sie die Plugin-Utilities einfach einbinden können
class DiscourseTopicMetadata {
  
  // Binden Sie die wp-Plugin-Utilities in Ihrer Klasse ein
  use PluginUtilities;
  
  public function __construct() {

    // Fügen Sie den Vorlagenfilter beim Initialisieren der Klasse hinzu
    add_filter( 'discourse_no_replies_html', array( $this, 'topic_metadata_html' ) );
  }

  function topic_metadata_html( $input ) {
    // Holen Sie sich den Discourse-Permalink aus den Beitragsmetadaten
    $discourse_permalink = get_post_meta( get_the_ID(), 'discourse_permalink', true );

    // Verwenden Sie den Discourse-Permalink, um das Themen-JSON von Discourse abzurufen, unter Verwendung der Hilfsmethode aus den Plugin-Utilities, die die Autorisierung für Sie übernimmt
    $topic = $this->get_discourse_topic($discourse_permalink);
   
    // Geben Sie Ihr Markup aus, einschließlich der Themenmetadaten, die Sie anzeigen möchten
    ob_start();
    ?>
    <div id="discourse-topic-meta">
        <div class="views">
          Aufrufe
          <?php echo $topic->views; ?>
        </div>
        <div class="replies">
          Antworten
          <?php echo $topic->reply_count; ?>
        </div>
    </div>
    <?php
    
    return ob_get_clean();
  }
}

// Instanziieren Sie die Klasse, um den Filter hinzuzufügen
new DiscourseTopicMetadata();

Weitere Details dazu, welche Themenmetadaten in der Antwort von get_discourse_topic verfügbar sind, finden Sie unter Discourse API Docs.

10 „Gefällt mir“

Können zuvor veröffentlichte Blogbeiträge importiert werden? Zum Beispiel Blogbeiträge aus den letzten 30 Tagen? Nur um diese Kategorie ein wenig zu füllen. Danke.

2 „Gefällt mir“

Derzeit gibt es keine Massenimportoption. Sie können dies dennoch erreichen, indem Sie jeden der älteren Beiträge bearbeiten und in Discourse veröffentlichen.

2 „Gefällt mir“

Ich richte meine Websites so ein, dass sich nur wenige Leute bei WordPress anmelden können (Autoren), aber Discourse ist so gut wie jedem zugänglich. Discourse wird zur Authentifizierung verwendet.

Ich möchte, dass die Themen, die aus Artikeln erstellt werden, den Namen des Discourse-Benutzers anstelle von „System“ (oder was auch immer ich für den Veröffentlichungsbenutzernamen festgelegt habe) anzeigen.

Mit anderen Worten: Der Veröffentlichungsbenutzername ist auf „System“ gesetzt. Joe Blow veröffentlicht einen neuen Artikel in WordPress. Joe Blow existiert in Discourse (da Discourse die Authentifizierung steuert, sind alle WordPress-Benutzer auch Discourse-Benutzer). Ich möchte, dass das Thema als von Joe Blow gepostet angezeigt wird und nicht als System. Später, auf denselben Websites, veröffentlicht Jane Doe einen Artikel. Ich möchte, dass das Thema in Discourse als von Jane Doe gepostet angezeigt wird und nicht als System.

Ist das machbar?

Ich weiß es nicht. Aber wenn Sie den Tab Veröffentlichen und dort die letzte Option Single User API Key Publication überprüfen, würde ich das zuerst versuchen.

Wenn Sie DiscourseSSO (oder was auch immer für eine Verbindung es gibt oder gab…) verwenden, kann sich niemand ohne Weiteres über WordPress auf Ihrem Forum registrieren. Wenn also WordPress die Konten der Redakteure in Discourse kontrolliert, wie würden Sie das tun, ohne zuerst eine Registrierung bei WordPress für jeden zu verlangen? Ich bin neugierig, weil ich so etwas gebrauchen könnte.

(Und… ich bin wieder vom Thema abgekommen :man_facepalming:)

Ich habe die DiscourseConnect-Client-Einstellung verwendet. Diese verwendet Discourse als Authentifizierungssystem und erstellt den Benutzer in WordPress, falls er nicht existiert. Gemäß den Anweisungen des Plugins.

Wenn Ihre Website als DiscourseConnect-Client fungiert, kann die WordPress-Benutzerauthentifizierung entweder über Ihr Discourse-Forum oder über Ihre WordPress-Website erfolgen. Wenn sich ein Discourse-Benutzer über einen DiscourseConnect-Link bei WordPress anmeldet, wird er anhand seiner Discourse-Anmeldeinformationen authentifiziert. Wenn dieser Benutzer auf Ihrer WordPress-Website noch nicht existiert, wird ein neuer Benutzer erstellt.

Benutzer werden in WordPress zunächst als Abonnenten festgelegt, und ich werde sie bei Bedarf manuell zu Autoren machen. Ich plane, die Website so einzurichten, dass nicht registrierte Benutzer alle Inhalte sehen können und sich nur dann in WP registrieren müssen, wenn sie Artikel veröffentlichen möchten.

Alle Benutzer in WordPress müssen sich zuerst in Discourse registrieren. Dann wird der Connector sie automatisch entweder bei WP anmelden oder ein Konto erstellen und sie dann anmelden.

Ja, das tut es, aber es überschreibt alle anderen Authentifizierungsmethoden, und dann muss ein normaler Benutzer des Forums sich bei WordPress registrieren, bevor er Zugang zu Discourse erhält.

Oder verstehe ich etwas falsch?

Nach meinem Dafürhalten muss ein normaler Discourse-Benutzer niemals auf die WP-Seite gehen. Wenn sie sich entscheiden, einem Link von der Discourse-Seite zu folgen, werden sie automatisch auf der WP-Seite registriert.

Sie können sich gerne die beiden Seiten ansehen, um zu verstehen, was ich meine. Beachten Sie, dass sie noch nicht vollständig sind, aber dieser Teil funktioniert jetzt.
Https://forum.oursail.boats ist das Discourse
Https://www.oursail.boats ist die WP-Seite.

Erstellen Sie ein Konto auf der WP-Seite. Sie können die Nachrichten dort sehen und beantworten.

Gehen Sie dann zur WP-Seite und wählen Sie den Menüpunkt Anmelden. Dies umgeht die WP-Anmeldung und verbindet Sie stattdessen mit der Discourse-Anmeldung (abhängig von Ihren Einstellungen). Wenn Sie die Option “Angemeldet bleiben” gewählt haben, werden Sie nicht einmal dazu aufgefordert. Sie werden sofort nach der Anmeldung zur WP-Seite zurückgeleitet.

Sie müssen lediglich sicherstellen, dass die Benutzer, die die Artikel in WordPress veröffentlichen, ihren Discourse-Benutzernamen im Profil des Benutzers eingetragen haben. Wenn der Benutzer einen Discourse-Benutzernamen hat, werden die von ihm in WordPress erstellten Beiträge mit seinem Benutzernamen in Discourse veröffentlicht.

Sie können dies manuell aktualisieren oder automatisch mit dem Update Userdata-Webhook aktualisieren (siehe WP Discourse „Webhooks“-Einstellungen).

3 „Gefällt mir“

Bevor ich alle 393 veröffentlichten Beiträge auf meinem WP manuell bearbeite, wollte ich nur noch einmal überprüfen, ob dies immer noch der Fall ist? D. h., dass es immer noch keine Massenimportoption gibt? Danke!

Es gibt keine Massenimportoption. Beachten Sie, dass Sie 393 Themen-Stubs haben, wenn Sie 393 Beiträge in Discourse veröffentlichen. Ich würde Ihnen raten, eine gezieltere Strategie in Betracht zu ziehen. Worüber wird Ihre Community jetzt tatsächlich diskutieren?

2 „Gefällt mir“

Ich vermute, das werden sie nicht. Discourse wird nur als Ersatz für Kommentare verwendet, nichts weiter. Also, nicht für Discourse, sondern für WordPress.

Ich war in einer ähnlichen Situation. Da die meisten WordPress-Posts der Welt keine Kommentare erhalten oder diese mehr oder weniger nur Rauschen sind, war meiner keine Ausnahme. Aber anstatt mit allen Inhalten zu arbeiten, nutzte ich meinen alten WP-Inhalt, um die Aktivität auf Discourse zu wecken. Ich habe nicht alle Beiträge auf einmal verbunden, sondern tropfenweise. So gibt es jetzt aktive Themen über Hitzschlag bei Hunden und wie viele Kalorien Sie auf einer Wanderung essen sollten – alte Beiträge, die auf Discourse neues Leben bekamen.

Wenn es eine Option gäbe, alles als Masse zu verbinden, würde ich es tun – ohne zu verstehen, dass ein solches Potenzial verpasst wurde. Ich könnte sogar sagen, dass die Massenoption sechs Fuß unter die Erde begraben werden sollte, selbst wenn Sie sie programmieren könnten :wink:

2 „Gefällt mir“

Ich versuche nur, alle Kommentare in Discourse zu importieren, bevor ich die Website von WordPress nach Ghost migriere, da Ghost keine Kommentare hat (obwohl Sie es für Kommentare mit Discourse verbinden können).

Aber mir ist gerade eingefallen, dass dies vielleicht funktionieren könnte, wenn ich mein neues Ghost zuerst mit meinem Discourse verbinde, bevor ich alle meine WordPress-Beiträge importiere… vielleicht (/me geht, um das auszuprobieren…)

Es migriert keine Kommentare von WP nach Discourse. Es zeigt nur Discourse-Beiträge in WordPress an.

Wenn ich das richtig verstanden habe…

1 „Gefällt mir“

Es hat keinen Sinn, Wordpress-Beiträge und Discourse-Themen zu verknüpfen, wenn Sie zu Ghost migrieren.

Hallo zusammen!

Ich habe gerade die Konfiguration meiner Community mit Discourse abgeschlossen! Derzeit teste ich das WP Discourse-Plugin auf meiner Staging-Website.

Ich habe Bedenken wegen möglicher SEO-Probleme. Insbesondere durch die Veröffentlichung derselben Inhalte von WP nach Discourse mache ich mir Sorgen über doppelte Inhalte im Hinblick auf SEO-Probleme. Markiert Discourse die Inhalte im Forum als Kopie für SEO-Zwecke?

Hallo Victor :slight_smile:

Was SEO angeht, sollten die Standardeinstellungen in Ordnung sein (da es sich um unterschiedliche Domains handelt), aber Sie können auch die kanonische URL des Discourse-Themas auf die URL des Wordpress-Posts setzen.

Aktivieren Sie die Discourse-Website-Einstellung embed set canonical url. Dann wird der WP-Post-Permalink die kanonische URL des Discourse-Themas sein (d. h. sie wird im head des Discourse-Thema-HTMLs als kanonischer Link erscheinen).

Weitere Informationen hierzu finden Sie unter

1 „Gefällt mir“

Danke @angus. Ich weiß das wirklich zu schätzen. Für mich ist es sicherer, die Kontrolle mit SEO zu übernehmen, als sie dem Zufall zu überlassen!

1 „Gefällt mir“

Ich versuche, verschiedene Kategorien für verschiedene custom_post_types festzulegen. Der folgende Code wählt die richtige Kategorie im Wordpress-Admin aus. Beim Veröffentlichen in Discourse wird die Kategorie dort jedoch nicht gesetzt (und standardmäßig auf “Uncategorized” gesetzt)…

Vielleicht übersehe ich etwas Offensichtliches?

// WP Discourse set CPT forum categories for CPTS
 
add_filter( 'wp_discourse_publish_categories', 'radhr_filter_categories_policies', 10, 2 );
function radhr_filter_categories( $categories, $post ) {
	if ( 'policy' === get_post_type( $post ) ) {
		$output = [];
		foreach ( $categories as $category ) {
			if ( 'Policies' === $category['name']) {
				$output[] = $category;
			}
		}
		return $output;
	} 
	
	elseif ( 'guide' === get_post_type( $post ) ) {
		$output = [];
		foreach ( $categories as $category ) {
			if ( 'Guides' === $category['name']) {
				$output[] = $category;
			}
		}
		return $output;
	}
	
	elseif ( 'post' === get_post_type( $post ) ) {
		$output = [];
		foreach ( $categories as $category ) {
			if ( 'Blogs' === $category['name']) {
				$output[] = $category;
			}
		}
		return $output;
	}

	return $categories;
}

Sie haben eine vernünftige Annahme darüber getroffen, wie Sie Ihr Ziel erreichen können, aber wp_discourse_publish_categories funktioniert nicht zuverlässig, wenn Sie im Gutenberg-Editor nur nach einer Kategorie filtern.

Sie sollten stattdessen wpdc_publish_post_category verwenden:

Ich werde den OP aktualisieren, um dies zu vermerken.

1 „Gefällt mir“