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.
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.
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=""
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=""
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.
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.
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
etfooter-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.
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é.
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
:
footer.php
régulierif ( defined( 'WP_INSTALLING' ) and WP_INSTALLING )
{
locate_template( 'footer-activate.php', TRUE, TRUE );
return;
}
footer-activate.php
<?php # -*- coding: utf-8 -*-
declare( encoding = 'UTF-8' );
wp_footer();
L'ensemble du processus est la façon de hacky. Je suis sûr qu’il existe de meilleurs moyens de gérer cela.
J'ai rendu la page d'activation identique au reste du site en ajoutant ceci:
require_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
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);
}