Wordpress - Как заставить URL возвращать динамический JSON с пользовательским типом контента? - PullRequest
3 голосов
/ 24 июня 2019

Сначала немного предыстории, я пытаюсь следовать указаниям:

https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW1

, чтобы получить универсальные ссылки, работающие с моим сайтом для устройств iOS.Мой сайт WordPress находится в среде общего хостинга, поэтому у меня нет доступа к серверу или любым корневым файлам.Я поместил файл в корень моего сайта (httpdocs) и при переходе на страницу он не загружается.В поисках гугла я обнаружил сообщение о переполнении стека, в котором говорилось, что вам нужно настроить сервер, чтобы он знал, чтобы обслуживать этот файл с типом содержимого "application / pkcs7-mime" (файл конфигурации apple-app-site-Ассоциации с WordPress),Как уже упоминалось, у меня нет доступа к этому.

У меня есть поддомен, который является проектом Microsoft Web API, с которым я очень хорошо знаком.Я создал конечную точку для «apple-app-site-association», динамически создал ответ json в коде, установил тип содержимого и возвратил его.Это сработало, и Apple обнаруживает это и все остальное.Это интересно, так как мне НЕ нужен файл на моем сервере, поскольку я генерирую его на лету, и мне не нужно ничего менять на сервере.

Однако проблема заключается в том, что мне нужен основной домен сайта длябыть универсальной ссылкой, а не поддомен Windows.Основной сайт WordPress.Я думаю, если это возможно сделать то же самое в WordPress, где я перехожу на mydomain.com/apple-app-site-association и я на лету генерирую json и content-type и обслуживаю его.

Я никогда не писал кодов для WordPress и даже не знаю, с чего начать.

Если возможно, я хотел бы получить четкое указание в следующем:

Создание mydomain.com/Apple-App-Site-Association приводит к пользовательской функции или странице, которая обслуживает JSON.Есть код, который делает JSON динамически обслуживаемым.Есть код, который устанавливает тип содержимого ответа «application / pkcs7-mime».Конечно, если кто-то знает, как решить, что файл не обслуживается без общего сервера без этого метода, я тоже открыт для этого.Из того, что я вижу, это может быть единственный способ предположить, что это можно сделать.

1 Ответ

2 голосов
/ 28 июня 2019

Примечание: я предполагаю, что WordPress установлен в корневой папке.

Итак, если вы хотите, чтобы http://example.com/apple-app-site-association обслуживал JSON-контент, такой как this и имел тип контента (заголовок Content-Type), установленный на application/pkcs7-mime, вот несколько вариантов, которые вы можете выбрать:

Динамический контент

Поскольку вы используете WordPress, это может быть лучше для вас, чем редактирование файла .htaccess вручную.

Вы можете использовать parse_request крючок; Таким образом, вам не нужны никакие пользовательские (WordPress) правила перезаписи, не требуется настраиваемая страница (тип записи page), и вам не нужно создавать какой-либо файл JSON.

И убедитесь, что в корневой папке нет файла с именем apple-app-site-association или страницы WordPress, содержащей слаг apple-app-site-association.

Итак, это будет указано в файле функций вашей темы (например, wp-content/themes/your-theme/functions.php):

<?php
add_action( 'parse_request', 'serve_apple_app_site_association', 0 );
function serve_apple_app_site_association( $wp ) {
    // Check if the request is /apple-app-site-association
    if ( 'apple-app-site-association' !== $wp->request ) {
        return;
    }

    // Array version of the JSON data.
    $data = array(
        'applinks'    => array(
            'apps'    => array(),
            'details' => array(
                array(
                    'appID' => '9JA89QQLNQ.com.apple.wwdc',
                    'paths' => array(
                        '/wwdc/news/',
                        '/videos/wwdc/2015/*',
                    ),
                ),
                array(
                    'appID' => 'ABCD1234.com.apple.wwdc',
                    'paths' => array(
                        '*',
                    ),
                ),
            ),
        ),
    );

    // Send headers.
    status_header( 200 );
    nocache_headers();
    header( 'Content-Type: application/pkcs7-mime' );

    // And serve the JSON data.
    echo wp_json_encode( $data );
    exit;
}

Статическое содержимое

  1. Поместите данные JSON в файл с именем apple-app-site-association (т.е. без расширения) и сохраните файл в корневой папке, где вы можете увидеть файлы wp-config.php и .htaccess.

  2. Добавьте это к вашему .htaccess файлу:

<Files apple-app-site-association>
        Header set Content-Type application/pkcs7-mime
</Files>

Если <Files> и / или Header у вас не работают / не работают, то вы можете просто использовать первый вариант выше, но использовать что-то вроде readfile() для чтения статического файла .

В качестве альтернативы (и в частности, если перезапись URL недоступна / не поддерживается на вашем сайте), вы можете создать папку с именем apple-app-site-association в корневой папке и добавить index.php в эту папку и в этот файл:

<?php
header( 'Content-Type: application/pkcs7-mime' );
// Read the static file or just generate a dynamic content.
@readfile( __DIR__ . '/apple-app-site-association.json' );
exit;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...