【Drupal】Nodeの公開ステータスを更新する
はじめに
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
}
以上
この記事に関するご質問やご意見などございましたらお問い合わせフォームからお気軽にご連絡ください。