ユースケースはやや単純です - ここに行きます:
各個人のドメイン名には、そのカテゴリの投稿のみが表示されます。
環境
.htaccess
へのアクセスfunctions.php
へのアクセス2つの異なるソリューション(ユースケースの詳細を編集):
1.)/wp-config.php
ファイルの上部に次を追加します。
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.)次に、これをテーマのfunctions.php
ファイルに追加します。
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;
}
}
}
上記は、http://blogger1.com/category/blogger1/
で始まるURL以外のhttp://blogger1.com
から要求が行われたときに、http://blogger1.com/category/
への302リダイレクトを行います他のURLをサポートするためにいくつかの変更を行います。)
上記がサポートしないのは、 "rewrite"vs. "redirect"ソリューション。あなたがそれを望むなら、それはもう少し複雑です。次のコードにより、is_yoursite_blogger_domain()
関数にマップされているドメインのルートパスにカテゴリページが読み込まれます。もちろん、あなたのis_yoursite_blogger_domain()
関数は既存のカテゴリに対して検証できますが、完全な基準がわからないので、ハードコーディングしました。このコードを関数のtheme.php
ファイルにコピーするか、作成するプラグインの.php
ファイルに配置できます。このコードには、上記の/wp-config.php
ファイルのコードも必要です。
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;
}
そして、実際の2番目の例を示すスクリーンショットを次に示します。
(ソース: mikeschinkel.com )
これにアプローチする別のおそらくより良い方法は、カテゴリの代わりにカスタム分類を使用するか、さらに良いことに、代わりにドメインをユーザー名にマップすることです。そうすれば、作成者の作業が減り、コードや別の分類リストでブロガーリストを管理する必要がなくなります。
あなた "bonus"については、申し訳ありませんが、私はあなたがそこに望むものには従いません。
ドメインエイリアスを作成します
これをwp-configファイルに追加してください。
define('WP_SITEURL','http://'.$_SERVER['SERVER_NAME']);
define('WP_HOME','http://'.$_SERVER['SERVER_NAME']);
あなたのテーマに行き、メインコンテンツをロードするために次のようなものを追加してください(これは1ページに使われます):
$home=get_page_by_path(substr($_SERVER['SERVER_NAME'], 0, strlen($_SERVER['SERVER_NAME'])-4));
echo do_shortcode($home->post_content);
カテゴリ、ページ、またはポストスラグをトップレベルドメインのドメイン名、この場合は4文字のみのトップレベルドメインに変更します。たとえば、.com .net .orgのように、.nl .beや.deのようなものを使いたい場合は、4を3に変更する必要があります。両方を使いたい場合は、条件を追加します。
注: これは1ページでしか機能しない可能性がありますが、私はあなたにそのアイデアを提供するだけです。必要に応じてコードの機能を自分で拡張できます