it-swarm.com.de

wie verwende ich eine andere Domain/Subdomain für Autoren/Kategorien auf einer Site?

Ich bin mir nicht sicher, ob ich diese Frage richtig formuliert habe ...

Meine Frau und ich haben ein Blog, family.com in diesem Beispiel, zu dem wir beide beitragen.

Ich möchte, dass family.com alle Blogeinträge anzeigt.

me.family.com würde nur Posts anzeigen, die ich verfasse, und her.family.com würde nur Posts anzeigen, die sie verfasst. später werden wir kid1.family.com und so weiter hinzufügen ...

außerdem machen sie/ich/wir manchmal Projekte, die über einen Beitrag hinausgehen. project1.com würde nur alle Beiträge in der Kategorie 'project1' anzeigen. Im Gegensatz zu Autoren hätten jedoch nur bestimmte Kategorien ihre eigenen Domainnamen.

wp-subdomains-revisited plus domain-mapping-system zusammen verwendet, scheint dem am nächsten zu sein, wonach ich suche, aber sie sind veraltet und ich bin mir sicher, dass ich sie nicht selbst replizieren konnte.

Edit 1: Ich fand diese wunderbare Antwort von mikeschinkel : Mehrere Domain-Namen - Ein WP Installieren (Nicht-Multisite) - Standard Jeder Domain-Name zum Kategoriearchiv

Edit 2: Ich habe mikeschinkels Code auf meiner Seite. Großartig! Jetzt habe ich versucht, es so zu ändern, dass es auch mit Subdomains funktioniert. Das ist nicht so gut gelaufen - nur eine weiße Seite wird geladen, wenn meine Änderungen vorgenommen wurden.

Edit 3: Die Seite wird wieder mit funktionierenden Domains und Subdomains geladen! Wie aufregend!

Als nächstes müssen alle Links ihre jeweilige Domain/Subdomain verwenden. Beispielsweise sollte ein Beitrag holiday geschrieben von me und in der Kategorie project1 als family.com/holiday , me erscheinen .family.com/holiday oder project1.com/holiday je nachdem, von welcher Sub/Domain aus es verlinkt ist. Anregungen wäre sehr dankbar !!!

(auch muss es mit WPML funktionieren -> me.family.com/holiday sollte übersetzt her.family.com/ 休 日/... erschreckend werden! )

Bearbeiten 4: Nur um dies zu verdeutlichen, sollte dies funktional nicht anders sein als das Anzeigen eines einzelnen Autors oder Kategoriearchivs. Der einzige Unterschied besteht darin, dass das Archiv eine eigene Sub/Domain hat.

Außerdem ist meine TLD .is ... und meine Domain ist mein Familienname. Das heißt, meine URL ist auf halbem Weg zu einem Satz -> _adam.rabbit.is/...

Das Ziel ist eine URL, die für jede Beziehung spezifisch ist:
adam.rabbit.is/gardening
wife.rabbit.is/coding
Hase reist

Edit 5: Code aktualisiert - funktioniert jetzt meistens. Ich möchte es nur ungern als gelöst markieren, da ich nicht die Basiskategorie entfernt oder separate Überschriften/Titel für jede Seite hinzugefügt habe ... aber wie funktioniert dieser Code und löst die Hauptfrage des Beitrags. Ich hoffe, jemand anderes findet es nützlich :)

Edit 6: Ich habe ein nettes Plugin namens wp-no-base-permalink gefunden, das die Kategoriebasis entfernt. Ich habe den Code aktualisiert, um mit diesem Plugin zu arbeiten. Wenn ich nun adam.rabbit.is/uncategorized eingebe, werden alle nicht kategorisierten Beiträge von mir angezeigt - genau das, wonach ich gesucht habe!

antwort unten ...

1
adammoore

wp-config.php

