Điểm:1

Làm cách nào tôi có thể đặt thẻ meta "nâng cao" theo chương trình?

lá cờ cn

Các Tài liệu thẻ meta đưa ra một ví dụ về việc thiết lập các thẻ meta như thế này:

$node->set('field_meta_tags', serialize([
  'tiêu đề' => 'Tiêu đề nào đó',
  'description' => 'Một số mô tả.',
  'từ khóa' => 'Một số,Từ khóa',
]));

Tuy nhiên, tôi muốn đặt các trường "nâng cao", chẳng hạn như URL chính tắc. (Trường hợp sử dụng: Tôi đang cố gắng nhập vài trăm trang bằng mô-đun Nguồn cấp dữ liệu, một số trong số đó rất giống nhau, vì vậy tôi muốn tự động đặt URL chuẩn cho các trang tương tự.)

Tôi đã cố gắng lấy tên của khóa để sắp xếp theo thứ tự bằng cách đặt URL chuẩn cho một nút trong giao diện người dùng, lưu nút và sau đó kết xuất kết quả của trường_metatags, nhưng đây là kết quả:

www.example.com a:4:{s:5:"@type";s:6:"Person";s:3:"@id";s:39:"https://www.example.com /bio";s:4:"name";s:12:"Tên người";s:3:"url";s:39:"https://www.example.com/my-bio";}

Ở đây, đầu tiên www.example.com là giá trị tôi đặt cho URL chuẩn, nhưng điều này không cho tôi gợi ý về những gì sẽ sử dụng để đặt URL chuẩn.

Làm cách nào tôi có thể đặt giá trị của thẻ meta "nâng cao" theo chương trình?

câu hỏi tương tự

Câu hỏi này hỏi về cách đặt URL chuẩn nhưng nó dành cho Drupal 7 và liên quan đến việc xử lý trước URL chuẩn trước khi hiển thị, trong khi tôi muốn đặt URL chuẩn của thẻ meta khi lưu nút trong Drupal 9.

lá cờ ru
Các phần có `chữ cái: số` thường là cấu trúc dữ liệu tuần tự hóa PHP (cấu trúc dữ liệu phức tạp được tuần tự hóa thành một chuỗi đơn), ví dụ: `a:4` có nghĩa là `mảng có độ dài `4`, `s:5` là `s`tring có độ dài `5`, v.v. Bạn sẽ có thể giải mã và đọc được-/var_dump- tên khóa và giá trị có thể sử dụng [PHP unserialize()](https://www.php.net/manual/en/function.unserialize.php) trước.
Điểm:0
lá cờ cn

Nhờ @Hudri, tôi đã có thể tìm ra điều này với hủy đánh dấu ().

Cách đặt thẻ meta nâng cao theo khóa

Các thẻ meta nâng cao được đặt giống như các thẻ meta tiêu chuẩn, nhưng bạn cần biết khóa để đặt.

Trong trường hợp URL chuẩn, khóa là canonical_url, vì vậy nó có thể được thiết lập như thế này:

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

Làm cách nào để lấy giá trị của khóa thẻ meta nâng cao?

Đầu tiên, trong giao diện người dùng, hãy đặt giá trị cho một thực thể cụ thể (ví dụ: tại /nút/1/chỉnh sửa). Tôi cần đặt nó cho một thực thể riêng lẻ vì các giá trị được đặt trên toàn cầu cho các thực thể trong giao diện người dùng quản trị (tại /admin/config/search/metatag) không hiển thị khi bạn nhận được giá trị của trường_metatags trường cho thực thể của bạn (vì mô-đun Metatag chỉ lưu trữ các giá trị thay thế cho thực thể cụ thể đó trong trường).

Sau đó, trong mã của bạn, bạn có thể sử dụng Xdebug hoặc đại loại như thế này:

hook_entity_presave() {
  $metatags = $this->get('field_metatags')->giá trị;
  $unserialized = unserialize($metatags);
  print_r($unserialized);
  chết();
}

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.