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


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

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

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

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

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

Author: NetConstructor.com, 2010-11-26

2 answers

Этот код позволит вам задать пользовательское мета-значение, и если доменное имя (или поддомен, если вы редактируете код) соответствует ему, запрос будет изменен в соответствии с этим сообщением. Шаблон страницы будет использоваться только для этого запроса, а не для запросов по "обычному" 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;
}
 1
Author: Jan Fabry, 2017-04-13 12:13:50

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

Хорошо, похоже, вам нужна опция на панели записи, которая позволит вам создать публикацию на сайте 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? Каковы деловые отношения между этими двумя сайтами?). Было бы полезно, если бы вы более четко объяснили конечный результат, которого вы пытаетесь достичь, и список ваших наиболее важных проблем. Каким бы ни был ваш ответ на этот вопрос, если возможно, пожалуйста, также объясните "почему".

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

 1
Author: joelhaus, 2010-12-04 23:44:50