Манипулирование содержимым головки wp


Я хотел бы знать, могу ли я манипулировать выводом wp_head()?

Прямо сейчас я использую SEO-плагин Yoast , чтобы добавить некоторые социальные теги в свои сообщения (og:*).

Теперь этот сайт является переделкой более старого блога на основе umbraco, и структура постоянных ссылок отличается, поэтому старые URL-адреса равны 301 новому, но для добавления этого требуется, чтобы старый URL-адрес сохранял правильное количество, поэтому у нас есть настраиваемое поле, которое предоставляет "addthis:url", когда требуемый... К сожалению, facebook и twitter не используют этот URL, но они используют мета-тег страниц "og:url", который предоставляет плагин (который указывает на новый URL), и, похоже, им нельзя манипулировать в сообщении.

Моя идея заключается в том, что до того, как wp_head будет распечатан, я бы в основном выполнил поиск и замену, чтобы изменить этот "og:url" на правильный, но я не нашел способа сделать это...

Итак, я спрашиваю, правильна ли моя идея и как это сделать, или есть лучший/официальный способ исправить это решение?

Author: markratledge, 2014-01-24

3 answers

Информация, прикрепленная к крючку действия wp_head, echoредактируется (если это необходимо echo) по мере ее возникновения. Нет строки содержимого "wp_head", которую вы могли бы найти и заменить.

  1. Вам нужно будет найти функции/методы обратного вызова для данных , которыми вы хотите управлять, и надеяться, что встроенные крючки помогут вам.
  2. Или удалите эти обратные вызовы и добавьте свои собственные, чтобы заменить их
  3. Или попробуйте буферизацию вывода вокруг wp_head:

    ob_start();     
    wp_head(); 
    $head = ob_get_contents();
    ob_end_clean();
    echo $head;
    
 2
Author: s_ha_dum, 2014-01-24 15:36:20

Вы могли бы сделать одно из следующих действий, например:

  1. Зацепить в wp_head и выводите свою собственную метаинформацию. Это можно определить как мета-сообщение .
  2. Подключитесь к фильтру/действию плагина, если таковой имеется, и измените мету до того, как она будет распечатана.

// Редактировать

Я только что мельком взглянул на плагин.

Если вы хотите изменить 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
    }
}

Однако этот код непроверен .

 1
Author: tfrommen, 2014-01-24 15:53:05

Мне удалось найти этот пост: 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;
}

Спасибо, люди, вы были полезны!

 1
Author: tommica, 2017-04-13 12:37:53