{"id":481,"date":"2023-02-28T20:54:28","date_gmt":"2023-02-28T20:54:28","guid":{"rendered":"http:\/\/msls.co\/?page_id=481"},"modified":"2026-08-23T11:14:52","modified_gmt":"2026-08-23T11:14:52","slug":"hook-reference","status":"publish","type":"page","link":"https:\/\/msls.co\/de\/developer-docs\/hook-reference\/","title":{"rendered":"Hook-Referenz"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Der Multisite Language Switcher stellt eine ganze Reihe von WordPress-Actions und -Filtern bereit, mit denen sich sein Verhalten anpassen l\u00e4sst, ohne den Quellcode zu \u00e4ndern. Nahezu jeder Hook-Name tr\u00e4gt das Pr\u00e4fix <code>msls_<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn Sie mit Actions und Filtern noch nicht gearbeitet haben, lesen Sie am besten zuerst die <a href=\"https:\/\/developer.wordpress.org\/plugins\/hooks\/\">Plugin-API im WordPress-Handbuch<\/a>. Diese Seite listet alle Erweiterungspunkte des Plugins, gruppiert nach Subsystem. Die angegebenen Signaturen entsprechen dem Stand von Version 3.0.1; ma\u00dfgeblich bleibt die Aufrufstelle im Quellcode.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Hinweis zur Reihenfolge: Die Funktionen und Klassen des Plugins stehen bereits zur Verf\u00fcgung, wenn die Plugin-Datei eingebunden wird, also vor <code>plugins_loaded<\/code>. Die Hooks dagegen feuern erst ab <code>plugins_loaded<\/code> und sp\u00e4ter. Registrieren Sie Ihre Callbacks also wie gewohnt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ausgabe im Frontend<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">msls_get_output<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_get_output', ?object $obj ): ?object\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ersetzt das <code>Output<\/code>-Objekt, das <code>msls_the_switcher()<\/code> und <code>msls_get_switcher()<\/code> verwenden. Standardm\u00e4\u00dfig wird <code>null<\/code> \u00fcbergeben, und die Funktion greift auf <code>Output::create()<\/code> zur\u00fcck. Geben Sie ein eigenes Objekt zur\u00fcck, mit demselben Vertrag aus <code>set_tags()<\/code> und <code>__toString()<\/code>, um die Ausgabe komplett selbst zu erzeugen, f\u00fcr die gesamte Website oder pro Template.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_output_get<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_output_get', string $url, LinkInterface $link, bool $is_current_blog ): string\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Erzeugt das Markup f\u00fcr jedes einzelne Sprachelement, bevor es in das Ausgabe-Array wandert. Der Filter erh\u00e4lt die Ziel-URL (nicht das fertige Anker-Element), das Link-Objekt und die Information, ob das Element auf den aktuellen Blog zeigt. Der R\u00fcckgabewert muss also das vollst\u00e4ndige HTML dieses Elements sein. H\u00e4ngt kein Callback an diesem Hook, erzeugt das Plugin sein eigenes Anker-Element.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das Link-Objekt tr\u00e4gt seine Werte in den magischen Eigenschaften <code>txt<\/code> (Beschreibung des Blogs), <code>src<\/code> (URL des Flaggen-Icons) und <code>alt<\/code> (Locale); <code>(string) $link<\/code> liefert die fertige Darstellung gem\u00e4\u00df der eingestellten Variante.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_output_get_tags<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_output_get_tags', array $tags ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die umschlie\u00dfenden Tags <code>before_output<\/code>, <code>after_output<\/code>, <code>before_item<\/code> und <code>after_item<\/code>. Diese Werte kommen normalerweise aus den Plugin-Einstellungen; \u00fcber den Filter \u00fcberschreiben Sie sie programmatisch, etwa um in bestimmten Templates ein anderes Listen-Markup zu erzwingen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_output_no_translation_found<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_output_no_translation_found', string $empty ): string\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert den leeren String, den <code>Output::__toString()<\/code> zur\u00fcckgibt, wenn es nichts auszugeben gibt: keine \u00dcbersetzung gefunden und die Option \u201eaktuelle Sprache anzeigen&#8220; ist aus. Damit k\u00f6nnen Sie an dieser Stelle einen Hinweis ausgeben statt eines leeren Umschalters.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_output_get_alternate_links<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_output_get_alternate_links', string $url, Blog $blog ): string\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die URL jedes Eintrags, den das Plugin als <code>&lt;link rel=\"alternate\" hreflang=\"\u2026\"&gt;<\/code> im <code>&lt;head&gt;<\/code> ausgibt. Ein leerer R\u00fcckgabewert entfernt die Sprache aus der Liste; alternativ schreiben Sie die URL in die kanonische Form um, die Ihr SEO-Setup erwartet.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_output_get_alternate_links_default<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_output_get_alternate_links_default', string $default ): string\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert den <code>x-default<\/code>-Eintrag, der zur\u00fcckgegeben wird, wenn nur eine einzige alternative URL vorliegt. Nutzen Sie ihn, um diesen Standardeintrag zu unterdr\u00fccken, zu ersetzen oder umzuschreiben.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_output_get_alternate_links_arr<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_output_get_alternate_links_arr', array $arr ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert das vollst\u00e4ndige Array der <code>&lt;link rel=\"alternate\"&gt;<\/code>-Zeilen, bevor sie zusammengef\u00fcgt und ausgegeben werden. Damit sortieren Sie Sprachen um, entfernen Eintr\u00e4ge oder schieben eigene <code>&lt;link&gt;<\/code>-Tags dazu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_head_hreflang<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_head_hreflang', string $language ): string\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert den Wert des <code>hreflang<\/code>-Attributs, etwa <code>en<\/code> oder <code>en-US<\/code>. Standardm\u00e4\u00dfig leitet das Plugin den Wert aus dem Locale des Blogs ab und verwendet die regionale Form nur dann, wenn mehrere Blogs dieselbe Basissprache verwenden. \u00dcber den Hook setzen Sie Ihre eigene Zuordnung durch.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_filter_string<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_filter_string', string $format, array $links ): string\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert den Hinweis \u201eDieser Beitrag ist auch verf\u00fcgbar in \u2026&#8220;, den das Plugin \u00fcber oder unter dem Beitragstext einblenden kann. Geben Sie Ihre eigene Formatvorlage zur\u00fcck; das Array der Sprachlinks kommt mit, damit Ihre Fassung es weiterverwenden kann.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_widget_title<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_widget_title', string $name ): string\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert den Standardtitel \u201eMultisite Language Switcher&#8220; des klassischen Widgets. Praktisch, wenn jede Widget-Instanz im Netzwerk denselben abweichenden Namen tragen soll, ohne dass Sie jedes Widget einzeln anfassen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_widget_alternative_content<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_widget_alternative_content', string $text ): string\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert den Ersatztext im Widget, wenn f\u00fcr die aktuelle Seite keine \u00dcbersetzungen vorliegen. Standard ist \u201eNo available translations found&#8220;.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sprachlinks<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">msls_link_create<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_link_create', LinkInterface $obj, ?int $display ): LinkInterface\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Feuert in der Factory <code>Link::create()<\/code>, wenn ein Element des Umschalters in eine der vier eingebauten Varianten \u00fcberf\u00fchrt wird. Geben Sie ein anderes Objekt zur\u00fcck, das <code>LinkInterface<\/code> implementiert, um die Darstellung vollst\u00e4ndig selbst zu bestimmen, etwa als Button-Komponente oder als reines SVG-Icon. R\u00fcckgabewerte, die das Interface nicht implementieren, werden ignoriert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Permalinks und Einstellungen<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">msls_get_postlink<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_get_postlink', string $post_link, OptionsInterface $options ): string\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert den aufgel\u00f6sten Permalink einer \u00dcbersetzung. Der Hook feuert, wenn das Plugin ein <code>Options<\/code>-Objekt (Beitrag, Term oder Archiv-Abfrage) nach der URL fragt, auf die es in einer anderen Sprache zeigen soll. Damit schreiben Sie \u00dcbersetzungs-URLs um, etwa f\u00fcr einen Redirector oder um Tracking-Parameter anzuh\u00e4ngen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Hook-Name steht auch als Konstante <code>Options::MSLS_GET_POSTLINK_HOOK<\/code> zur Verf\u00fcgung. Er ersetzt den alten, unpr\u00e4fixierten Filter <code>check_url<\/code>, der seit 2.7.1 \u00fcberholt ist.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_options_get_permalink<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_options_get_permalink', string $postlink, string $language ): string\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert den Permalink, den <code>Options::get_permalink()<\/code> f\u00fcr eine bestimmte Sprache erzeugt. Dieser Hook feuert <strong>vor<\/strong> <code>msls_get_postlink<\/code> und ist der richtige, wenn Sie speziell die URLs von Archiv- und Taxonomie-Seiten beeinflussen wollen. Ein leerer R\u00fcckgabewert f\u00fchrt zum Fallback auf <code>home_url( '\/' )<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_options_get_flag_url<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_options_get_flag_url', string $url ): string\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die Verzeichnis-URL, aus der die Flaggen-Icons geladen werden. Damit liefern Sie die Flaggen aus Ihrem eigenen CDN, Theme oder Asset-Build aus.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_options_get_flag_icon<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_options_get_flag_icon', string $icon, string $language ): string\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert den Dateinamen des Flaggen-Icons f\u00fcr eine Sprache. Nutzen Sie ihn, um einzelne Icons auszutauschen, etwa um ein Locale auf eine abweichende Flaggendatei zu legen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_options_get_available_languages<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_options_get_available_languages', array $languages ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert das Array aus Sprachcodes und lesbaren Namen, die das Plugin im Backend zur Auswahl anbietet. Damit erweitern Sie die Sprachliste des WordPress-Kerns um eigene Locales oder verstecken solche, die in der Auswahl nie erscheinen sollen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Blogs und Collection<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">msls_blog_collection_construct<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_blog_collection_construct', array $blogs ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Feuert, w\u00e4hrend die <code>Collection<\/code> aufgebaut wird. Der Filter bekommt das Array der Blogs, die aufgenommen werden sollen, und l\u00e4sst Sie Eintr\u00e4ge entfernen, umsortieren oder ersetzen, bevor die Collection dem Rest des Plugins zur Verf\u00fcgung steht. So begrenzen Sie das Plugin auf eine Teilmenge der Netzwerk-Sites, ohne Einstellungen pro Blog zu \u00e4ndern.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_blog_collection_description<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_blog_collection_description', int $blog_id, string|false $description ): string|false\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Bestimmt die Beschreibung, unter der ein Blog in der Collection erscheint. Achten Sie auf die ungew\u00f6hnliche Reihenfolge: Der <strong>gefilterte Wert ist die Blog-ID<\/strong>, die bisherige Beschreibung kommt als zweites Argument. Der R\u00fcckgabewert wird als Beschreibung verwendet, und ein R\u00fcckgabewert von <code>false<\/code> nimmt den Blog aus der Collection heraus.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>add_filter(\n\t'msls_blog_collection_description',\n\tfunction ( $blog_id, $description ) {\n\t\treturn 5 === (int) $blog_id ? false : $description;\n\t},\n\t10,\n\t2\n);\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">msls_blog_collection_get_blog<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_blog_collection_get_blog', ?Blog $blog, string $language ): ?Blog\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die <code>Blog<\/code>-Instanz, die bei einer Suche nach Sprache zur\u00fcckkommt. Wenn Sie ein eigenes Objekt oder einen anderen Blog zur\u00fcckgeben, biegen Sie damit die Sprachaufl\u00f6sung um, etwa um eine Fallback-Kette zu bauen, wenn kein exaktes Locale passt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_blog_collection_get_blog_id<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_blog_collection_get_blog_id', ?int $blog_id, string $language ): ?int\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dasselbe f\u00fcr die Codepfade, die nur die numerische ID brauchen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_blog_collection_get_objects<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_blog_collection_get_objects', array $objects ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die vollst\u00e4ndige Liste der <code>Blog<\/code>-Objekte in der Collection. Damit \u00e4ndern Sie global die Reihenfolge, die sich auf die Ausgabe auswirkt, oder verstecken Blogs vor allen Konsumenten auf einmal.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_blog_collection_get<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_blog_collection_get', array $objects ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die Liste \u201ealle Blogs au\u00dfer dem aktuellen&#8220;. Das ist die Liste, \u00fcber die im Frontend beim Rendern des Umschalters iteriert wird, und damit der richtige Hook, wenn Sie die Ausgabe filtern wollen, ohne die Backend-Funktionen zu beeinflussen, die mit der vollst\u00e4ndigen Collection arbeiten.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_get_users<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_get_users', array $args ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die Argumente, mit denen das Plugin <code>get_users()<\/code> f\u00fcr die Auswahl des Referenz-Benutzers aufruft. Damit schr\u00e4nken Sie die Kandidaten ein, nach Rolle, F\u00e4higkeit oder eigenem Meta-Feld, sodass Redakteure nur die vorgesehenen Konten sehen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_blog_get_permalink<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_blog_get_permalink', string $url, Blog $blog ): string\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert den Permalink, der aus einem <code>Blog<\/code>-Objekt f\u00fcr den aktuellen \u00fcbersetzbaren Kontext aufgel\u00f6st wurde. Damit \u00fcberschreiben Sie die \u00dcbersetzungs-URL pro Blog, nachdem das Plugin entschieden hat, auf welches \u00fcbersetzte Objekt es zeigt. Der Name steht auch als Konstante <code>Blog::MSLS_GET_PERMALINK_HOOK<\/code> bereit.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Inhaltstypen<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">msls_supported_post_types<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_supported_post_types', array $types ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die Liste der Post Types, die das Plugin als \u00fcbersetzbar behandelt. Enthalten sind standardm\u00e4\u00dfig <code>post<\/code>, <code>page<\/code> und alle \u00f6ffentlichen eigenen Post Types. \u00dcber den Filter nehmen Sie weitere auf oder schlie\u00dfen einzelne aus.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_supported_taxonomies<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_supported_taxonomies', array $types ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Das Gegenst\u00fcck f\u00fcr Taxonomien.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Backend: Einstellungsseite<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">msls_admin_register<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>do_action( 'msls_admin_register', string $page )\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Feuert, nachdem das Plugin seine eigenen Abschnitte auf der Einstellungsseite registriert hat. Der Einstiegspunkt f\u00fcr eine eigene Sektion per <code>add_settings_section()<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Callback bekommt den Slug der Einstellungsseite als einziges Argument. <strong>Geben Sie dieses Argument immer an <code>add_settings_section()<\/code> und <code>add_settings_field()<\/code> weiter, statt einen Slug hart zu schreiben<\/strong>. Nur so landen Ihre Felder auf der Seite, die das Plugin tats\u00e4chlich rendert. Der Wert lautet aus historischen Gr\u00fcnden weiterhin <code>lloc\\Msls\\MslsAdmin<\/code>, obwohl die Klasse selbst inzwischen <code>lloc\\Msls\\Admin\\Admin<\/code> hei\u00dft.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>add_action(\n\t'msls_admin_register',\n\tfunction ( $page ) {\n\t\tadd_settings_section( 'my_section', 'Meine Einstellungen', 'my_render', $page );\n\t}\n);\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">msls_admin_{section}<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>do_action( \"msls_admin_{$section}\", string $page, string $section )\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dynamische Action, die feuert, nachdem das Plugin die Felder eines bestimmten Abschnitts registriert hat. Der Namensteil <code>{section}<\/code> entspricht der ID des Abschnitts; es gibt vier davon:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>msls_admin_language_section<\/code><\/li>\n\n\n\n<li><code>msls_admin_main_section<\/code><\/li>\n\n\n\n<li><code>msls_admin_advanced_section<\/code><\/li>\n\n\n\n<li><code>msls_admin_rewrites_section<\/code> (nur wenn Rewrites aktiv sind)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Damit erg\u00e4nzen Sie Felder in genau einem Abschnitt, ohne die anderen anzufassen. Wie bei <code>msls_admin_register<\/code> bekommen Sie den Slug der Seite, hier als erstes von zwei Argumenten, das zweite ist die Abschnitts-ID.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_admin_caps<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_admin_caps', string $capability ): string\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die F\u00e4higkeit, die f\u00fcr den Zugriff auf die Einstellungsseite n\u00f6tig ist. Standard ist <code>manage_options<\/code>. Damit \u00fcbergeben Sie die Konfiguration des Plugins an eine andere Rolle oder eine eigene Capability.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_max_reference_users_count<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_max_reference_users_count', int $max ): int\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die Obergrenze (Standard: 100) der Benutzer, die in der Auswahl des Referenz-Benutzers erscheinen. In Netzwerken mit vielen Redakteuren erh\u00f6hen Sie den Wert, auf gro\u00dfen Installationen senken Sie ihn, damit die Liste handlich bleibt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_reference_users<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_reference_users', array $users ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert das Array der Referenz-Benutzer: Schl\u00fcssel ist die Benutzer-ID, Wert der <code>user_nicename<\/code>. Der Hook greift, nachdem die Abfrage gelaufen ist, und eignet sich zum Umbenennen oder Entfernen einzelner Eintr\u00e4ge.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_admin_validate<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_admin_validate', array $arr ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">L\u00e4uft \u00fcber die Formularwerte der Einstellungsseite, bevor sie gespeichert werden. Der richtige Ort, um eigene Felder aus <code>msls_admin_register<\/code> und <code>msls_admin_{section}<\/code> zu bereinigen, zu normalisieren oder zur\u00fcckzuweisen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Backend: Metabox im Editor<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">msls_metabox_post_select_title<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_metabox_post_select_title', string $title ): string\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert den Titel \u201eMultisite Language Switcher&#8220; der Haupt-Metabox auf Beitrags-Bearbeitungsseiten.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_metabox_post_import_title<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_metabox_post_import_title', string $title ): string\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert den Titel \u201eMultisite Language Switcher &#8211; Import content&#8220; der Metabox f\u00fcr den Inhalts-Import, die neben der Haupt-Metabox erscheint.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_meta_box_suggest_args<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_meta_box_suggest_args', array $args ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die <code>WP_Query<\/code>-Argumente, mit denen die Autovervollst\u00e4ndigung der Metabox m\u00f6gliche Beitr\u00e4ge im Ziel-Blog sucht. Damit erg\u00e4nzen Sie <code>meta_query<\/code>-Bedingungen, schr\u00e4nken Post-Status ein oder verengen die Suche auf andere Weise.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_meta_box_suggest_post<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_meta_box_suggest_post', \\WP_Post $post ): mixed\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert jedes <code>WP_Post<\/code>-Objekt, bevor es zu einem Vorschlag wird. Damit reichern Sie Titel an, etwa mit einem Status-K\u00fcrzel, oder \u00fcberspringen einzelne Beitr\u00e4ge, indem Sie etwas zur\u00fcckgeben, das kein <code>WP_Post<\/code> ist.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_meta_box_suggest_results<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_meta_box_suggest_results', array $results, array $context ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert das Array der Vorschl\u00e4ge, bevor es als JSON zur\u00fcckgeht. Das zweite Argument liefert den Kontext der Anfrage mit <code>blog_id<\/code>, <code>post_type<\/code>, <code>s<\/code> und <code>source_id<\/code>. Damit erg\u00e4nzen Sie eigene Eintr\u00e4ge, entfernen Duplikate oder \u00e4ndern die Struktur aus Label und Wert.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_meta_box_render_select_hierarchical<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_meta_box_render_select_hierarchical', array $args ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die Argumente f\u00fcr die hierarchische Auswahl innerhalb der Metabox, die per <code>wp_dropdown_pages()<\/code> gerendert wird. Damit \u00e4ndern Sie Sortierung, Tiefe oder andere Darstellungsoptionen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Backend: Taxonomie-Seiten<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">msls_post_tag_add_input<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>do_action( 'msls_post_tag_add_input', string $taxonomy )\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Feuert, nachdem das Plugin seine \u00dcbersetzungsfelder auf der Seite \u201eNeues Element hinzuf\u00fcgen&#8220; einer Taxonomie ausgegeben hat. Der Platz f\u00fcr zus\u00e4tzliche Felder oder erkl\u00e4renden Text unterhalb.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_post_tag_edit_input<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>do_action( 'msls_post_tag_edit_input', \\WP_Term $tag, string $taxonomy )\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Das Gegenst\u00fcck auf der Bearbeitungsseite eines Terms. Der Handler bekommt den bearbeiteten Term und den Slug der Taxonomie. Das ist n\u00fctzlich, wenn Ihre Erg\u00e4nzungen vom konkreten Term abh\u00e4ngen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_post_tag_classic_add_input<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>do_action( 'msls_post_tag_classic_add_input', string $taxonomy )\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Wie <code>msls_post_tag_add_input<\/code>, aber aus der klassischen Variante der Term-Oberfl\u00e4che, jener ohne Autovervollst\u00e4ndigung, die ein anderes Markup verwendet.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_post_tag_classic_edit_input<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>do_action( 'msls_post_tag_classic_edit_input', \\WP_Term $tag, string $taxonomy )\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Wie <code>msls_post_tag_edit_input<\/code>, f\u00fcr die klassische Variante.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_post_tag_suggest_args<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_post_tag_suggest_args', array $args ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die <code>get_terms()<\/code>-Argumente der Term-Autovervollst\u00e4ndigung. Damit verengen Sie die Abfrage, etwa auf sprachspezifische Meta-Felder oder eine maximale Trefferzahl.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_post_tag_suggest_term<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_post_tag_suggest_term', \\WP_Term $term ): mixed\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert jeden Term-Kandidaten, bevor er zum Vorschlag wird. Was kein <code>WP_Term<\/code> mehr ist, f\u00e4llt aus der Liste. So filtern Sie einzelne Terms heraus oder benennen sie um.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_post_tag_suggest_results<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_post_tag_suggest_results', array $results, array $context ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die Term-Vorschl\u00e4ge, bevor der Endpunkt sie als JSON zur\u00fcckgibt. Der Kontext enth\u00e4lt <code>blog_id<\/code>, <code>taxonomy<\/code>, <code>s<\/code> und <code>source_id<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_term_select_title<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_term_select_title', string $title ): string\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die \u00dcberschrift \u201eMultisite Language Switcher&#8220; des \u00dcbersetzungsbereichs, den das Plugin auf den Term-Seiten erg\u00e4nzt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Backend: Verschiedenes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">msls_admin_icon_get_edit_new<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_admin_icon_get_edit_new', string $path ): string\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die Backend-URL der kleinen Bearbeiten- und Neu-Icons, die in Listenansichten neben \u00fcbersetzbaren Zeilen erscheinen. Damit lenken Sie das Ziel um, etwa auf eine eigene \u00dcbersetzungs-Oberfl\u00e4che statt auf die Standard-Bearbeitungsseite.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_main_save<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>do_action( 'msls_main_save', int $object_id, string $class_name )\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Diese Action <strong>ersetzt<\/strong> die Standard-Speicherroutine der Komponente <code>Admin\\Main<\/code>, sobald ein Callback registriert ist: Das Plugin \u00fcberspringt dann seine eigene Logik und feuert nur noch die Action mit der Objekt-ID und dem Klassennamen des Options-Objekts. Der Weg, um die Speicherung der \u00dcbersetzungsbeziehungen an ein externes System zu \u00fcbergeben, aber auch der Hook, mit dem Sie am meisten kaputt machen k\u00f6nnen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_input_select_name<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_input_select_name', string $name ): string\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert das <code>name<\/code>-Attribut der <code>&lt;select&gt;<\/code>-Elemente des Plugins, das standardm\u00e4\u00dfig dem Muster <code>msls[&lt;key&gt;]<\/code> folgt. Relevant, wenn Sie die Formularfelder in eine andere Verarbeitungskette einbinden, die ein anderes Namensschema erwartet. Der Name steht auch als Konstante <code>Select::RENDER_FILTER<\/code> bereit.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">REST-API und Quick Create<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Alle Hooks dieses Abschnitts sind neu in 3.0.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_quick_create_capability<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_quick_create_capability', bool $default_cap, int $source_post_id, int $source_blog_id, int $target_blog_id, string $context ): bool\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert das Ergebnis der Berechtigungspr\u00fcfung f\u00fcr Quick Create. Neben der Standardentscheidung bekommen Sie die Beitrags-ID der Quelle (<code>0<\/code> bei Listen-Abfragen), die IDs von Quell- und Ziel-Blog sowie einen Kontext: <code>read<\/code> beim Zugriff auf den Quellbeitrag, <code>create<\/code> beim Anlegen im Ziel-Blog. Damit darf etwa ein \u00dcbersetzer ohne Konto im Quell-Blog einen Beitrag in seinen Blog spiegeln, oder Sie ziehen die Pr\u00fcfung strenger.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_quick_create_post_data<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_quick_create_post_data', array $post_data, \\WP_Post $source_post, int $source_blog_id, int $target_blog_id ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert das Daten-Array (Titel, Inhalt, Status, Post Type \u2026), das das Plugin an <code>wp_insert_post()<\/code> \u00fcbergibt, wenn es \u00fcber den REST-Endpunkt eine \u00dcbersetzung im Ziel-Blog anlegt. Damit setzen Sie einen anderen Status, erg\u00e4nzen Meta-Vorgaben oder \u00e4ndern den Titel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">An diesem Hook h\u00e4ngt standardm\u00e4\u00dfig <code>lloc\\Msls\\RestApi\\RestApi::prefix_source_language()<\/code> (Priorit\u00e4t 10, vier Argumente) und stellt dem Titel das Locale der Quelle voran. Der Callback l\u00e4sst sich mit <code>remove_filter()<\/code> abh\u00e4ngen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_quick_create_tax_input<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_quick_create_tax_input', array $tax_input, \\WP_Post $source_post, int $source_blog_id, int $target_blog_id ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die Zuordnung von Taxonomie-Slugs zu \u00fcbersetzten Term-IDs, die f\u00fcr den neuen Beitrag im Ziel-Blog vorbereitet wurde. Damit setzen Sie Standard-Terms, lassen einzelne Taxonomien weg oder implementieren eine eigene Term-Zuordnung, bevor die Terms gesetzt werden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_quick_create_after_insert<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>do_action( 'msls_quick_create_after_insert', int $new_post_id, \\WP_Post $source_post, int $source_blog_id, int $target_blog_id )\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Feuert, nachdem der neue \u00dcbersetzungsbeitrag im Ziel-Blog angelegt wurde, und zwar noch innerhalb des <code>switch_to_blog()<\/code>-Kontexts. Der Ort, um eigene Meta-Felder zu kopieren, Benachrichtigungen zu verschicken oder weitere Inhalte anzulegen. Das Plugin selbst h\u00e4ngt hier <code>RestApi::remember_source_blog()<\/code> ein, das sich den zuletzt gew\u00e4hlten Quell-Blog pro Benutzer merkt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_quick_create_response<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_quick_create_response', array $response_data, int $new_post_id, \\WP_Post $source_post, int $source_blog_id, int $target_blog_id ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert das Antwort-Array des Endpunkts, das standardm\u00e4\u00dfig <code>post_id<\/code>, <code>edit_url<\/code> und <code>post_title<\/code> enth\u00e4lt. Damit erg\u00e4nzen Sie Felder, die Ihre eigene Redaktions-Oberfl\u00e4che erwartet, oder entfernen Informationen, die der Client nicht sehen soll.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_untranslated_posts<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_untranslated_posts', array $items, int $source_blog_id, int $target_blog_id, string $post_type ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die Liste der un\u00fcbersetzten Beitr\u00e4ge, die der REST-Endpunkt f\u00fcr die Auswahl \u201eBeitrag zum \u00dcbersetzen&#8220; liefert. Damit sortieren Sie um, verbergen Entw\u00fcrfe oder erg\u00e4nzen jeden Eintrag um zus\u00e4tzliche Angaben.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Content-Import<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Der Content-Importer kopiert beim Anlegen einer \u00dcbersetzung Felder, Meta-Daten, Terms, Beitragsbild und Anh\u00e4nge aus dem Quellbeitrag. Seine Hooks sind der tiefste Eingriffspunkt, den das Plugin anbietet.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_content_import_before_import<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>do_action( 'msls_content_import_before_import', ImportCoordinates $import_coordinates )\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Feuert unmittelbar bevor der Import l\u00e4uft. Die Import-Koordinaten enthalten Quell- und Ziel-Blog, die Beitrags-IDs und die Sprachen. Der Platz f\u00fcr Protokollierung oder das Vorbereiten externer Ressourcen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_content_import_after_import<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>do_action( 'msls_content_import_after_import', ImportCoordinates $import_coordinates, ImportLogger $logger, Relations $relations )\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Feuert, nachdem der gesamte Import durchgelaufen ist. Neben den Koordinaten bekommen Sie den Logger und die Relationen. Das ist der nat\u00fcrliche Ort, um zu pr\u00fcfen, was importiert wurde, eine Meldung auszugeben oder Folgeaufgaben anzusto\u00dfen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_content_import_data_before_import<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_content_import_data_before_import', array $post_fields, ImportCoordinates $import_coordinates ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert das vorbereitete Array der Beitragsfelder, direkt nach der \u201ebefore import&#8220;-Action und bevor irgendein Importer l\u00e4uft. Damit schreiben Sie Felder global um, etwa URLs in <code>post_content<\/code> lokalisieren oder einen abweichenden <code>post_status<\/code> setzen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_content_import_data_after_import<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_content_import_data_after_import', array $post_fields, ImportCoordinates $import_coordinates, ImportLogger $logger, Relations $relations ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die Beitragsfelder, nachdem alle Importer gelaufen sind. Weil Logger und Relationen mitkommen, ist das der richtige Ort f\u00fcr einen letzten Durchgang \u00fcber das Ergebnis, zum Beispiel um die \u00c4nderung eines einzelnen Importers zur\u00fcckzunehmen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_content_import_importers<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_content_import_importers', ?array $importers, ImportCoordinates $import_coordinates ): ?array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ersetzt die Importer-Liste f\u00fcr den aktuellen Import vollst\u00e4ndig. Ein R\u00fcckgabewert ungleich <code>null<\/code> \u00fcberspringt den Aufbau \u00fcber die Factories und verwendet Ihre Liste. F\u00fcr den Fall, dass Sie eine komplett eigene Import-Strategie brauchen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_content_import_importers_map<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_content_import_importers_map', array $importers, ImportCoordinates $import_coordinates ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die Importer-Liste, nachdem das Plugin sie aus den Factories aufgebaut hat. Anders als <code>msls_content_import_importers<\/code> arbeitet dieser Hook auf den bereits erzeugten Objekten. Das ist die richtige Wahl, um einzelne Importer zu erg\u00e4nzen, zu ersetzen oder zu entfernen, ohne den ganzen Ablauf zu \u00fcbernehmen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_content_import_importers_factories_map<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_content_import_importers_factories_map', array $map ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die Liste der Importer-Factories, bevor irgendein Importer erzeugt wird. Damit h\u00e4ngen Sie eine eigene Factory ein oder entfernen eine vorhandene, und zwar f\u00fcr jeden Import, nicht nur den aktuellen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die f\u00fcnf eingebauten Factory-Typen lauten <code>post-fields<\/code>, <code>post-meta<\/code>, <code>terms<\/code>, <code>post-thumbnail<\/code> und <code>attachments<\/code>. Sie sind auch die Werte, die in den drei folgenden dynamischen Hooks eingesetzt werden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_content_import_{type}_importer<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( \"msls_content_import_{$type}_importer\", ?Importer $importer, ImportCoordinates $import_coordinates ): ?Importer\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dynamischer Filter, <code>{type}<\/code> ist einer der f\u00fcnf Factory-Typen. Wenn Sie hier eine <code>Importer<\/code>-Instanz zur\u00fcckgeben, verwendet die Factory diesen Importer f\u00fcr den entsprechenden Inhaltstyp und \u00fcberspringt die Auswahl \u00fcber den Slug.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_content_import_{type}_importers_map<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( \"msls_content_import_{$type}_importers_map\", array $importers_map, ImportCoordinates $import_coordinates ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dynamischer Filter auf die Liste der verf\u00fcgbaren Importer-Implementierungen (Slug \u21d2 Klasse) f\u00fcr einen Inhaltstyp. Damit registrieren Sie eine weitere Variante neben den eingebauten.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_content_import_{type}_selected<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( \"msls_content_import_{$type}_selected\", string $selected, ImportersFactory $instance ): string\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dynamischer Filter, der bestimmt, welcher Importer-Slug f\u00fcr eine Factory ausgew\u00e4hlt ist. Standard ist der erste Eintrag der Liste. Damit schalten Sie programmatisch zwischen konkurrierenden Implementierungen um, etwa abh\u00e4ngig vom Post Type oder vom Ziel-Blog.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_content_import_log_writer<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_content_import_log_writer', LogWriter $log_writer, ImportCoordinates $import_coordinates ): LogWriter\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert das Objekt, das die Import-Protokolle schreibt. Geben Sie eine eigene <code>LogWriter<\/code>-Implementierung zur\u00fcck, um die Protokolle in Ihr eigenes Log-System zu leiten.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_content_import_relation_local_to_source_create<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_content_import_relation_local_to_source_create', mixed $created, int $local_id, int $source_id, OptionsInterface $source_option ): mixed\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Greift in das Anlegen der Beziehung \u201elokal \u2192 Quelle&#8220; w\u00e4hrend des Imports ein. Ein R\u00fcckgabewert ungleich <code>null<\/code> signalisiert dem Plugin, dass Sie die Beziehung selbst angelegt haben; der eingebaute Codepfad wird dann \u00fcbersprungen. F\u00fcr \u00dcbersetzungsbeziehungen in einem eigenen Datenmodell.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_content_import_post_fields_whitelist<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_content_import_post_fields_whitelist', array $fields, ImportCoordinates $import_coordinates ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die Liste der Beitragsfelder, die der duplizierende Importer vom Quell- zum Zielbeitrag kopiert. Damit nehmen Sie weitere Felder mit oder verhindern, dass bestimmte Felder \u00fcber Sprachgrenzen wandern.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_content_import_post_meta_blacklist<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_content_import_post_meta_blacklist', array $blacklist, array $meta, ImportCoordinates $import_coordinates ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filtert die Liste der Meta-Schl\u00fcssel, die der duplizierende Importer <strong>nicht<\/strong> kopiert. Standardm\u00e4\u00dfig ausgeschlossen sind Schl\u00fcssel wie <code>_edit_last<\/code>, <code>_edit_lock<\/code> und <code>_thumbnail_id<\/code>. Erweitern Sie die Liste um Schl\u00fcssel Ihres Themes oder Ihrer Installation, die nicht mit \u00fcbersetzt werden sollen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">msls_content_import_term_meta_blacklist<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apply_filters( 'msls_content_import_term_meta_blacklist', array $blacklist, \\WP_Term $term, array $meta, ImportCoordinates $import_coordinates ): array\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dasselbe f\u00fcr Term-Meta beim flach duplizierenden Terms-Importer. Achtung: Der Filter startet hier mit einem <strong>leeren<\/strong> Array. Es gibt also keine Standardausschl\u00fcsse, die Sie versehentlich \u00fcberschreiben k\u00f6nnten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ein Hook aus dem WordPress-Kern<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">wp_admin_bar_show_site_icons<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Das Plugin fragt diesen Kern-Filter ab, wenn es entscheidet, ob in der Admin-Bar das Blavatar eines Blogs erscheint. Der Name ist absichtlich nicht pr\u00e4fixiert: Es ist der Filter des Kerns, nicht ein eigener. Er steht als Konstante <code>Blog::WP_ADMIN_BAR_SHOW_SITE_ICONS_HOOK<\/code> bereit.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00dcberholte Hooks<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">check_url<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Der unpr\u00e4fixierte Filter <code>check_url<\/code> auf dem Permalink einer \u00dcbersetzung ist seit <strong>2.7.1<\/strong> \u00fcberholt und wird \u00fcber <code>apply_filters_deprecated()<\/code> noch bedient. Verwenden Sie <code>msls_get_postlink<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Weiterlesen<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/msls.co\/de\/developer-docs\/api-funktionen\/\">API Funktionen<\/a>: die \u00f6ffentlichen Funktionen des Plugins<\/li>\n\n\n\n<li><a href=\"https:\/\/msls.co\/de\/developer-docs\/snippets-beispiele\/\">Snippets &amp; Beispiele<\/a>: Hooks im praktischen Einsatz<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Der Multisite Language Switcher stellt eine ganze Reihe von WordPress-Actions und -Filtern bereit, mit denen sich sein Verhalten anpassen l\u00e4sst, ohne den Quellcode zu \u00e4ndern. Nahezu jeder Hook-Name tr\u00e4gt das Pr\u00e4fix msls_. Wenn Sie mit Actions und Filtern noch nicht gearbeitet haben, lesen Sie am besten zuerst die Plugin-API im WordPress-Handbuch. Diese Seite listet alle &hellip; <a href=\"https:\/\/msls.co\/de\/developer-docs\/hook-reference\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eHook-Referenz\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"parent":357,"menu_order":3,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-481","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Hook-Referenz - Multisite Language Switcher<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/msls.co\/de\/developer-docs\/hook-reference\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Hook-Referenz - Multisite Language Switcher\" \/>\n<meta property=\"og:description\" content=\"Der Multisite Language Switcher stellt eine ganze Reihe von WordPress-Actions und -Filtern bereit, mit denen sich sein Verhalten anpassen l\u00e4sst, ohne den Quellcode zu \u00e4ndern. Nahezu jeder Hook-Name tr\u00e4gt das Pr\u00e4fix msls_. Wenn Sie mit Actions und Filtern noch nicht gearbeitet haben, lesen Sie am besten zuerst die Plugin-API im WordPress-Handbuch. Diese Seite listet alle &hellip; \u201eHook-Referenz\u201c weiterlesen\" \/>\n<meta property=\"og:url\" content=\"https:\/\/msls.co\/de\/developer-docs\/hook-reference\/\" \/>\n<meta property=\"og:site_name\" content=\"Multisite Language Switcher\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/realloc\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-23T11:14:52+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@realloc\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data1\" content=\"15\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/msls.co\\\/de\\\/developer-docs\\\/hook-reference\\\/\",\"url\":\"https:\\\/\\\/msls.co\\\/de\\\/developer-docs\\\/hook-reference\\\/\",\"name\":\"Hook-Referenz - Multisite Language Switcher\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/msls.co\\\/de\\\/#website\"},\"datePublished\":\"2023-02-28T20:54:28+00:00\",\"dateModified\":\"2026-08-23T11:14:52+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/msls.co\\\/de\\\/developer-docs\\\/hook-reference\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/msls.co\\\/de\\\/developer-docs\\\/hook-reference\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/msls.co\\\/de\\\/developer-docs\\\/hook-reference\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/msls.co\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Entwickler Dokumentation\",\"item\":\"https:\\\/\\\/msls.co\\\/de\\\/developer-docs\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Hook-Referenz\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/msls.co\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/msls.co\\\/de\\\/\",\"name\":\"Multisite Language Switcher\",\"description\":\"WordPress Multilingual \u2013 Simple, powerful and easy to use\",\"publisher\":{\"@id\":\"https:\\\/\\\/msls.co\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/msls.co\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/msls.co\\\/de\\\/#organization\",\"name\":\"Multisite Language Switcher\",\"url\":\"https:\\\/\\\/msls.co\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/msls.co\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/msls.co\\\/de\\\/wp-content\\\/uploads\\\/sites\\\/12\\\/sites\\\/13\\\/2023\\\/03\\\/cropped-icon.png\",\"contentUrl\":\"https:\\\/\\\/msls.co\\\/de\\\/wp-content\\\/uploads\\\/sites\\\/12\\\/sites\\\/13\\\/2023\\\/03\\\/cropped-icon.png\",\"width\":512,\"height\":512,\"caption\":\"Multisite Language Switcher\"},\"image\":{\"@id\":\"https:\\\/\\\/msls.co\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/realloc\",\"https:\\\/\\\/x.com\\\/realloc\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Hook-Referenz - Multisite Language Switcher","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/msls.co\/de\/developer-docs\/hook-reference\/","og_locale":"de_DE","og_type":"article","og_title":"Hook-Referenz - Multisite Language Switcher","og_description":"Der Multisite Language Switcher stellt eine ganze Reihe von WordPress-Actions und -Filtern bereit, mit denen sich sein Verhalten anpassen l\u00e4sst, ohne den Quellcode zu \u00e4ndern. Nahezu jeder Hook-Name tr\u00e4gt das Pr\u00e4fix msls_. Wenn Sie mit Actions und Filtern noch nicht gearbeitet haben, lesen Sie am besten zuerst die Plugin-API im WordPress-Handbuch. Diese Seite listet alle &hellip; \u201eHook-Referenz\u201c weiterlesen","og_url":"https:\/\/msls.co\/de\/developer-docs\/hook-reference\/","og_site_name":"Multisite Language Switcher","article_publisher":"https:\/\/www.facebook.com\/realloc","article_modified_time":"2026-08-23T11:14:52+00:00","twitter_card":"summary_large_image","twitter_site":"@realloc","twitter_misc":{"Gesch\u00e4tzte Lesezeit":"15\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/msls.co\/de\/developer-docs\/hook-reference\/","url":"https:\/\/msls.co\/de\/developer-docs\/hook-reference\/","name":"Hook-Referenz - Multisite Language Switcher","isPartOf":{"@id":"https:\/\/msls.co\/de\/#website"},"datePublished":"2023-02-28T20:54:28+00:00","dateModified":"2026-08-23T11:14:52+00:00","breadcrumb":{"@id":"https:\/\/msls.co\/de\/developer-docs\/hook-reference\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/msls.co\/de\/developer-docs\/hook-reference\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/msls.co\/de\/developer-docs\/hook-reference\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/msls.co\/de\/"},{"@type":"ListItem","position":2,"name":"Entwickler Dokumentation","item":"https:\/\/msls.co\/de\/developer-docs\/"},{"@type":"ListItem","position":3,"name":"Hook-Referenz"}]},{"@type":"WebSite","@id":"https:\/\/msls.co\/de\/#website","url":"https:\/\/msls.co\/de\/","name":"Multisite Language Switcher","description":"WordPress Multilingual \u2013 Simple, powerful and easy to use","publisher":{"@id":"https:\/\/msls.co\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/msls.co\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/msls.co\/de\/#organization","name":"Multisite Language Switcher","url":"https:\/\/msls.co\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/msls.co\/de\/#\/schema\/logo\/image\/","url":"https:\/\/msls.co\/de\/wp-content\/uploads\/sites\/12\/sites\/13\/2023\/03\/cropped-icon.png","contentUrl":"https:\/\/msls.co\/de\/wp-content\/uploads\/sites\/12\/sites\/13\/2023\/03\/cropped-icon.png","width":512,"height":512,"caption":"Multisite Language Switcher"},"image":{"@id":"https:\/\/msls.co\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/realloc","https:\/\/x.com\/realloc"]}]}},"_links":{"self":[{"href":"https:\/\/msls.co\/de\/wp-json\/wp\/v2\/pages\/481","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/msls.co\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/msls.co\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/msls.co\/de\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/msls.co\/de\/wp-json\/wp\/v2\/comments?post=481"}],"version-history":[{"count":6,"href":"https:\/\/msls.co\/de\/wp-json\/wp\/v2\/pages\/481\/revisions"}],"predecessor-version":[{"id":755,"href":"https:\/\/msls.co\/de\/wp-json\/wp\/v2\/pages\/481\/revisions\/755"}],"up":[{"embeddable":true,"href":"https:\/\/msls.co\/de\/wp-json\/wp\/v2\/pages\/357"}],"wp:attachment":[{"href":"https:\/\/msls.co\/de\/wp-json\/wp\/v2\/media?parent=481"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}