Elimină meta robots tag din wp_head
Am nevoie să elimin doar această linie <meta name=robots content="noindex,follow"/>
din wp_head
dar nu pot găsi hook-ul potrivit pentru a-l folosi cu remove_action()
.
<meta name=robots content="noindex,follow"/>
Practic, ceea ce vreau să realizez este să elimin doar această linie din header, dar doar pentru pagina de căutare. Deci în acest caz aș folosi ceva similar cu:
if ( is_search() ) { remove_action('wp_head', 'numele-actiunii-care-trebuie'); }
add_filter('wpseo_robots', 'yoast_no_home_noindex', 999);
function yoast_no_home_noindex($string= "") {
if (is_home() || is_front_page()) {
$string= "index,follow";
}
return $string;
}
cred că ar trebui să fie ok.. undeva în functions.php al temei tale și ar trebui să facă treaba.

Aceasta nu a fost exact ceea ce se cerea în întrebare, dar este cea mai apropiată soluție. Oferă o modalitate de a modifica comanda robots a Yoast fără a hack-ui pluginul. În cazul meu, voiam să țintesc un șablon personalizat și am reușit să fac asta cu următoarele:
add_filter('wpseo_robots', 'confPageNoIndex', 999);
function confPageNoIndex($string= "") {
if (is_page_template( 'page-confirmation.php') ) {
$string= "no-index,no-follow";
}
return $string;
}
Aceasta ar putea fi modificată pentru a ținti pagina de căutare. Totuși, pluginul Yoast DEJA pune no-index pe Pagina de Căutare.

Mulțumesc! Aceasta a fost singura soluție care a funcționat! Snippet modificat:
add_filter('wpseo_robots', 'yoast_no_home_noindex', 999);
function yoast_no_home_noindex($string= "") {
if( is_paged() ) {
$string= "";
}
else {
$Path = strtok($_SERVER["REQUEST_URI"],'?');
$URI="https://" . $_SERVER['HTTP_HOST'] .$Path;
echo "<link rel=\"canonical\" href=\"" . $URI . "\">\n";
}
return $string;
}
Aceasta determină dacă URL-ul curent este o pagină paginată și elimină tagul robots. Dacă nu este, va afișa tagul canonic în schimb.

Pe baza comentariilor tale la celălalt răspuns, care sugerează că dorești în mod explicit să păstrezi opțiunea "Descurajează motoarele de căutare să indexeze acest site" activată, după o investigație mai amănunțită a codului sursă al WordPress (în special default-filters.php), cred că acesta este probabil ceea ce căutai de fapt:
add_action( 'posts_selection', 'indexSearchPage' );
function indexSearchPage() {
// Asigură-te că incluzi prioritatea pentru acțiune, altfel nu va fi eliminată
if( is_search() )
remove_action( 'wp_head', 'noindex', 1 );
}
Folosesc hook-ul posts_selection
deoarece este primul hook din rutina de încărcare a WordPress care are acces la tag-uri condiționale. Poți folosi acțiuni ulterioare până la și inclusiv wp_head
, dar dacă folosești wp_head
însuși, trebuie să adaugi acțiunea cu o prioritate mai mică decât 1
, deoarece noindex
este adăugat cu o prioritate de 1
:
add_action( 'wp_head', 'indexSearchPage', -1 );
Alternativ, este posibil să păcălești WordPress să creadă condiționat că opțiunea "Descurajează motoarele de căutare să indexeze acest site" este dezactivată:
add_action( 'posts_selection', 'indexSearchPage' );
function indexSearchPage() {
if( is_search() ) {
$alloptions = wp_load_alloptions();
$alloptions[ 'blog_public' ] = '1';
wp_cache_set( 'alloptions', $alloptions, 'options' );
wp_cache_set( 'blog_public', '1', 'options' );
}
}

