こちらのサイトでは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に関するご質問がございましたら、お気軽にお問い合わせください。

