Как получить доступ к SEO-тегам Yoast в Wordpress API Callback - PullRequest
0 голосов
/ 02 июля 2018

Я занимаюсь разработкой веб-сайта Wordpress с темой ReactJS SPA и пытаюсь собрать необходимые теги заголовков SEO из плагина Yoast SEO во время вызова WP API AJAX. Причина, по которой я использую Yoast, заключается в том, что он предоставляет seo-значения (то есть изображение, описание, заголовок и т. Д.), Даже если эти значения явно не указаны в сообщении.

В теме WordPress, не относящейся к SPA, Yoast отображает теги seo во время ловушки wpseo_head (), которая запускается вызовом wp_head () в header.php. Поскольку я реализую тему SPA, мне нужно обновлять теги seo каждый раз, когда изменяется URL-адрес, но перезагрузка страницы не будет. Я пытаюсь захватить эти теги в вызове API WP, но по какой-то причине в вызове API ловушка wpseo_head не отображает те же теги. Я провел следующий тест, чтобы подтвердить несоответствие в поведении:

Я добавил прямой вызов wpseo_head () в мой файл header.php сразу после открывающего тега body:

<?php wp_head(); ?>
</head>
<body>
<div id="wpseo_head">
<?php do_action('wpseo_head'); ?>
</div>

А вот соответствующий вывод:

<div id="wpseo_head" class="baby">
 <!-- This site is optimized with the Yoast SEO plugin v7.7.2 - https://yoast.com/wordpress/plugins/seo/ -->
 <title>CORRECT PAGE TITLE</title>
 <!-- Admin only notice: this page does not show a meta description because it does not have one, either write it for this page specifically or go into the [SEO - Search Appearance] menu and set up a template. -->
 <link rel="canonical" href="CORRECT POST URL">
 <meta property="og:locale" content="en_US">
 <meta property="og:type" content="article">
 <meta property="og:title" content="CORRECT POST TITLE">
 <meta property="og:description" content="CORRECT DESCRIPTION">
 <meta property="og:url" content="CORRECT URL">
 <meta property="og:site_name" content="CORRECT SITE NAME">
 <meta property="article:publisher" content="CORRECT FACEBOOK URL">
 <meta property="og:image" content="CORRECT IMAGE URL">
 <meta property="og:image:width" content="200">
 <meta property="og:image:height" content="200">
 <script type="application/ld+json">{/* CORRECT JSON LD */}</script>
</div>

В моем обратном вызове API для загрузки поста я записываю вывод wpseo_head () и возвращаю его.

global $post, $wp_query;
$post = $_post;
$wp_query = new WP_Query(['p' => $_post->ID]);
setup_postdata($post);

ob_start();
do_action('wpseo_head');
$yoast_seo_tags = ob_get_contents();
ob_end_clean();
$yoastSeoTags = stripslashes($yoast_seo_tags);

Это ответ от вызова API:

<!-- This site is optimized with the Yoast SEO plugin v7.7.2 - https://yoast.com/wordpress/plugins/seo/ -->
<link rel="canonical" href="CORRECT POST URL" />
<script type='application/ld+json'>{/* CORRECT JSON LD */}</script>

Обратите внимание, что вывод вызова wpseo_head () в header.php завершен, но в ответе на вызов wpseo_head () в обратном вызове API пропущено много полей, но в нем содержатся правильные значения. Это заставляет меня поверить, что, хотя я правильно устанавливаю сообщение в обратном вызове API, должны быть некоторые присущие ему различия в поведении wordpress в header.php по сравнению с обратными вызовами API.

1) Может ли кто-нибудь объяснить это, и как я могу успешно получить выходные данные вызова wpseo_head () в обратном вызове API?

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

3) Исходя из того, как в настоящее время работают веб-сканеры, мне даже нужно беспокоиться об установке SEO-тегов каждый раз, когда пользователь переходит на новую страницу? Или достаточно просто установить SEO-теги на начальную загрузку страницы?

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

1 Ответ

0 голосов
/ 07 августа 2018

Я встречал ту же проблему Вы можете найти дополнительную информацию здесь: https://github.com/Yoast/wordpress-seo/issues/9218 Поэтому они используют остальные API для запроса необходимой метаинформации. НО у нас есть проблема с аутентификацией для WP внутри (для этого требуется авторизация пользователя где-то в промежуточном программном обеспечении). Поэтому я предлагаю вам использовать что-то вроде этого:

$provider = new WPSEO_Indexable_Service_Post_Provider();
$metainfo = $provider->get($selected_post->ID);
...