Wie kann ich WordPress-Beiträge anstelle der 404-Seite anzeigen?

Lesezeit: 3 Minuten

Benutzer-Avatar
1099511627776

Ich habe eine interessante Aufgabe. Ich habe einen benutzerdefinierten 404-Handler für WordPress geschrieben und eine URL extrahiert. Dann habe ich nach einiger Logik eine WordPress-Post-ID, die ich anstelle der 404-Seite anzeigen muss.

Wie kann ich eine WordPress-Beitragsseite anstelle einer 404-Seite anzeigen? Das einzige, was mir einfällt, ist tun

 echo wp_remote_fopen(....<post permalink>...);

Aber gibt es eine alternative Möglichkeit, dies zu tun? Vielen Dank

Ich war nicht in der Lage, dies zu tun, indem ich die 404.php der Vorlage umschrieb. Und ich denke auch, dass das sehr Template-abhängig wäre. Stattdessen habe ich es geschafft, einen Beitrag mithilfe der Aktion template_redirect anzuzeigen. Der Code der Plugin-Funktion sieht folgendermaßen aus:

    function func_404_redirect($query){
        global $wp_query;
        $post = get_post(2);
        $wp_query->queried_object = $post;
        $wp_query->is_single = true;
        $wp_query->is_404 = false;
        $wp_query->queried_object_id = $post->ID;
        $wp_query->post_count = 1;
        $wp_query->current_post=-1;
        $wp_query->posts = array($post);
    }
    add_filter('template_redirect','func_404_redirect');

Der Code, den ich in meinem Thema verwende:

<?php
global $my_theme;
$content_id = $my_theme->option( OPT_GENERAL, '404_page_id', TRUE );
$my_theme->prepare( $content_id, '404' );
get_header();
?>
<!-- [BEGIN 404] -->
<div class="row">
    <?php
        get_sidebar( 'left' );
    ?>
    <div id="primary" class="content-area <?php echo $class; ?>">
        <main id="main" class="site-main" role="main">
            <section class="error-404 not-found">
                <?php
                // Load the content from the selected page
                    $content_loaded = FALSE;
                    if( $content_id > 0 )
                    {
                        $query = new WP_Query( array( 'page_id' => $content_id ) );
                        while( $query->have_posts() )
                        {
                            $query->the_post();
                            get_template_part( 'content', 'page' );
                            $content_loaded = TRUE;
                        }
                        wp_reset_postdata();
                    }
                // Fallback content
                    if( !$content_loaded )
                    {
                ?>
                <header class="page-header">
                    <h4 class="page-title well text-center"><?php _e( 'Page not found', 'my_theme' ); ?></h4>
                </header>
                <div class="page-content alert alert-danger text-center">
                    <p><?php _e( 'It looks like nothing was found at this location', 'my_theme' ); ?></p>
                </div>
                <?php
                    }
                ?>
            </section>
        </main>
    </div>
    <?php get_sidebar( 'right' ); ?>
</div>
<?php get_footer(); ?>
<!-- [END 404] -->

  • Ich stimme zu, dies könnte eine Möglichkeit sein, das zu tun, was ich will. Könnten Sie sich jetzt bitte meine Antwort ansehen und sagen, ob sie verwendbar ist?

    – 1099511627776

    17. November 2015 um 6:34 Uhr

  • Meiner Meinung nach ist die 404.php die richtige Wahl. Die Verwendung dieses Filters könnte in Ordnung sein, aber aus der Referenz der template_redirect Filter sollte unter bestimmten Bedingungen verwendet werden, um auf eine andere Seite umzuleiten, nicht um die Post-Abfrage zu filtern

    – Matte

    17. November 2015 um 7:17 Uhr


Anstelle eines 404-Handlers können Sie eine 404.php-Seite in Ihrem Thema (oder Kind) erstellen, siehe Hinweis – Von dort aus können Sie alles tun, was Sie möchten: eine Liste von Beiträgen laden, einen einzelnen Beitrag laden usw.

  • Nein, ich konnte es in der 404.php des Templates nicht machen. Stattdessen habe ich es durch die Aktion template_redirect geschafft

    – 1099511627776

    16. November 2015 um 15:16 Uhr

  • In einer Vorlage habe ich 404.php verwendet, um einen benutzerdefinierten Beitrag (aus der ID) zu laden, und es hat sehr gut funktioniert

    – Matte

    16. November 2015 um 15:33 Uhr

  • Können Sie ein Beispiel als weitere Antwort auf diese Frage posten?

    – 1099511627776

    16. November 2015 um 18:08 Uhr

1093330cookie-checkWie kann ich WordPress-Beiträge anstelle der 404-Seite anzeigen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy