Wenn Sie eine Kampagne in Charitable erstellen, gibt WordPress ihr automatisch eine eigene öffentliche URL unter /campaigns/[campaign-slug]/. Das geschieht, weil Charitable Kampagnen als öffentlichen benutzerdefinierten Beitragstyp registriert, wodurch Suchmaschinen und direkte Links die eigene Seite einer Kampagne erreichen können.
Das funktioniert gut, wenn jede Kampagne ihre eigene Landingpage haben soll. Wenn Spender Ihre Kampagne jedoch nur über eine bestimmte Seite auf Ihrer Website erreichen sollen, zum Beispiel eine einzelne /donate/ -Seite, auf der Sie die Kampagne mit dem Shortcode oder Block eingebettet haben, wird die automatisch erstellte URL zu einem zweiten, unerwünschten Einstiegspunkt.
Diese Seite behandelt zwei Möglichkeiten, diesen Einstiegspunkt zu entfernen. Beide Optionen lassen Ihre Kampagneneinbettung genau wie zuvor funktionieren, da die Einbettung den Kampagnendatensatz direkt aus der Datenbank liest. Sie ist nicht darauf angewiesen, dass die einzelne Kampagnen-URL öffentlich zugänglich ist.
Wann Sie dies verwenden würden
- Sie betten Ihre Kampagne auf einer speziellen Spendenseite ein und möchten, dass dies der einzige Ort ist, an dem Spender landen.
- Eine Kampagnen-URL erscheint in Suchergebnissen oder wird geteilt, und Sie möchten diese Besucher stattdessen auf Ihre Spendenseite leiten.
- Sie führen nur eine Kampagne gleichzeitig durch und die URL für einzelne Kampagnen ist redundant.
Warum die URL überhaupt existiert
Charitable registriert campaign als WordPress-Beitragstyp mit public => true und publicly_queryable => true. Diese beiden Flags weisen WordPress an, für jede Kampagne eine URL zu generieren und sie über die Single-Post-Vorlage auszuliefern. Das ist Standardverhalten von WordPress, keine Einstellung von Charitable.
Das URL-Muster lautet [dein-permalink-front]/campaigns/[campaign-slug]/. Wenn Ihre WordPress-Permalink-Struktur eine Front hat, z. B. /news/%postname%/, wird die Kampagnen-URL zu /news/campaigns/[campaign-slug]/. Das ist Standardverhalten von WordPress, keine Einstellung von Charitable.
Es gibt keine integrierte Option in den Charitable-Einstellungen, um die einzelne Kampagnen-URL zu deaktivieren. Die beiden unten stehenden Snippets sind die unterstützten Methoden, um sie auszuschalten.
Option 1: Einzelne Kampagnen-URLs auf Ihre Spendenseite umleiten (empfohlen)
Dies ist die Option, die Sie wählen sollten, wenn die Möglichkeit besteht, dass eine Kampagnen-URL bereits geteilt, indiziert oder von woanders verlinkt wurde. Besucher, die auf der Kampagnen-URL landen, werden mit einer 301-Weiterleitung auf Ihre Spendenseite geleitet, die Suchmaschinen im Laufe der Zeit respektieren.
Fügen Sie dieses Snippet mit einem Code-Snippets-Plugin (wie WPCode) oder der functions.php Ihres Child-Themes hinzu:
add_action( 'template_redirect', function() {
if ( is_singular( 'campaign' ) ) {
wp_safe_redirect( home_url( '/donate/' ), 301 );
exit;
}
} );
Ändern Sie /donate/ in die URL, zu der Sie Besucher senden möchten. Nachdem Sie das Snippet gespeichert haben, öffnen Sie die URL Ihrer Kampagne in einem privaten Browserfenster, um zu bestätigen, dass sie jetzt auf Ihrer Spendenseite landet.
Option 2: Den Kampagnen-Beitragstyp nicht öffentlich machen
Diese Option schaltet die einzelne Kampagnen-URL vollständig aus. Jeder, der /campaigns/[slug]/ besucht, sieht eine Standard-WordPress-404-Seite. Verwenden Sie dies, wenn Sie möchten, dass die URL gar nicht erst existiert, anstatt umgeleitet zu werden.
Fügen Sie diesen Ausschnitt mit einem Code-Snippets-Plugin oder der functions.php Ihres Child-Themes hinzu:
add_filter( 'charitable_campaign_post_type', function( $args ) {
$args['public'] = false;
$args['publicly_queryable'] = false;
$args['exclude_from_search'] = true;
return $args;
} );
Nachdem Sie den Ausschnitt hinzugefügt haben, leeren Sie Ihre Permalinks: Gehen Sie in Ihrem WordPress-Admin zu Einstellungen > Permalinks und klicken Sie auf Änderungen speichern. Sie müssen auf diesem Bildschirm nichts ändern. Der Speichervorgang generiert die Rewrite-Regeln neu, sodass die Kampagnen-URL nicht mehr aufgelöst wird.
Was passiert mit dem Kampagnen-Embed?
Beide Optionen lassen das Kampagnen-Embed unberührt:
- Der
[charitable_campaign]-Shortcode wird weiterhin auf Ihrer Spendenseite gerendert. - Der Charitable-Kampagnenblock wird weiterhin auf Ihrer Spendenseite gerendert.
- Der Titel, die Geschichte, das Ziel und das Spendenformular der Kampagne werden weiterhin geladen.
- Neue Spenden werden weiterhin der Kampagne zugeordnet und aktualisieren deren Fortschritt.
Das Embed liest den Kampagnenbeitrag direkt anhand der ID aus, daher spielt es keine Rolle, ob die eigene URL der Kampagne öffentlich ist, weitergeleitet wird oder eine 404-Fehlermeldung zurückgibt.
Welche Option sollten Sie wählen?
| Verwenden Sie Option 1 (Weiterleitung), wenn… | Verwenden Sie Option 2 (nicht öffentlich), wenn… |
|---|---|
| Eine Kampagnen-URL wurde möglicherweise bereits geteilt, indiziert oder von irgendwo verlinkt. | Die Kampagnen-URL wurde noch nie geteilt und ist nicht in den Suchergebnissen enthalten. |
| Sie möchten eine reibungslose Übergabe für jeden Besucher, der die alte URL findet. | Sie möchten, dass die URL überhaupt nicht aufgelöst wird. |
| Sie möchten, dass Suchmaschinen der 301-Weiterleitung folgen und die alte URL im Laufe der Zeit fallen lassen. | Es ist Ihnen egal, ob die Suchmaschinenpräsenz der URL erhalten bleibt. |
In den meisten Fällen ist Option 1 die sicherere Wahl, da sie sowohl neue Besucher als auch Personen berücksichtigt, die die URL bereits haben.
Häufig gestellte Fragen
Wirkt sich dies auf die Spendenverfolgung aus?
Nein. Spenden werden dem Kampagnendatensatz selbst zugeordnet, nicht der URL. Unabhängig davon, ob jemand über Ihr eingebettetes Formular unter /donate/ oder (vor der Weiterleitung) die automatisch erstellte Kampagnenseite spendet, landet die Spende bei derselben Kampagne und zählt für dasselbe Ziel.
Entfernt dies die Kampagne aus dem WordPress-Adminbereich?
Nein. Die Kampagne wird weiterhin unter Charitable > Campaigns in Ihrem Admin angezeigt. Sie können sie bearbeiten, archivieren, ihre Spenden einsehen usw. Nur die öffentliche URL ändert sich.
Kann ich dies für eine Kampagne tun, aber nicht für andere?
Ja – grenzen Sie die Weiterleitung ein, indem Sie die spezifische Kampagnen-ID überprüfen:
add_action( 'template_redirect', function() {
if ( is_singular( 'campaign' ) && get_queried_object_id() === 123 ) {
wp_safe_redirect( home_url( '/donate/' ), 301 );
exit;
}
} );
Ersetzen Sie 123 durch die ID der Kampagne, die Sie weiterleiten möchten. Andere Kampagnen verwenden weiterhin ihre normalen URLs. (Option 2 ist ein Alles-oder-Nichts-Ansatz, da sie die Registrierung des Beitragstyps ändert.)
Was ist mit der Kampagnen-Archivseite?
Charitable hat das Kampagnenarchiv bereits deaktiviert (has_archive => false), sodass der Besuch von /campaigns/ allein kein Charitable-Archiv rendert. Sie müssen nichts weiter tun, um es zu deaktivieren.
Entwicklerreferenz
Der Rest dieser Seite ist für Entwickler, die mehr Kontrolle über die Registrierung des Kampagnenbeitragstyps wünschen.
Der Filter
charitable_campaign_post_type läuft auf init (Priorität 5) kurz bevor register_post_type() aufgerufen wird. Es empfängt das vollständige Argumenten-Array, das zur Registrierung des campaign -Post-Typs verwendet wird, sodass Sie eines davon ändern können:
| Argument | Standard | Auswirkung |
|---|---|---|
öffentlich | wahr | Hauptschalter für Frontend-Sichtbarkeit und Admin-Oberfläche. |
öffentlich abfragbar | wahr | Ob /campaigns/[slug]/ zu einer einzelnen Vorlage aufgelöst wird. |
von Suche ausschließen | false | Ob /?s= -Suchen Kampagnen einschließen. |
Archiv hat | false | Das Kampagnenarchiv ist standardmäßig bereits deaktiviert. |
Umschreiben | Array( 'slug' => 'Kampagnen', 'with_front' => true ) | Die URL-Slug für einzelne Kampagnen. |
in Navigationsmenüs anzeigen | wahr | Ob Kampagnen über Darstellung > Menüs zu Navigationsmenüs hinzugefügt werden können. |
Ändern des URL-Slugs anstelle der Deaktivierung
Wenn Sie die einzelne Kampagnenseite lieber beibehalten, aber deren URL-Präfix ändern möchten, filtern Sie den Rewrite-Slug. Um beispielsweise /campaigns/[slug]/ in /fundraise/[slug]/ zu ändern:
add_filter( 'charitable_campaign_post_type', function( $args ) {
$args['rewrite']['slug'] = 'fundraise';
return $args;
} );
Permalinks nach der Änderung leeren (Einstellungen > Permalinks > Änderungen speichern).
Warum with_front wichtig ist
Das Standard-'with_front' => true bedeutet, dass WordPress das Frontend Ihrer Permalinks der Kampagnen-URL voranstellt. Wenn Ihre WordPress-Permalink-Struktur /news/%postname%/ lautet, werden Ihre Kampagnen-URLs /news/campaigns/[slug]/ lauten. Setzen Sie 'with_front' => false, um das Frontend der Permalinks zu ignorieren:
add_filter( 'charitable_campaign_post_type', function( $args ) {
$args['rewrite']['with_front'] = false;
return $args;
} );
Permalinks nach der Änderung leeren.
Wie das Einbetten weiterhin funktioniert
Der [charitable_campaign] -Shortcode und der Kampagnenblock werden beide zu Charitable_Campaign -Abfragen aufgelöst, die den Beitrag nach ID laden. Diese Abfragen verwenden get_post() und direkte Meta-Abfragen, die unabhängig von den Flags public und publicly_queryable sind. Die Flags steuern nur, ob der WordPress-Frontend-Controller eine Anfrage an die einzelne Kampagnenvorlage weiterleitet. Das Deaktivieren blockiert nicht, dass PHP-Code den Beitrag liest.
Hook-Referenz
| Haken | Typ | Verwenden Sie ihn, um |
|---|---|---|
charitable_campaign_post_type | Filter | Die an register_post_type() für Kampagnen übergebenen Argumente zu ändern. Läuft auf init Priorität 5. |
template_redirect | Aktion | Lösen Sie Ihre Weiterleitung aus, nachdem WordPress die Anfrage analysiert und eine Vorlage ausgewählt hat, aber bevor die Vorlage geladen wird. Standard-WordPress-Hook. |
is_singular( 'Kampagne' ) | Bedingt | Wahr, wenn die aktuelle Anfrage eine einzelne Kampagnen-URL ist. Verwenden Sie sie innerhalb von template_redirect, um die Weiterleitung einzugrenzen. |





