wake-up-neo.com

Mehrere Domainnamen - Einer WP Installation (nicht für mehrere Standorte) - Standardmäßig wird jeder Domänenname in das Kategoriearchiv übernommen

Anwendungsfall ist etwas einfach - hier geht's:

  1. Fünf Personen teilen sich eine WordPress-Installation - nicht mehrere Benutzer
  2. Jede Person bloggt und ordnet ihre Beiträge einer eigenen Kategorie zu
  3. Jede Person hat ihren eigenen Domainnamen
  4. Alle Domänennamen werden auf denselben WP Installationsordner verwiesen oder dort geparkt
  5. Der Domain-Name jeder Person zeigt nur die Posts aus ihrer Kategorie an, d. H.

  6. Google-freundliche Indizierung für jeden Domain-Namen
  7. Schreibe die Lösung lieber um als umzuleiten, aber umzuleiten ist akzeptabel
  8. Ein "Master" -Konto kann über die "Haupt" -Domain-Anmeldung jeden Blogger-Beitrag veröffentlichen oder bearbeiten.
  9. Bonus - wenn dies auf benutzerdefinierte Beitragstypen ausgeweitet werden könnte

Umgebung

  1. Eine Installation der neuesten Version von WP (nicht für mehrere Benutzer)
  2. Hübsche Permalinks
  3. Cpanel - Domain-Parking einrichten
  4. Keine Subdomains
  5. Zugriff auf .htaccess
  6. Zugriff auf functions.php
3
aj martin

Hier sind zwei verschiedene Lösungen (Bearbeiten der Details für Ihren Anwendungsfall) :

Redirect durchführen:

1.) Fügen Sie am Anfang Ihrer /wp-config.php-Datei Folgendes hinzu:

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.) Dann füge dies zu der functions.php Datei deines Themas hinzu:

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;
    }
  }
}

Das oben Genannte führt eine 302-Umleitung zu http://blogger1.com/category/blogger1/ durch, wenn eine Anforderung für einen anderen URL http://blogger1.com als denjenigen erfolgt, der mit http://blogger1.com/category/ beginnt. (Sie mussten einige Änderungen vornehmen, um andere URLs zu unterstützen.)

Ein "Rewrite" ausführen:

Was oben nicht unterstützt wird ist "rewrite" vs. eine "redirect" Lösung. Wenn Sie das wollen, ist es etwas komplizierter. Der folgende Code führt dazu, dass die Kategorieseite im Stammpfad für jede Domain geladen wird, die in Ihrer Funktion is_yoursite_blogger_domain() zugeordnet ist. Natürlich könnte Ihre Funktion is_yoursite_blogger_domain() mit vorhandenen Kategorien validiert werden, aber ich kenne nicht die vollständigen Kriterien, also habe ich sie nur hart codiert. Sie können diesen Code in die theme.php-Datei Ihrer Funktion kopieren oder in eine .php-Datei eines Plugins einfügen, das Sie möglicherweise schreiben. Beachten Sie, dass für diesen Code auch der Code in der obigen Datei /wp-config.php erforderlich ist:

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;
}

Und hier ist ein Screenshot, der das zweite Beispiel in Aktion zeigt:

 Screenshot of a WordPress site using hooks to enable a category page to be displayed in the URL root for selected categories 
(Quelle: mikeschinkel.com )

Eine andere, wahrscheinlich bessere Möglichkeit, dies zu erreichen, wäre die Verwendung einer benutzerdefinierten Taxonomie anstelle von Kategorien oder, noch besser, die Zuordnung der Domäne zu einem Benutzernamen. Auf diese Weise sind die Autoren entlastet und Sie müssen sich keine Gedanken mehr darüber machen, die Blogger-Liste im Code oder in einer separaten Taxonomieliste zu verwalten.

Wie für Sie "Bonus" , sorry, aber ich verfolge nicht, was Sie dort wollen.

4
MikeSchinkel
  1. Erstellen Sie den Domain-Alias

  2. Fügen Sie dies Ihrer wp-config-Datei hinzu:

    define('WP_SITEURL','http://'.$_SERVER['SERVER_NAME']);
    define('WP_HOME','http://'.$_SERVER['SERVER_NAME']);
    
  3. Gehen Sie zu Ihrem Thema und fügen Sie so etwas hinzu, um den Hauptinhalt zu laden (dies wird für einen Pager verwendet):

    $home=get_page_by_path(substr($_SERVER['SERVER_NAME'], 0, strlen($_SERVER['SERVER_NAME'])-4));
    echo do_shortcode($home->post_content);
    
  4. ändern Sie die Kategorie, Seite oder den Post-Slug in den Domain-Namen, mindestens jedoch in die Toplevel-Domain. In diesem Fall handelt es sich um eine Toplevel-Domain mit nur 4 Zeichen. Beispiel: .com .net .org Wenn Sie etwas wie .nl .be oder .de verwenden möchten, sollten Sie die 4 in eine 3 ändern. Wenn Sie beide verwenden möchten, müssen Sie Bedingungen hinzufügen.

Hinweis: Dies funktioniert möglicherweise nur für eine Seite, aber ich gebe Ihnen nur die Idee. Sie können die Funktionalität des Codes bei Bedarf selbst erweitern

0
Fleuv