Score:1

ฉันจะตั้งค่าเมตาแท็ก "ขั้นสูง" โดยทางโปรแกรมได้อย่างไร

ธง cn

เดอะ เอกสารเมตาแท็ก ยกตัวอย่างการตั้งค่าเมตาแท็กดังนี้

$node->set('field_meta_tags', ซีเรียลไลซ์([
  'title' => 'บางหัวข้อ',
  'description' => 'คำอธิบายบางส่วน',
  'keywords' => 'บางคำ',
]));

อย่างไรก็ตาม ฉันต้องการตั้งค่าฟิลด์ "ขั้นสูง" เช่น Canonical URL. (กรณีการใช้งาน: ฉันกำลังพยายามนำเข้าหน้าเว็บหลายร้อยหน้าด้วยโมดูลฟีด ซึ่งบางหน้าคล้ายกันมาก ดังนั้นฉันจึงต้องการตั้งค่า Canonical URL สำหรับหน้าที่คล้ายกันโดยอัตโนมัติ)

ฉันพยายามรับชื่อของคีย์เพื่อทำให้เป็นอนุกรมโดยการตั้งค่า URL แบบบัญญัติสำหรับโหนดใน UI บันทึกโหนดแล้วทิ้งผลลัพธ์ของ field_metatagsแต่นี่คือผลลัพธ์:

www.example.com a:4:{s:5:"@type";s:6:"Person";s:3:"@id";s:39:"https://www.example.com /bio";s:4:"ชื่อ";s:12:"ชื่อบุคคล";s:3:"url";s:39:"https://www.example.com/my-bio";}

ที่นี่เป็นที่แรก www.example.com เป็นค่าที่ฉันตั้งไว้สำหรับ Canonical URL แต่นี่ไม่ได้บอกใบ้ว่าจะใช้อะไรในการตั้งค่า Canonical URL

ฉันจะตั้งค่าของเมตาแท็ก "ขั้นสูง" โดยทางโปรแกรมได้อย่างไร

คำถามที่คล้ายกัน

คำถามนี้ถามเกี่ยวกับการตั้งค่า Canonical URL แต่มีไว้สำหรับ Drupal 7 และเกี่ยวข้องกับการประมวลผล URL แบบบัญญัติล่วงหน้าก่อนที่จะแสดงผล ในขณะที่ฉันต้องการตั้งค่า metatag URL แบบบัญญัติเมื่อบันทึกโหนดใน Drupal 9

ru flag
ส่วนที่มี `ตัวอักษร:ตัวเลข' มักจะเป็นโครงสร้างข้อมูลซีเรียลของ PHP (โครงสร้างข้อมูลที่ซับซ้อนที่ซีเรียลเป็นสตริงเดียว) เช่น `a:4` หมายถึง `a`rray ของความยาว `4`, `s:5` คือ `s`tring ของความยาว `5` ฯลฯ คุณควรจะสามารถถอดรหัสและรับ read-/var_dump- ชื่อคีย์และค่าได้โดยใช้ [PHP unserialize()](https://www.php.net/manual/en/function.unserialize.php) ก่อน
Score:0
ธง cn

ขอบคุณ @Hudri ฉันสามารถคิดออกด้วย ไม่ซีเรียลไลซ์().

วิธีตั้งค่าเมตาแท็กขั้นสูงตามคีย์

เมตาแท็กขั้นสูงตั้งค่าในลักษณะเดียวกับเมตาแท็กมาตรฐาน แต่คุณจำเป็นต้องรู้คีย์ในการตั้งค่า

ในกรณีของ Canonical URL คีย์คือ canonical_urlจึงสามารถตั้งค่าได้ดังนี้

  $this->set('field_metatags', ซีเรียลไลซ์([
    'canonical_url' => $canonical_link,
  ]));

จะรับค่าของคีย์เมตาแท็กขั้นสูงได้อย่างไร

ขั้นแรก ใน UI ให้ตั้งค่าสำหรับเอนทิตีเฉพาะ (เช่น ที่ /โหนด/1/แก้ไข). ฉันจำเป็นต้องตั้งค่าสำหรับแต่ละเอนทิตี เนื่องจากค่าที่ตั้งค่าส่วนกลางสำหรับเอนทิตีใน UI ของผู้ดูแลระบบ (ที่ /admin/config/search/metatag) ไม่ปรากฏขึ้นเมื่อคุณได้รับค่าของ field_metatags ฟิลด์สำหรับเอนทิตีของคุณ (เนื่องจากโมดูล Metatag เก็บเฉพาะการแทนที่สำหรับเอนทิตีเฉพาะนั้นในฟิลด์)

จากนั้นในโค้ดของคุณ คุณสามารถใช้ Xdebug หรืออะไรทำนองนี้:

hook_entity_presave () {
  $metatags = $this->get('field_metatags')->value;
  $unserialized = unserialize($เมตาแท็ก);
  print_r($ไม่ซีเรียลไลซ์);
  ตาย();
}

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา