Scheduled publication
What we want here is to be able to set a publication date for an article, and at this date, switch the state to published
.
For this example, we will have to add a publish_at
attribute to the Article Content Type.
- Click on the Content Type Builder link in the left menu
- Select the Article Content Type
- Add another field
And add some data with different dates and state to be able to see the publication happen. Make sure to create some entries with a draft state and a publish_at
that is before the current date.
The goal will be to check every minute if there are draft articles that have a publish_at
lower that the current date.
Here is the full documentation of this feature. If your CRON task requires to run based on a specific timezone then do look into the full documentation.
Path — ./config/functions/cron.js
Make sure the enabled cron config is set to true in ./config/server.js
file.
TIP
Now we can start writing the publishing logic. The code that will fetch all draft
Articles with a publish_at
that is before the current date.
Then we will update the published_at
of all these articles.
Path — ./config/functions/cron.js
module.exports = {
'*/1 * * * *': async () => {
// fetch articles to publish
const draftArticleToPublish = await strapi.api.article.services.article.find({
_publicationState: 'preview',
});
// update published_at of articles
draftArticleToPublish.forEach(async article => {
await strapi.api.article.services.article.update(
{ id: article.id },
{ published_at: new Date() }
);
});
};
And tada!