Le cas d'utilisation est un peu simple - voici:
Le nom de domaine de chaque personne ne montre que les publications de sa catégorie, c.-à-d.
Environnement
.htaccess
functions.php
Voici deux solutions différentes (éditer les spécificités de votre cas d'utilisation) :
1.) En haut de votre fichier /wp-config.php
, ajoutez ce qui suit:
if ( is_yoursite_blogger_domain( $_SERVER['SERVER_NAME'] ) ) {
$domain = str_replace( 'www.', '', $_SERVER['SERVER_NAME'] );
define( 'WP_SITEURL', 'http://' . $domain );
define( 'WP_HOME', 'http://' . $domain );
} else if ( ! is_main_domain( $_SERVER['SERVER_NAME'] ) ) {
header( "Location:http://{$yoursite_main_domain}", true, 301 );
exit;
}
function is_main_domain( $domain ) {
$domain = str_replace( 'www.', '', $_SERVER['SERVER_NAME'] );
return strpos( $domain, 'maindomain.com' ) !== false;
}
function is_yoursite_blogger_domain( $domain ) {
$domain = str_replace( 'www.', '', $_SERVER['SERVER_NAME'] );
return in_array( $domain, array(
'blogger1.com',
'blogger2.com',
'blogger3.com',
'blogger4.com',
'blogger5.com',
'uncategorized.dev', // Only here for use on my own test site
) );
}
2.) Ajoutez ensuite ceci au fichier functions.php
de votre thème:
add_action( 'template_redirect', 'yoursite_template_redirect' );
function yoursite_template_redirect() {
$path = $_SERVER['REQUEST_URI'];
if (strpos($path,"/category/") === false) {
$domain = str_replace( 'www.', '', $_SERVER['SERVER_NAME'] ) ;
$category = str_replace( '.com', '', $domain );
$category = str_replace( '.dev', '', $domain ); // Only for my own test site
$location = "http://{$domain}/category/{$category}/" ;
wp_safe_redirect( $location );
exit;
}
}
}
Ce qui précède effectuera une redirection 302 vers http://blogger1.com/category/blogger1/
lorsqu’une requête est faite pour une URL http://blogger1.com
autre que celle commençant par http://blogger1.com/category/
(vous devez apporter certaines modifications pour prendre en charge d’autres URL.)
Ce que ce qui précède ne prend pas en charge est "réécrire" vs. a "redirect" solution. Si vous voulez cela, c'est un peu plus compliqué. Le code suivant entraînera le chargement de la page de catégorie dans le chemin racine de tout domaine mappé dans votre fonction is_yoursite_blogger_domain()
. Bien sûr, votre fonction is_yoursite_blogger_domain()
pourrait valider par rapport aux catégories existantes, mais je ne connais pas tous les critères, je l'ai donc codée en dur. Vous pouvez copier ce code dans le fichier theme.php
de votre fonction ou le placer dans un fichier .php
d'un plug-in en cours d'écriture. Notez que ce code requiert également le code du fichier /wp-config.php
ci-dessus:
add_action( 'category_link', 'yoursite_category_link', 11, 2 );
function yoursite_category_link( $category_link, $category_id ) {
// Make sure any blogger category links are truncated to the root
$parts = explode( '/', $category_link );
if ( is_yoursite_blogger_domain( $parts[2] ) ) {
// if %category% in http://%domain%/category/%category%/
// equals %domain% minus the 'com' extension
if ( "{$parts[4]}." == substr( $parts[2], 0, strlen( $parts[4] ) + 1 ) ) {
$category_link = "http://{$parts[2]}/"; // Strip 'category/%category%/'
}
}
return $category_link;
}
add_action( 'init', 'yoursite_init' );
function yoursite_init() {
// Remove the canonical redirect to the category page
// if %category% in http://%category%.%ext%/ is a blogger category.
if ( is_yoursite_blogger_domain( $_SERVER['SERVER_NAME'] ) ) {
$parts = explode( '/', strtolower( $_SERVER['REQUEST_URI'] ) );
if (count($parts) > 1) {
$category_base = get_option( 'category_base' );
if ( empty( $category_base ) )
$category_base = 'category';
if ( $category_base == $parts[1] ) {
remove_filter( 'template_redirect', 'redirect_canonical' );
}
}
}
}
add_action( 'template_redirect', 'yoursite_template_redirect' );
function yoursite_template_redirect() {
// Redirect any http://%category%.%ext%/category/%category%/ to http://%category%.%ext%/
if ( is_yoursite_blogger_domain( $_SERVER['SERVER_NAME'] ) ) {
$category_base = get_option('category_base');
if (empty($category_base))
$category_base = 'category';
$parts = explode( '/', strtolower( $_SERVER['REQUEST_URI'] ) );
if ( $category_base == $parts[1] &&
"{$parts[2]}." == substr( $_SERVER['SERVER_NAME'], 0, strlen( $parts[2] ) + 1 ) ) {
wp_safe_redirect( "http://{$_SERVER['SERVER_NAME']}/", 301 );
exit;
}
}
}
add_action( 'request', 'yoursite_request' );
function yoursite_request($query_vars) {
// If %category% in http://%category%.%ext%/ is a blogger category set the
// 'category_name' query var to tell WordPress to display the category page.
$domain = $_SERVER['SERVER_NAME'];
if ( is_yoursite_blogger_domain( $domain ) ) {
$path = $_SERVER['REQUEST_URI'];
if ( strpos( $path, "/category/" ) === false ) {
$domain = str_replace( 'www.', '', $domain ) ;
$category_name = substr( $domain, 0, strrpos( $domain, '.' ) );
$query_vars = array( 'category_name' => $category_name );
}
}
return $query_vars;
}
Et voici une capture d'écran pour montrer le deuxième exemple en action:
(source: mikeschinkel.com )
Une autre meilleure méthode serait probablement d’utiliser une taxonomie personnalisée au lieu de catégories ou, mieux encore, d’affecter le domaine à un nom d’utilisateur. De cette manière, vous réduisez le travail des auteurs et vous n'avez pas à vous soucier de maintenir la liste des blogueurs dans le code ou dans une liste de taxonomie séparée.
Quant à toi "bonus" , désolé mais je ne suis pas ce que tu veux là-bas.
Créer le ou les alias de domaine
Ajoutez ceci à votre fichier wp-config:
define('WP_SITEURL','http://'.$_SERVER['SERVER_NAME']);
define('WP_HOME','http://'.$_SERVER['SERVER_NAME']);
Accédez à votre thème et ajoutez quelque chose comme ceci pour charger le contenu principal (utilisé pour un document d'une page):
$home=get_page_by_path(substr($_SERVER['SERVER_NAME'], 0, strlen($_SERVER['SERVER_NAME'])-4));
echo do_shortcode($home->post_content);
remplacez la catégorie, la page ou le slug par le nom de domaine min du domaine de premier niveau, dans ce cas un domaine de premier niveau composé uniquement de 4 caractères. Par exemple: .com .net .org si vous voulez utiliser quelque chose comme .nl .be ou .de, changez le 4 en 3. Si vous voulez utiliser les deux, vous devez ajouter des conditions.
Remarque: Cela peut ne fonctionner que pour une page, mais je ne vous en donne que l'idée. Vous pouvez étendre les fonctionnalités du code vous-même si nécessaire