Манипулирование содержимым головки wp
Я хотел бы знать, могу ли я манипулировать выводом wp_head()?
Прямо сейчас я использую SEO-плагин Yoast , чтобы добавить некоторые социальные теги в свои сообщения (og:*).
Теперь этот сайт является переделкой более старого блога на основе umbraco, и структура постоянных ссылок отличается, поэтому старые URL-адреса равны 301 новому, но для добавления этого требуется, чтобы старый URL-адрес сохранял правильное количество, поэтому у нас есть настраиваемое поле, которое предоставляет "addthis:url", когда требуемый... К сожалению, facebook и twitter не используют этот URL, но они используют мета-тег страниц "og:url", который предоставляет плагин (который указывает на новый URL), и, похоже, им нельзя манипулировать в сообщении.
Моя идея заключается в том, что до того, как wp_head будет распечатан, я бы в основном выполнил поиск и замену, чтобы изменить этот "og:url" на правильный, но я не нашел способа сделать это...
Итак, я спрашиваю, правильна ли моя идея и как это сделать, или есть лучший/официальный способ исправить это решение?
3 answers
Информация, прикрепленная к крючку действия wp_head
, echo
редактируется (если это необходимо echo
) по мере ее возникновения. Нет строки содержимого "wp_head", которую вы могли бы найти и заменить.
- Вам нужно будет найти функции/методы обратного вызова для данных , которыми вы хотите управлять, и надеяться, что встроенные крючки помогут вам.
- Или удалите эти обратные вызовы и добавьте свои собственные, чтобы заменить их
-
Или попробуйте буферизацию вывода вокруг
wp_head
:ob_start(); wp_head(); $head = ob_get_contents(); ob_end_clean(); echo $head;
Вы могли бы сделать одно из следующих действий, например:
-
Зацепить в
wp_head
и выводите свою собственную метаинформацию. Это можно определить как мета-сообщение . - Подключитесь к фильтру/действию плагина, если таковой имеется, и измените мету до того, как она будет распечатана.
// Редактировать
Я только что мельком взглянул на плагин.
Если вы хотите изменить og:url
, вы можете сделать это следующим образом итак:
if (is_single()) {
remove_action('wpseo_opengraph', array('WPSEO_OpenGraph', 'url'), 12);
add_action('wpseo_opengraph', 'wpse_131062_my_og_url', 12);
}
function wpse_131062_my_og_url() {
// this post meta has to be set up and filled by you!
if ($url = get_post_meta('my_og_url')) {
?>
<meta property="og:url" content="<?php echo esc_attr(esc_url($url)); ?>" />
<?php
}
}
Однако этот код непроверен .
Мне удалось найти этот пост: https://wordpress.stackexchange.com/a/75168/45611
В нем в основном было то, что мне было нужно.
/*
* This whole block here changes the og:url that Wordpress Seo Yoast provides
* It uses the addthis_share_url custom field, and if it is not present, it defaults
* to the permalink, just like the plugin does.
*/
add_action('get_header', 'blog_template_add_ob_start');
add_action('wp_head', 'blog_template_add_ob_end_flush', 100);
function blog_template_add_ob_start() {
ob_start('blog_template_add_filter_wp_head_output');
}
function blog_template_add_ob_end_flush() {
ob_end_flush();
}
function blog_template_add_filter_wp_head_output($output) {
$altUrl = get_post_custom_values('addthis_share_url')[0];
$url = get_permalink();
if ($altUrl && is_single()) {
$output = str_ireplace('<meta property="og:url" content="' . $url . '" />', '<meta property="og:url" content="' . esc_attr(esc_url($altUrl)) . '" />', $output);
}
return $output;
}
Спасибо, люди, вы были полезны!