web-dev-qa-db-fra.com

Filtre pour changer le contenu de la page 404

J'ai créé des règles de réécriture personnalisées. Ces règles vont maintenant à la page 404 comme prévu. Je peux utiliser l'action hook template_redirect pour modifier le modèle correspondant à query_var.

Mais je ne veux pas créer de modèles de fichiers séparés car la structure de la page dépend du thème utilisé. Je veux simplement changer le contenu et le titre. J'ai essayé de modifier le contenu à l'aide du filtre the_content, mais il semble que le filtre ne soit même pas appelé pour une page 404.

J'ai également essayé de charger le modèle index.php, puis d'utiliser le filtre the_content, mais cela ne fonctionne pas non plus.

Y'a-t-il une quelconque façon de réussir cela?

2
sakibmoon

Il semble que ce ne soit pas possible du point de vue de Wordpress, comme l'a souligné @Milo

Il n'y a pas de contenu à modifier sur une page 404, je suggère une approche différente dans laquelle vous fournissez une option permettant de désigner une page réelle comme cible pour ces pages virtuelles.

Donc, je devais changer de plan. Depuis l'admin du plugin, j'ai gardé l'option d'intégrer une page en tant que gestionnaire pour toutes les requêtes et d'envoyer différentes variables de requête de contenu correspondant.

0
sakibmoon

J'ai un plugin 404 qui fait essentiellement ce dont vous avez besoin (si je comprends bien), mais il crée une nouvelle page (utilisant les mêmes modèles de votre thème) et l'enregistre comme la page 404. Si vous avez déjà une page WordPress existante (PAS le fichier php), vous pouvez utiliser un code similaire au suivant pour le transformer en votre nouvelle page 404.Remarque:Vous devez le personnaliser un peu. Voir les notes dans le code ci-dessous.

//redirect on 404
function redirect_404() {
    global $options, $wp_query;
    if ($wp_query->is_404) {
        $page_title = $this->options['404_page_title'];//replace with your page title
        $redirect_404_url = esc_url(get_permalink(get_page_by_title($page_title))); 
        wp_redirect( $redirect_404_url );
        exit();
    }
}

//Make sure proper 404 status code is returned
function is_page_function() {
    global $options;
    $page_title = $this->options['404_page_title'];//replace with your page title
    if (is_page($page_title)) {
        header("Status: 404 Not Found");
    }
    else {
        return;
    }
}

//Register Hooks
add_action( 'template_redirect', 'redirect_404');
add_action('template_redirect', 'is_page_function');

Si vous voulez récupérer le code complet du plugin, vous pouvez le faire ici: http://wordpress.org/plugins/404-silent-salesman/

J'espère que cela pourra aider!

1
Jeremiah Prummer