Puncte:1

Cum pot seta metaetichete „avansate” în mod programatic?

drapel cn

The Documentația metatagurilor oferă un exemplu de setare meta-etichete ca acesta:

$node->set('field_meta_tags', serialize([
  'title' => 'Un titlu',
  'description' => 'O anumită descriere.',
  'keywords' => 'Unele, cuvinte cheie',
]));

Cu toate acestea, vreau să setez câmpurile „avansate”, cum ar fi URL canonic. (Caz de utilizare: încerc să import câteva sute de pagini cu modulul Feeds, dintre care unele sunt foarte asemănătoare, așa că vreau să setez automat adresa URL canonică pentru paginile similare.)

Am încercat să obțin numele cheii pentru a se serializa setând adresa URL canonică pentru un nod în interfața de utilizare, salvând nodul și apoi aruncând rezultatul field_metatags, dar acesta a fost rezultatul:

www.example.com a:4:{s:5:"@type";s:6:"Persoană";s:3:"@id";s:39:"https://www.example.com /bio";s:4:"nume";s:12:"Numele persoanei";s:3:"url";s:39:"https://www.example.com/my-bio";}

Aici, primul www.example.com este valoarea pe care am setat-o ​​pentru URL-ul canonic, dar aceasta nu îmi dă un indiciu despre ce să folosesc pentru a seta adresa URL canonică.

Cum pot seta în mod programatic valorile metaetichetelor „avansate”?

Întrebări similare

Această întrebare se referă la setarea adresei URL canonice dar este pentru Drupal 7 și se referă la preprocesarea URL-ului canonic înainte de afișare, în timp ce vreau să setez URL-ul canonic metatag atunci când salvez nodul în Drupal 9.

drapel ru
Părțile cu `litera:număr` sunt de obicei structuri de date serializate PHP (structuri de date complexe serializate într-un singur șir), de ex. `a:4` înseamnă un `a`rray de lungime `4`, un `s:5` este un `s`ring de lungime `5` etc. Ar trebui să puteți decoda și să obțineți read-/var_dump- nume de chei și valori capabile folosind [PHP unserialize()](https://www.php.net/manual/en/function.unserialize.php) mai întâi.
Puncte:0
drapel cn

Datorită lui @Hudri, am putut să-mi dau seama cu asta unserialize().

Cum să setați metaetichetele avansate după cheie

Metaetichetele avansate sunt setate în același mod ca metaetichetele standard, dar trebuie să cunoașteți cheia de setat.

În cazul URL-ului canonic, cheia este canonical_url, deci poate fi setat astfel:

  $this->set('field_metatags', serialize([
    'canonical_url' => $canonical_link,
  ]));

Cum să obțineți valoarea cheii de metaetichete avansate?

Mai întâi, în interfața de utilizare, setați valoarea pentru o anumită entitate (de exemplu, la /node/1/edit). Trebuia să-l setez pentru o entitate individuală, deoarece valorile care sunt setate la nivel global pentru entitățile din interfața de utilizare admin (la /admin/config/search/metatag) nu apar când obțineți valoarea field_metatags câmp pentru entitatea dvs. (deoarece modulul Metatag stochează doar înlocuirile pentru acea entitate specifică în câmp).

Apoi, în codul dvs., puteți utiliza Xdebug sau ceva de genul acesta:

hook_entity_presave() {
  $metatags = $this->get('field_metatags')->value;
  $unserialized = unserialize($metatag-uri);
  print_r($neserializat);
  a muri();
}

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.