web-dev-qa-db-fra.com

Personnalisation de wp-activate.php

Est-ce que quelqu'un sait comment je peux personnaliser wp-activate.php?

Il enveloppe le contenu dans <div id="content" class="widecolumn">, mais dans mon thème le wrapper principal est <div id="main">

Vraisemblablement, je pourrais simplement appeler div#content.widecolumn pour qu'il soit identique à div#main. Mais je suis curieux de savoir si quelqu'un sait comment personnaliser ce fichier sans le modifier.

5
nothingtosee

Vous avez raison, c'est très hacky.

Ce que je finis par faire fut de créer deux nouveaux modèles de page Register et Activer et de créer deux nouvelles pages WordPress à l’aide de ces modèles, puis d’utiliser un filtre dans mon fichier functions.php pour modifier le comportement wpmu_signup_user_notification .

Les utilisateurs s'inscriront sur cette nouvelle page d'inscription et recevront un courrier électronique renvoyant à la nouvelle page d'activation.

Modèle d'enregistrement

Dans le modèle Register, j'ai copié le code à partir de wp-signup.php et supprimé les lignes suivantes du début:

require( dirname(__FILE__) . '/wp-load.php' );    
require( './wp-blog-header.php' );

J'ai également changé <div id="content" class="widecolumn> en <div id="main"> afin de s'intégrer au modèle.

J'ai également changé la valeur d'action du formulaire de action="<?php echo network_site_url('wp-activate.php'); ?>" à action=""

Activer le modèle

Dans le modèle d'activation, j'ai copié le code de wp-activate.php et supprimé les lignes suivantes du début:

define( 'WP_INSTALLING', true );  
/** Sets up the WordPress Environment. */  
require( dirname(__FILE__) . '/wp-load.php' );  
require( './wp-blog-header.php' );

J'ai changé <div id="content" class="widecolumn> en <div id="main"> afin de s'intégrer au modèle.

Encore une fois, j'ai changé toutes les actions de formulaire en action=""

Fonctions.php

J'ai copié le wpmu_signup_user_notification function de wp-includes/ms-functions.php dans mon fichier functions.php.

Renommé si quelque chose d'unique: af_wpmu_signup_user_notification

Supprimé les éléments suivants:

if ( !apply_filters('wpmu_signup_user_notification', $user, $user_email, $key, $meta) )
        return false;

J'ai changé la ligne site_url( "wp-activate.php/?key=$key" ) en site_url( "activate/?key=$key" ) puisque activate est le slug de page de ma page d'activation.

Ensuite, je l'ai appliqué en tant que filtre avec le code suivant:

add_filter('wpmu_signup_user_notification', 'af_wpmu_signup_user_notification', 10, 4);

Cela semble fonctionner correctement - je peux modifier ces pages à volonté sans affecter le coeur. Bien que cela aussi se sent un peu trop hacky.

4
nothingtosee

N'oubliez pas de modifier return en false dans votre af_wpmu_signup_user_notification. Sinon, deux mails seront envoyés à l'utilisateur. L'un avec l'ancien lien et l'autre avec le nouveau.

3
Ediran

Le problème principal ici est le suivant: wp-activate.php inclut votre header.php mais pas le functions.php. Vous pouvez obtenir des erreurs fatales si vous utilisez des fonctions dans votre en-tête qui sont définies dans votre functions.php.

J'utilise deux nouveaux fichiers dans mes thèmes:

  • header-activate.php et
  • footer-activate.php

Lorsque wp-activate.php est appelé, la constante WP_INSTALLING est définie sur TRUE (sans raison évidente). J'utilise cela dans mon header.php: j'inclus le functions.php et appelle ma fonction de configuration.

Début de mon header.php régulier

// on wp-activate.php this is FALSE
if ( ! function_exists( 't5_setup' ) )
{
    require_once dirname( __FILE__ ) . '/functions.php';
    t5_setup();
}
if ( defined( 'WP_INSTALLING' ) and WP_INSTALLING )
{
    locate_template( 'header-activate.php', TRUE, TRUE );
    return;
}

J'empêche donc l'exécution du fichier d'en-tête habituel et j'utilise un fichier personnalisé.

Mon header-activate.php

<?php # -*- coding: utf-8 -*-
declare( encoding = 'UTF-8' );
?>
<!Doctype html>
<html <?php language_attributes(); ?> <?php body_class( ' ' ); ?>>
<head>
    <title><?php
    $current_title = wp_title( '|', FALSE, 'right' );
    print empty ( $current_title ) ? get_bloginfo( 'name' ) : $current_title . get_bloginfo( 'name' );
    ?></title>
    <meta http-equiv="X-UA-Compatible" content="chrome=1,IE=Edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <?php
    wp_head();
    ?>
    <style>
#content
{
    background:     #333;
    background:     rgba(0, 0, 0, .7);
    border:         1px solid #000;
    border-radius:  10px;
    box-shadow:     0px 0px 10px #000;
    color:          #eee;
    font:           1em/1.45 sans-serif;
    margin:         140px auto;
    max-width:      400px;
    padding:        40px;
}
#key
{
    background:     #ccc;
    background:     rgba(255, 255, 255, .5);
    border:         0;
    color:          #eee;
    width:          100%;
}
#key:focus
{
    background:     #fff;
    color:          #000;
}
.submit
{
    text-align:     right;
}
#submit
{
    background:     #222;
    -ms-filter:         "progid:DXImageTransform.Microsoft.gradient(startColorstr='#444444', endColorstr='#222222')";
    background-image:   -o-linear-gradient(#444444,#222222);
    background:         -webkit-linear-gradient(#444444,#222222);
    background:         -moz-linear-gradient(#444444,#222222);
    border:         2px solid #333;
    border-color:   #4d4d4d #333 #202020;
    border-radius:  7px;
    color:          #eee;
    width:          auto;
}
    </style>
</head>
<body>

Comme vous pouvez le constater, je n’utilise aucune feuille de style externe. Pas nécessaire. Mais l'image d'arrière-plan personnalisée est toujours active.

Je fais la même chose dans mon footer.php:

Début du footer.php régulier

if ( defined( 'WP_INSTALLING' ) and WP_INSTALLING )
{
    locate_template( 'footer-activate.php', TRUE, TRUE );
    return;
}

Complétez footer-activate.php

<?php # -*- coding: utf-8 -*-
declare( encoding = 'UTF-8' );
wp_footer();

Résultat

enter image description here


L'ensemble du processus est la façon de hacky. Je suis sûr qu’il existe de meilleurs moyens de gérer cela.

3
fuxia

J'ai rendu la page d'activation identique au reste du site en ajoutant ceci:

require_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
0
nicoblog

Je voulais juste modifier une partie du texte afin de pouvoir filtrer gettext en utilisant ce code placé dans mu-plugins/my-functions.php. Cela ne fonctionnera PAS si vous insérez ceci dans un plugin classique, mais vous pouvez le placer dans functions.php de votre thème de base.

function rgbook_activate_page_action() {
    add_filter('ngettext', 'rgbook_activate_page_change_text' );
    add_filter('gettext', 'rgbook_activate_page_change_text' );
}
add_action( 'activate_header', 'rgbook_activate_page_action' );

function rgbook_activate_page_change_text( $text ) {
    $search = '<a href="%1$s">Log in</a> or go back to the <a href="%2$s">homepage</a>.';
    $replace = '<a href="%1$s">Click here to log in now</a>.';

    return str_ireplace($search, $replace, $text);
}
0
dwenaus