if ( is_alt_domain( $_SERVER['SERVER_NAME'] ) ) {
    $domain = str_replace( 'www.', '', $_SERVER['SERVER_NAME'] );
    define( 'WP_SITEURL', 'http://www.' . $domain );
    define( 'WP_HOME', 'http://www.' . $domain );
} else if (is_sub_domain( $_SERVER['HTTP_Host'] ) ) {
    $domain = "{$_SERVER['HTTP_Host']}";
    define( 'WP_SITEURL', 'http://' . $domain );
    define( 'WP_HOME', 'http://' . $domain );
} else if (! (is_main_domain( $_SERVER['SERVER_NAME']) ) ) {
    Header( "HTTP/1.1 301 Moved Permanently" );
    Header( "Location:http://family.com", true, 301 );
    exit;
}
function is_main_domain( $domain ) {
    $domain = $_SERVER['HTTP_Host'] ;
    return strcmp( $domain, my_main_domain() ) == 0 ;
}
function is_sub_domain ( $domain ) {
    $domain = str_replace( my_main_domain(), '', $_SERVER['HTTP_Host'] );
    return in_array( substr( $domain, 0, -1), sub_domains() );
}
function is_alt_domain( $domain ) {
    $domain = str_replace( 'www.', '', $_SERVER['SERVER_NAME'] );
    $domain = substr( $domain, 0, strrpos( $domain, '.') );
    return array_key_exists( $domain, alt_domains() );
}
function sub_domains() {
    return array(
        'me',
        'her',
        'kid1',
    );
}
function alt_domains() {
    return array(
        'project1' => 'com',
        'project2' => 'com',
        'project3' => 'is',
    );
}
function my_main_domain() {
    return 'family.com';
}

functions.php

// this seems to be important
update_option('siteurl','http://' . $_SERVER["HTTP_Host"]);
update_option('home','http://' . $_SERVER["HTTP_Host"]);

add_action( 'category_link', 'yoursite_category_link', 11, 2 );
function yoursite_category_link( $category_link, $category_id ) {
    $parts = explode( '/', $category_link );
    // if %category% in http://%domain%/%category%/
    // is in alt_domains() update the category_link
    if ( array_key_exists("{$parts[3]}", alt_domains() ) ) {
        $tld = alt_domains()[$parts[3]];
        $category_link = "http://www.{$parts[3]}.{$tld}/"; // Strip 'category/%category%/'
    }
    return $category_link;
}

add_action( 'author_link', 'yoursite_author_link', 11, 2 );
function yoursite_author_link( $author_link, $author_id ) {
    $parts = explode( '/', $author_link );
    // if %author% in http://domain/author/%author%/
    // is in sub_domains() update the author_link
    if ( "{$parts[3]}" == "author" && in_array("{$parts[4]}", sub_domains() ) ) {
        $author_link = "http://{$parts[4]}.family.com/"; // Strip 'author/%author%/'
    } else {
        $author_link = "http://family.com/author/{$parts[4]}"; // Strip 'author/%author%/'
    }
    return $author_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_alt_domain( $_SERVER['SERVER_NAME'] ) || is_sub_domain( $_SERVER['HTTP_Host'] ) ) {
        $parts = explode( '/', strtolower( $_SERVER['REQUEST_URI'] ) );
        if ( (count($parts) > 1) &&  ( array_key_exists("{$parts[1]}",alt_domains() ) || ( "author" == $parts[1] && in_array("{$parts[2]}", sub_domains() ) ) ) ) {
            remove_filter( 'template_redirect', 'redirect_canonical' );
        }
    }
}

