web-dev-qa-db-fra.com

Manipulation du contenu wp_head

Je voudrais savoir s'il est possible pour moi de manipuler la sortie de wp_head ()?

En ce moment, j'utilise le plugin Yoast SEO pour ajouter des tags sociaux à mes messages (og: *).

Maintenant, ce site est un remake d’un blog plus ancien basé sur umbraco, et la structure de permalien étant différente, les anciennes URL sont donc 301 plus récentes que les nouvelles. Toutefois, cela nécessite que l’ancienne URL conserve le bon nombre. Nous avons donc un champ personnalisé qui fournit le "addthis: url" lorsque requis ... Malheureusement, Facebook et Twitter n'utilisent pas cette URL, mais ils utilisent les balises méta des pages "og: url" fournies par le plug-in (qui pointe vers la nouvelle URL), et semble qu'il ne peut pas être manipulé dans le post.

Mon idée est qu'avant d'imprimer wp_head, je voudrais fondamentalement faire une recherche et remplacer pour changer ce "og: url" pour en corriger un, mais je n'ai pas trouvé le moyen de le faire ...

Donc, ce que je demande, c'est si mon idée est correcte et comment le faire, ou existe-t-il un meilleur moyen/officiel de résoudre cette solution?

1
tommica

J'ai réussi à trouver ce post: https://wordpress.stackexchange.com/a/75168/45611

Il avait fondamentalement ce dont j'avais besoin.

/*
 * 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;
}

Merci les gens, vous avez été utile!

1
tommica

Les informations attachées au point d'ancrage de l'action wp_head sont echoed (si elles doivent être echoed) au moment où elles se produisent. Il n'y a pas de chaîne de contenu "wp_head" que vous pouvez rechercher et remplacer.

  1. Vous devrez trouver les fonctions/méthodes de rappel pour les données que vous souhaitez manipuler et espérer que des crochets intégrés vous aideront.
  2. Ou supprimez ces rappels et ajoutez les vôtres pour les remplacer
  3. Ou essayez la mise en mémoire tampon de sortie autour de wp_head:

    ob_start();     
    wp_head(); 
    $head = ob_get_contents();
    ob_end_clean();
    echo $head;
    
2
s_ha_dum

Vous pouvez par exemple faire l'une des choses suivantes:

  1. Crochet dans wp_head et affichez vos propres méta-informations. Cela pourrait être défini comme un post meta .
  2. Accrochez-vous dans un filtre/action du plugin, s'il en existe un, et modifiez la méta avant son impression.

// Modifier

Je viens d'avoir un bref aperçu du plugin.

Si vous voulezalterthe og:url, vous pouvez le faire comme ceci:

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
    }
}

Ce code estnon testé, cependant.

1
tfrommen