【Drupal】Nodeの公開ステータスを更新する

こちらのサイトではDRUPAL10に関連する記事を掲載しています。

はじめに

Drupal10で投稿ページなどのコンテンツの公開ステータスを変更するためのTipsです。Drupal8以前から仕様が若干変更になっています。

Nodeの公開ステータスを更新する

Nodeの公開ステータスを公開にするには、setPublished()を使用します。

このメソッド自体は以前から存在しますが、Drupal9以降で仕様が一部変わりました。

Drupal9より前は、setPublishedの引数に、TrueまたはFalseを設定することで、公開または非公開を指定できました。しかし、Drupal8.3から非推奨となり、Drupal9では廃止されました。

Drupal9以降の新仕様は、

  • ステータスを公開に設定するには、setPublished()引数なしを使用します。
  • ステータスを非公開に設定するには、setUnpublished()引数なしを使用します。

サンプルです

function mymodule_cron()
{
  $nids = \Drupal::entityQuery("node")
    ->condition('type', 'article')
    ->execute();
  $storage_handler = \Drupal::entityTypeManager()->getStorage("node");
  $nodes = $storage_handler->loadMultiple($nids);
  foreach ($nodes as $node)
  {
    // Unpublish nodes
    $node->setUnpublished();
    // Publish nodes
// $node->setPublished();
    $node->save();
  }
}

なお、ステータスの参照時の仕様は変わりありません。

以下参考コードです

/**
 * example for $nodes
 */
if ($node->status->value == 1) {
  //the node is published
}else{
  //the node is not published
}
このサイトに関するご意見・ご質問はこちらまで

この記事またはDrupalに関するご質問がございましたら、お気軽にお問い合わせください。

タイトルとURLをコピーしました