add_action( 'template_redirect', 'yoursite_template_redirect' );
function yoursite_template_redirect() {
    // Redirect any http://%domain%.%ext%/%category%/ to http://%category%.%ext%/
    // and any http://%domain%.%ext%/author/%author%/ to http://%author%.%domain%.%ext%
    $parts = explode( '/', strtolower( $_SERVER['REQUEST_URI'] ) );
    if ( array_key_exists( "{$parts[1]}", alt_domains()) ) {
        $tld = alt_domains()[$parts[1]];
        wp_redirect( "http://www.{$parts[1]}.{$tld}/", 301 );
        exit;
    } else if ( 'author' == $parts[1] && in_array("{$parts[2]}", sub_domains() ) ) {
        wp_redirect( "http://{$parts[2]}.famliy.com/", 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.
    if ( is_alt_domain( $_SERVER['SERVER_NAME']) || is_sub_domain( $_SERVER['HTTP_Host'] ) ) {
        $category_domain = str_replace( 'www.', '', $_SERVER['SERVER_NAME'] );
        $category_domain = substr( $category_domain, 0, strrpos( $category_domain, '.' ) );
        $author_name = substr( $_SERVER['HTTP_Host'], 0, strpos( $_SERVER['HTTP_Host'], '.' ) );
        $parts = explode( '/', $_SERVER['REQUEST_URI'] );
        $category_name = "{$parts[1]}";
        if ( array_key_exists($category_domain, alt_domains()) ) {
            if ( strlen( $category_name ) < 1  ) {
                $query_vars = array( 'pagename' => $category_domain.'-page' );
            } else if ( term_exists("{$category_name}", 'category') ) {
                $query_vars = array(
                    'category__and' => array(
                        get_category_by_slug($category_domain)->term_id,
                        get_category_by_slug($category_name)->term_id
                    )
                );
            }
        } else if ( in_array( $author_name, sub_domains() ) ) {
            if ( strlen( $category_name ) < 1  ) {
                $query_vars = array( 'pagename' => $author_name.'-page' );
            } else if (term_exists("{$category_name}", 'category') ) {
                $query_vars = array(
                    'category_name' => $category_name,
                    'author_name' => $author_name
                );
            }
        }
    }
    return $query_vars;
}

Und natürlich müssen Sie auch Ihre Subdomains (oder *) auf Ihrem Nameserver auf Ihre WordPress-Installation verweisen. Sie müssen auch einen virtuellen Host (Nginx) für alle anderen von Ihnen verwendeten Domänen hinzufügen ... und Sie müssen CORS einrichten.

Als Randnotiz, diese Antwort in Verbindung mit meiner nächsten Antwort/Frage - Wie man eine statische Kategorie/Autorenseite hat? - sollte meine Absichten, eine facettenreiche Seite zu haben, etwas klarer machen :)

0
adammoore

Gibt es einen Grund, warum Sie Subdomains über "Unterverzeichnissen" benötigen (ich habe das in Anführungszeichen gesetzt, weil es eigentlich kein echtes Unterverzeichnis ist ... lesen Sie weiter)? Dies wäre viel einfacher, wenn Sie sich für family.com/me, family.com/her, family.com/project1 usw. entscheiden würden.

Wenn Sie diesen Weg gehen, können Sie mit WP_Query // Seitenvorlagen //erstellen, die benutzerdefinierte Schleifen enthalten, und sie den Seiten im WP Admin zuweisen . Wenn Sie hübsche Permalinks verwenden, können Sie der Seite einen beliebigen Namen geben, und Sie erhalten einen gut aussehenden Link.

Ich kann mir ehrlich gesagt keinen Weg vorstellen, wie dies mit Subdomains möglich wäre, aber das ist weniger eine WP Frage als vielmehr eine Domain/Server Management Frage.

1
brianjohnhanna

Der beste Weg, um die Trennung von Inhalten zwischen Websites zu erreichen, ist die Trennung der DBs. Als Faustregel gilt, dass es einfacher ist, Inhalte zu aggregieren, die getrennt, durchsucht, in RSS-Feeds, beim Teilen von Inhalten und bei der Suchmaschinenoptimierung auf verschiedenen Subdomänen unterschiedlich verhalten müssen Jungs".

Die einfachste Lösung ist, WordPress in einem Netzwerkmodus zu verwenden und dann überall dort, wo Sie schreiben oder ein Plugin suchen, das automatisch Inhalte aus dem "Quellblog" auf die richtige Aggregationssite importiert.

0
Mark Kaplun

Zugegebenermaßen eine clevere Lösung, die im Rahmen Ihrer ursprünglichen Frage gut funktioniert. Für zukünftige Leser mit ähnlichen Anwendungsfällen würde ich jedoch vorschlagen, auch eine Installation mit mehreren Standorten (Netzwerk) zu erstellen.

Bei der reinen Verwendung für Subdomain-Sites (dh ohne Domänenzuordnung) ist das Erstellen und Verwalten nicht wesentlich schwieriger als bei einer Standardinstallation. Sie haben dann einen viel größeren Spielraum, um jede Unterwebsite zu entwickeln, wie Sie es in Zukunft möchten, und viel mehr Flexibilität (völlig unterschiedliche Themen usw.). Ganz zu schweigen von einer logischeren und einfacher zu verwaltenden Anordnung der Inhalte. Multisite ist auch weitaus erweiterbarer - fügen Sie Domain-Zuordnungen hinzu, und Sie können Ihre Unternehmenswebsite, andere Freunde, Sportgruppen usw. zu einem Hosting-Konto und einer Administratoranmeldung hinzufügen.

Das ThreeWP Broadcast-Plugin ist eine großartige Lösung für die Veröffentlichung von Posts auf Websites, die für das Thema usw. geeignet sind, und einige Hintergrundinformationen dazu veranschaulichen den Umfang von Multisite-Posts.

Nur mein Gefühl, dass die meisten Besucher (aufgrund des Titels) in Zukunft auf diesen Beitrag stoßen werden, für die Multisite zwar gut geeignet ist, aber oft übersehen wird.

http://codex.wordpress.org/Create_A_Network

http://plugins.plainview.se/threewp-broadcast/

0
Steve82