Am înțeles, ieșirea este controlată de plugin-ul WordPress SEO deoarece acesta este activat pe site, așa că a trebuit să modific puțin codul în fișierul pluginului class-frontend.php
Evident, nu prea îmi place această soluție improvizată, dar funcționează pentru moment, afișând meta-ul respectiv pe pagina de căutare așa cum doresc.
În fișierul class-frontend.php al plugin-ului a trebuit să înlocuiesc linia 552 cu aceasta:
if ( is_search() ) { $robots['follow'] = 'nofollow'; } else { $robots['follow'] = 'follow'; }

NOTĂ: Cu versiunea actuală a WordPress SEO, acest răspuns nu mai este valabil - liniile modificate în cadrul plugin-ului nu mai există. Vizitatorii acestei întrebări pot descoperi că al doilea răspuns al meu oferă soluții care nu necesită modificări ale plugin-ului. Dacă nu folosești WordPress SEO sau dorești să elimini indexarea de către motoarele de căutare de pe fiecare pagină, cea mai bună soluție la întrebarea pusă este să activezi "Descurajează motoarele de căutare să indexeze acest site".

Vă recomand să debifați pur și simplu opțiunea "Descurajează motoarele de căutare să indexeze acest site" din Setări > Citire
din panoul de control (acest lucru ar trebui să elimine meta-tagurile relevante pentru roboți din toate paginile site-ului dvs.), apoi să adăugați manual meta-tagul înapoi în header-ul temei folosind condiții, astfel:
if( ! is_search() )
echo( '<meta name="robots" content="noindex,nofollow" />' );
Poate fi necesar să modificați condițiile pentru a obține efectul dorit, dar cred că înțelegeți ideea.
Dacă nu doriți să modificați tema, puteți atașa acest cod la acțiunea wp_head
:
add_action( 'wp_head', 'noRobots' );
function noRobots() {
if( ! is_search() )
echo( '<meta name="robots" content="noindex,nofollow" />' );
}

Da, știu că se poate realiza în acest fel, dar aș dori să nu dezactivez toate meta tag-urile doar pentru o singură pagină. Site-ul folosește plugin-ul Yoast SEO care îmi oferă control complet și personalizare pentru SEO pe restul paginilor, cu excepția acestei pagini de căutare. De fapt, având în vedere acest lucru, ceea ce vreau să fac este să elimin meta tag-urile create de wp_head și apoi să le afișez din nou, dar cu nofollow în loc de follow. Ceva de genul str_replace('<meta name=robots content="noindex,follow"/>', '<meta name=robots content="noindex,nofollow"/>', wp_head());

Îmi pare rău - nu înțeleg ce încerci să realizezi. Soluția pe care am oferit-o va păstra tag-ul pe toate paginile, cu excepția paginii de rezultate ale căutării, exact cum ar face codul sugerat la finalul întrebării tale. De asemenea, nu sunt familiarizat cu plugin-ul Yoast SEO, așa că din păcate nu pot fi de mare ajutor.

Te rog să explici ce înțelegi prin "aș dori să nu dezactivez toate meta tag-urile doar pentru o singură pagină"

Dacă bifez opțiunea "Descurajează motoarele de căutare să indexeze acest site" va trebui să afișez manual meta-tag-ul pentru toate tipurile de pagini, articole, etichete. Plugin-ul Yoast SEO oferă o varietate de opțiuni pentru aceste pagini și nu vreau să pierd asta. Am nevoie doar să personalizez afișarea acestui meta-tag SEO în pagina de rezultate a căutării, doar acesta.

Te rog să explici acest răspuns și de ce crezi că ar rezolva problema.

@Yarr te-ai referit probabil la if ( is_search() ) { remove_action( 'wp_head', 'do_robots');
}
în orice caz, am încercat și eu asta, dar nu elimină <meta name=robots content="noindex,follow"/>

Funcția do_robots() doar afișează fișierul robots.txt - nu are nicio legătură cu meta-tagurile.
