Как вызвать WP_Query с поддомена?

Вопрос или проблема

У меня есть скрипт PHP, работающий в WordPress, который использует WP_Query для получения постов с одного из моих субдоменов и возвращает их в виде строки JSON. Скрипт получает данные поста только в том случае, если я вызываю его с использованием правильного субдомена.

Например, если я перейду по адресу news.example.com/api/news.php, JSON выводится корректно, но если я перейду по адресу www.example.com/api/news.php, он выводит только пустой массив.

Как я могу вызвать единый скрипт, который будет получать данные с субдомена, даже если я вызываю его с использованием основного домена? Или еще лучше, если я вызываю его с любого субдомена?

Почему бы вам не попробовать использовать WP API?

Затем вы могли бы получать посты из URL, например, так…

http://subdomain.example.com/wp-json/posts

Вы также можете настроить пользовательские типы записей для использования WP API и затем получать к ним доступ аналогичным образом, для этого вам нужно добавить следующее в аргументы CPT:

$args = array(
         //...
        'show_in_rest'       => true,
        'rest_base'          => 'books-api',
        'rest_controller_class' => 'WP_REST_Posts_Controller',
       )
    );

Посмотрите: http://v2.wp-api.org/extending/custom-content-types/

Вы можете даже использовать параметры WP_Query таким образом:

http://subdomain.example.com/wp-json/posts?filter[posts_per_page]=2&filter[order]=ASC

Вы могли бы использовать jQuery.getJSON() для получения данных с другого домена:

 $.getJSON('http://subdomain.example.com/wp-json/posts', function (data) {
    console.log(data);
  });

В качестве альтернативы вы можете включить функции WordPress в любой *.php файл в любом месте на вашем сервере. Вам не обязательно запускать скрипт внутри фактической установки WP:

define('WP_USE_THEMES', false);
require('/absolute/path/to/your/httpdocs/wp-blog-header.php');
require('/absolute/path/to/your/httpdocs/wp-admin/includes/admin.php');

Просто включите заголовки, а для административных функций — admin.php. Затем вы сможете использовать WP-Query() в этом (внешнем) файле.

С уважением, Том

.

Ответ или решение

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

Теория

WP_Query является мощным инструментом в WordPress, позволяющим выполнять запросы к базе данных для извлечения постов, страниц и других элементов контента. Однако, одной из его особенностей является привязанность к определённому контексту – сайту или поддомену, где он используется. Когда вы пытаетесь вызвать WP_Query с другого домена или поддомена, вы сталкиваетесь с проблемой, что данные вне контекста могут не быть доступны.

Существует несколько способов решения этой проблемы:

  1. Использование WordPress REST API: Это один из самых современных и гибких подходов. REST API позволяет извлекать данные по HTTP-запросам, что легко интегрируется с любыми приложениями, будь то другой сайт, мобильное приложение или скрипт.

  2. Инклюзия файлов WordPress: Другой метод заключается в использовании файлов WordPress непосредственно в PHP-скриптах, чтобы иметь возможность использовать функции WordPress вне контекста установленного сайта.

Пример внедрения

1. Использование WordPress REST API

WordPress REST API предоставляет легкий подход к извлечению данных. Вы можете настроить кастомные типы записей для их использования через API, добавив такие опции как 'show_in_rest' => true. Пример запроса, который можно выполнить для получения данных, выглядит следующим образом:

GET http://subdomain.example.com/wp-json/wp/v2/posts

Вы также можете добавлять параметры фильтрации:

GET http://subdomain.example.com/wp-json/wp/v2/posts?per_page=5&order=asc

Для получения данных с клиентской стороны, например с помощью jQuery:

$.getJSON('http://subdomain.example.com/wp-json/wp/v2/posts', function (data) {
    console.log(data);
});

2. Инклюзия файлов WordPress

Если REST API по какой-то причине не подходит, вы можете включить файлы WordPress в ваш скрипт PHP, чтобы воспользоваться WP_Query:

define('WP_USE_THEMES', false);
require('/absolute/path/to/your/site/wp-blog-header.php');
require('/absolute/path/to/your/site/wp-admin/includes/admin.php');

// Пример использования WP_Query
$query = new WP_Query(array('post_type' => 'post', 'posts_per_page' => 5));
if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        echo get_the_title() . "\n";
    }
}
wp_reset_postdata();

Применение в реальном мире

Если ваш сайт или приложение должны взаимодействовать с данными, которые находятся на поддомене, использование REST API будет наиболее рекомендуется. Это связано с тем, что REST API предлагает необработанную интеграцию, поддержку кроссдоменных запросов через CORS, а также возможность подгонки под различные форматы данных (JSON, XML), что особенно полезно для фронтенд и мобильных приложений.

Для более интегрированных систем, где необходим прямой доступ к функционалу WordPress, включая плагины и темы, метод использования инклюзии файлов может оказаться более подходящим. Это дает полный доступ ко всем возможностям WordPress.

В итоге, выбор между REST API и инклюзией файлов WordPress будет зависеть от специфики вашей задачи, требований производительности и архитектурных предпочтений. В любом случае, оба подхода предоставляют надежные и гибкие средства для работы с WP_Query в контексте междоменного взаимодействия в среде WordPress.

Оцените материал
Добавить комментарий

Капча загружается...