web-dev-qa-db-fra.com

action hook wp_head priorité plus élevée que tous les autres plugins/hooks

Je travaille un peu avec l'API wordpress et je veux essayer d'inclure un tag <meta>- dans la zone de ma tête de mon site Web.

Ceci est mon code (fonctionne très bien!):

class dmd_noindex_options_page{
    function __construct() {
        add_action( 'wp_head', array( $this, 'set_meta') );
    }
    function set_meta(){
       $pages = get_option('dmd_noindex_pages');
       $pages_id = explode(',', $pages);           
       for($i = 0; count($pages_id) > $i; $i++){
           if(is_page($pages_id[$i])){
              echo '<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">';
           }
        }
    }
}
new dmd_noindex_options_page;

Mon problème:

J'utilise le WP PlugIn Yoast SEO et, si je jette un œil dans le code de mon site Web, je vois ce qui précède mon tag <meta>-.

<!-- This site is optimized with the Yoast SEO plugin v2.3.5 - https://yoast.com/wordpress/plugins/seo/ -->
<meta name="robots" content="noindex,follow"/>
<meta name="description" content="Impressum von EK Immobilien und Kontaktaufnahme"/>
<link rel="canonical" href="http://ek.dimadirekt.com/de/impressum/" />
<meta property="og:locale" content="de_DE" />
<meta property="og:type" content="article" />
<meta property="og:title" content="Impressum -" />
<meta property="og:description" content="Impressum von EK Immobilien und Kontaktaufnahme" />
<meta property="og:url" content="http://ek.dimadirekt.com/de/impressum/" />
<meta name="Twitter:card" content="summary"/>
<meta name="Twitter:description" content="Impressum von EK Immobilien und Kontaktaufnahme"/>
<meta name="Twitter:title" content="Impressum -"/>
<!-- / Yoast SEO plugin. -->

Je ne veux pas désactive ce plug-in Yoast SEO! J'ai essayé de définir une priorité plus élevée de mon add_action mais cela ne fonctionne pas.

Par exemple.:

add_action( 'wp_head', array( $this, 'set_meta', 2,1) );

Ma question est:

Comment puis-je inclure mon tag <meta>- au-dessus des tags <meta>- du plug-in Yoast SEO? Puis-je tout d’abord inclure mon code dans tous les plugins?

1
cgee

Je viens de parcourir la classe WPSEO_Frontend et de trouver le filtre wpseo_robots pour le contenumeta robots contenustring.

Vous pourriez essayer quelque chose comme:

add_filter( 'wpseo_robots', function( $content )
{
        // your logic here ...
        return $content;    
} );

pour remplacer le méta contenurobotsde ce plugin.

ps: Vous devriez envisager de déplacer le add_action du constructeur de la classe.

2
birgire

L'inclure plus haut n'est probablement pas la bonne chose que vous souhaitiez, car vous êtes plus susceptible d'entrer dans une "fonctionnalité non définie" du côté de Google lorsque vous rencontrez des tags en conflit.

Si vous ne voulez pas que yoast SEO affiche ses balises, vous devrez trouver dans son code la manière de désactiver ou de remplacer la fonctionnalité spécifique.

Mais la chose la plus robuste que vous puissiez faire est probablement d’interdire ces pages dans le fichier robots.txt au lieu de "se battre" avec tous les plugins SEO. Vous pouvez utiliser l'action do_robotstxt pour cela. quelque chose comme (pris ici https://vip.wordpress.com/documentation/vip-development-tips-tricks/robots-txt/ )

function my_disallow_directory() {
    echo "User-agent: *" . PHP_EOL;
    echo "Disallow: /path/to/your/directory/" . PHP_EOL;
}
add_action( 'do_robotstxt', 'my_disallow_directory' );
1
Mark Kaplun