Вопрос или проблема
Раньше у меня были и pcsteps.gr, и lifesteps.gr на одном сервере с одним и тем же IP. Oembed работал по умолчанию, я мог встраивать посты с одного сайта на другой без каких-либо проблем.
Однако, после перемещения lifesteps.gr на другой сервер, встраивания больше не работают. Насколько я понимаю, чтобы встроить посты из lifesteps в pcsteps, мне нужно добавить lifesteps в качестве поставщика oembed для pcsteps.
Я добавил следующий код, который создал здесь.
// Регистрация поставщиков oEmbed
function custom_oembed_provider() {
wp_oembed_add_provider( 'https://www.lifesteps.gr/*', 'https://www.lifesteps.gr/oembed/', false );
}
add_action( 'init', 'custom_oembed_provider' );
Однако это не работает. Я подозреваю, что базовый URL https://www.lifesteps.gr/oembed/, который я использую, неверен. Тем не менее, я не смог найти, есть ли стандартный тип для базового URL oembed для самохостингованных сайтов WordPress.
Для того чтобы oEmbeds работали при встраивании другого сайта WordPress, шаблон одиночного поста должен иметь включенные ссылки для обнаружения. WordPress использует их для получения конечной точки oEmbed, откуда извлекается контент. Эти конечные точки являются частью REST API, так что убедитесь, что это также включено и работает.
wp-includes/embed.php
v5.1.1
if ( is_singular() ) {
$output .= '<link rel="alternate" type="application/json+oembed" href="' . esc_url( get_oembed_endpoint_url( get_permalink() ) ) . '" />' . "\n";
if ( class_exists( 'SimpleXMLElement' ) ) {
$output .= '<link rel="alternate" type="text/xml+oembed" href="' . esc_url( get_oembed_endpoint_url( get_permalink(), 'xml' ) ) . '" />' . "\n";
}
}
Вот пример этого вывода:
<link rel="alternate" type="application/json+oembed" href="https://yourdomain.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fyourdomain.com%2F2019%2F04%2F12%2Fpost%2F">
<link rel="alternate" type="text/xml+oembed" href="https://yourdomain.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fyourdomain.com%2F2019%2F04%2F12%2Fpost%2F&format=xml">
Ответ или решение
Для того чтобы обеспечить корректную работу функции oEmbed для самохостинговых сайтов на WordPress, необходимо установить правильный базовый URL провайдера oEmbed. Вы правильно заметили, что при переносе сайта lifesteps.gr на другой сервер, интеграция oEmbed между двумя сайтами может быть нарушена, если не настроены необходимые параметры.
Базовый URL провайдера oEmbed для WordPress
Для самохостинговых сайтов WordPress правильный базовый URL для oEmbed обычно имеет формат:
https://[your-domain]/wp-json/oembed/1.0/embed
где [your-domain]
— это доменное имя вашего сайта. Например, для сайта lifesteps.gr это будет:
https://www.lifesteps.gr/wp-json/oembed/1.0/embed
Проверим корректность ваших настроек. Код, который вы предоставили, в целом правильный, но давайте убедимся, что в нем нет недочетов. Вот пример кода с необходимыми изменениями:
// Регистрация провайдеров oEmbed
function custom_oembed_provider() {
wp_oembed_add_provider('https://www.lifesteps.gr/*', 'https://www.lifesteps.gr/wp-json/oembed/1.0/embed', false);
}
add_action('init', 'custom_oembed_provider');
Проверьте наличие Discovery Links
Как вы упомянули, важно, чтобы на сайте lifesteps.gr были активированы Discovery Links. Это позволяет другим сайтам находить oEmbed-эндпоинты. Убедитесь, что в шаблоне одиночных записей (single post template) есть соответствующий код:
if (is_singular()) {
$output .= '<link rel="alternate" type="application/json+oembed" href="' . esc_url(get_oembed_endpoint_url(get_permalink())) . '" />' . "\n";
if (class_exists('SimpleXMLElement')) {
$output .= '<link rel="alternate" type="text/xml+oembed" href="' . esc_url(get_oembed_endpoint_url(get_permalink(), 'xml')) . '" />' . "\n";
}
}
Проверка REST API
Убедитесь, что REST API активирован и работает на обоих сайтах. Вы можете проверить его доступность, перейдя по адресу:
https://www.lifesteps.gr/wp-json/
Если вы получите ответ в формате JSON, это значит, что REST API работает корректно.
Заключение
В результате, для успешной интеграции oEmbed между двумя сайтами вам необходимо убедиться, что вы используете правильный базовый URL, активированы Discovery Links и исправно работает REST API. Если после этих проверок проблема все еще сохраняется, обдумайте возможность очистки кэша или отключения конфликтующих плагинов, которые могут помешать корректной работе oEmbed.
Если вам потребуются дальнейшие разъяснения или помощь по другим вопросам, не стесняйтесь обращаться.