webentwicklung-frage-antwort-db.com.de

Bearbeiten von wp_head-Inhalten

Ich möchte wissen, ob es mir möglich ist, die Ausgabe von wp_head () zu manipulieren.

Im Moment benutze ich das Yoast SEO-Plugin , um meinen Posts einige soziale Tags hinzuzufügen (og: *).

Diese Seite ist ein Remake eines älteren Blogs auf Umbraco-Basis, und die Permalink-Struktur unterscheidet sich. Die alten URLs stimmen also nicht mit den neuen überein. Dies setzt jedoch voraus, dass die alte URL die richtige Anzahl aufweist. Wir haben also ein benutzerdefiniertes Feld dafür stellt bei Bedarf die "addthis: url" zur Verfügung ... Leider verwenden Facebook & Twitter diese URL nicht, aber sie verwenden das Meta-Tag "og: url" der Seiten, das das Plugin bereitstellt (das auf die neue URL verweist) und es scheint dass es nicht in der post manipuliert werden kann.

Meine Idee ist, dass ich, bevor der wp_head ausgedruckt wird, grundsätzlich ein Suchen und Ersetzen durchführen würde, um dieses "og: url" zu korrigieren, aber ich habe keinen Weg gefunden, dies zu tun ...

Was ich also frage, ist, dass meine Idee richtig ist und wie es geht, oder gibt es eine bessere/offizielle Möglichkeit, diese Lösung zu reparieren?

1
tommica

Ich habe diesen Beitrag gefunden: https://wordpress.stackexchange.com/a/75168/45611

Es hatte im Grunde das, was ich brauchte.

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

Vielen Dank Leute, Sie waren hilfreich!

1
tommica

An den Aktions-Hook wp_head angehängte Informationen sind echoed (wenn sie echoed sein müssen), wenn sie auftreten. Es gibt keine Inhaltszeichenfolge "wp_head", die Sie suchen und ersetzen können.

  1. Sie müssen die Rückruffunktionen/-methoden für die Daten finden, die Sie bearbeiten möchten, und hoffen, dass es integrierte Hooks gibt, die Ihnen dabei helfen.
  2. Oder entfernen Sie diese Rückrufe und fügen Sie Ihre eigenen hinzu, um sie zu ersetzen
  3. Oder versuchen Sie, die Ausgabe um wp_head zu puffern:

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

Sie können beispielsweise eine der folgenden Aktionen ausführen:

  1. Haken Sie in wp_head ein und geben Sie Ihre eigenen Metainformationen aus. Dies könnte als Post-Meta definiert werden.
  2. Hängen Sie sich in einen Filter/eine Aktion des Plugins ein, falls vorhanden, und ändern Sie das Meta, bevor es ausgedruckt wird.

// Bearbeiten

Ich hatte gerade einen kurzen Blick auf das Plugin.

Wenn Sie ändern den og:url möchten, können Sie dies folgendermaßen tun:

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

Dieser Code ist jedoch ungetestet .

1
tfrommen