Как разрешить одному сообщению иметь собственное доменное имя

wordpress.stackexchange https://wordpress.stackexchange.com/questions/4558

Вопрос

Я не уверен, какое решение здесь будет работать лучше всего, но то, что я ищу, - это просто простой способ ввести дополнительный домен через метабокс на экране редактирования страницы, а затем просто выбрать шаблон из шаблонов страниц по умолчанию, используемых WordPress.

Я предполагаю, что должен быть простой способ добиться этого, вручную добавив запись имени A для нового домена и указав ее на тот же IP, который использует основной веб-сайт, а затем с помощью некоторого кода разрешить запросам к этому новому домену загружать определенный идентификатор записи при использовании выбранного вами шаблона страницы.

Я бы хотел, чтобы страница была доступна для обоих доменов, и только новый домен использовал бы определенный шаблон.

Как это можно сделать?

обновленный Я предполагаю, что другим способом было бы сначала настроить одну страницу, чтобы у нее мог быть свой собственный поддомен, используя какой-нибудь встроенный код WordPress, используемый для мультисайта?Другими словами, если пользовательскому поддомену может быть присвоен определенный идентификатор записи, то для нового домена может быть установлена запись cname для этого поддомена...Не уверен, что это лучший способ добиться этого.

Это было полезно?

Решение

Этот код позволит вам установить пользовательское мета-значение, и если доменное имя (или поддомен, если вы отредактируете код) соответствует ему, запрос будет изменен в соответствии с этим сообщением.Шаблон страницы будет использоваться только для этого запроса, а не для запросов через "обычный" URL.

Это не меняет ссылок на этой странице:должны ли они перейти на "обычный" сайт или остаться в поддомене?

Вероятно, вы решаете эту проблему на стороне DNS следующим образом вопрос о неисправности сервера.

define( 'WPSE4558_STANDARD_SERVER', 'www.example.com' );
define( 'WPSE4558_META_KEY', 'domainname' );

add_filter( 'request', 'wpse4558_request' );
function wpse4558_request( $query_vars )
{
    $query_vars['is_subdomain_request'] = false;
    if ( WPSE4558_STANDARD_SERVER != $_SERVER['SERVER_NAME'] ) {
        $query_vars['meta_key'] = WPSE4558_META_KEY;
        // This can also be just the subdomain, if you edit it
        $query_vars['meta_value'] = $_SERVER['SERVER_NAME'];
        $query_vars['is_subdomain_request'] = true;

    }
    return $query_vars;
}

add_action( 'parse_query', 'wpse4558_parse_query' );
function wpse4558_parse_query( &$wp_query )
{
    if ( $wp_query->get( 'is_subdomain_request' ) ) {
        $wp_query->is_home = false;
        $wp_query->is_page = true;
        $wp_query->is_singular = true;
    }
}

add_filter( 'page_template', 'wpse4558_page_template' );
function wpse4558_page_template( $template )
{
    global $wp_query;
    $id = $wp_query->get_queried_object_id();
    if( ! $wp_query->get( 'is_subdomain_request' ) && get_post_meta( $id, WPSE4558_META_KEY ) ) {
        // This is a page that has a subdomain attached, but the current request is not via that subdomain
        // So use the normal template hierarchy, ignore the page template
        $templates = array();
        $pagename = $wp_query->get_queried_object()->post_name;
        if ( $pagename ) {
            $templates[] = "page-$pagename.php";
        }
        if ( $id ) {
            $templates[] = "page-$id.php";
        }
        $templates[] = "page.php";
        $template = locate_template( $templates );
    }
    return $template;
}

Другие советы

Обновленный Ответ

Хорошо, похоже, вам нужна опция на панели записи, которая позволит вам создать запись на сайте A и, при необходимости, также опубликовать эту запись на сайте B.Это звучит как интересный проект, и это должно быть возможно с помощью WordPress и XMLRPC.

Вот несколько примеров кода.Объединив код, приведенный в этой статье, с пользовательским метабоксом, вы сможете достичь своей цели.Удачи вам!

Вот еще несколько хороших ресурсов:

Н.Б.Чтобы гарантировать, что обновления, которые вы вносите в публикации, являются синдицированными, вы также можете сохранить post_ID публикации на удаленном сайте в пользовательском поле.Вероятно, вам также следует внедрить задержку на несколько минут перед отправкой начальной удаленной публикации (я знаю, что я неизбежно вношу изменения сразу после публикации практически всего, но это может быть только у меня).


Оригинальный ответ приведен ниже


Либо (i) настройте .htaccess с помощью mod_rewrite, чтобы замаскировать URL-адрес публикации, (ii) объедините ваши публикации на нескольких сайтах, используя RSS с помощью wp_insert_post, либо (iii) создайте папку в вашей теме под названием пост-редирект и добавьте к нему следующие файлы:

  • post-redirect-meta.php - Создайте мета-поле под названием "URL перенаправления публикации" с полем ввода текста, которое будет сохранено в вашей таблице postmeta.

  • post-redirect.php - Создайте шаблон темы под названием "Перенаправление публикации", который условно (на основе HTTP-реферера) выполняет перенаправление 301, используя целевой URL, сохраненный в мета-поле "URL перенаправления публикации" на вашей странице редактирования публикации.Это позволит вам отобразить исходное сообщение во фрейме на новом домене.

Исходя из ваших заявленных требований, они кажутся самыми простыми решениями, но далеко не ясно, что это ваше намерение (напримерчто делает "Я бы хотел, чтобы страница была доступна для обоих доменов" имею в виду?Работают ли оба сайта под управлением WP?Каковы деловые отношения между этими двумя сайтами?).Было бы полезно, если бы вы более четко объяснили конечный результат, которого вы пытаетесь достичь, и список ваших наиболее важных проблем.Каким бы ни был ваш ответ на этот вопрос, если возможно, пожалуйста, также объясните "почему".

Код для достижения этой цели не сложен, но прежде чем приступать к решению проблем, пожалуйста, уточните, чего вы пытаетесь достичь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top