it-swarm.com.de

Deaktivieren Sie einzelne Seiten und Archive und behalten Sie die Vorschau bei

TL; DR

Weiß jemand, wie ich einzelne Seiten und Archive für benutzerdefinierte Beitragstypen deaktivieren kann, während der Vorschaumodus beibehalten wird?


Ich suche nach einer Möglichkeit, die Einzel- und Archivierungsseiten für einen benutzerdefinierten Beitragstyp zu deaktivieren, da die Beiträge nur im Archiv einer benutzerdefinierten Taxonomie angezeigt werden, die den Beiträgen zugewiesen ist. Dies kann normalerweise leicht erreicht werden, indem beim Erstellen des CPT 'publicly_queryable' => false festgelegt wird.

Hier ist die Wendung: Ich möchte weiterhin den Vorschaumodus für die Beiträge verwenden können, damit ich meine Änderungen am Beitrag überprüfen kann, bevor ich sie speichere. Da durch das Setzen von 'publicly_queryable' => false auch die Vorschauseite deaktiviert wird, kann ich es nicht schaffen, einzelne Seiten als doppelten Inhalt zu haben oder Entwürfe oder Änderungen von Beiträgen nicht zu sehen.


Basierend auf der Antwort von Cesar (danke!) Verwende ich die folgende Lösung, die auch zeigt, wie der Vorschaumodus beibehalten und wie oben erläutert zum Archiv der Taxonomie umgeleitet wird.

add_action('template_redirect', 'post_redirect', 99);

function post_redirect()
{
    global $post;
    if ((is_post_type_archive('post_type') || is_singular('post_type')) && !is_preview())
    {
        $post_terms = wp_get_post_terms($post->ID, 'taxonomy');
        if($post_term = $post_terms[0])
        {
            wp_redirect(get_term_link($post_term->term_id) . '#' . $post->post_name, 301);
            die();
        }
    }
}

Ich bin immer noch an einer Lösung ohne Weiterleitungen interessiert, falls das möglich ist.

1
taymless

Sie können umleiten, wenn jemand versucht, die archive oder die single Ihres benutzerdefinierten Beitragstyps anzuzeigen, leiten Sie sie einfach auf eine andere Seite um. Fügen Sie dies einfach in Ihre Datei functions.php ein.

add_action( 'template_redirect', 'theme_redirects', 99 );

function theme_redirects() {
    if ( is_post_type_archive( 'post_type_slug' ) || is_singular( 'post_type_slug' ) ) {
     wp_redirect( 'my_url' );
         die();
  }
}

Siehe Referenzen:

is_post_type_archive

is_singular

template_redirect