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

    1. module.exports = {
    2. '*/1 * * * *': async () => {
    3. // fetch articles to publish
    4. const draftArticleToPublish = await strapi.api.article.services.article.find({
    5. _publicationState: 'preview',
    6. });
    7. // update published_at of articles
    8. draftArticleToPublish.forEach(async article => {
    9. await strapi.api.article.services.article.update(
    10. { id: article.id },
    11. { published_at: new Date() }
    12. );
    13. });
    14. };

    And tada!