Example on how to create and publish content programmatically using the ContentService.
Learn how to use the Content Service.
Creating content programmatically
In the example below, a new page is programmatically created using the content service. It is assumed that there are two document types, namely Catalogue and Product. In this case, a new Product is added underneath the Catalogue page. Add the below code in the Catalogue template.
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Services;
namespace Umbraco.Cms.Web.UI.Custom;
public class PublishContentDemo
{
private readonly IContentService _contentService;
public PublishContentDemo(IContentService contentService) => _contentService = contentService;
public void Create()
{
// Create a variable for the GUID of the parent page - Catalogue, where you want to add a child item.
var parentId = Guid.Parse("b6fbbb31-a77f-4f9c-85f7-2dc4835c7f31");
// Create a new child item of type 'Product'
var demoProduct = ContentService.Create("Microphone", parentId, "product");
// Set the value of the property with alias 'category'
demoProduct.SetValue("category" , "audio");
// Set the value of the property with alias 'price'
demoProduct.SetValue("price", "1500");
// Save and publish the child item
_contentService.SaveAndPublish(demoProduct);
}
}
In a multi-language setup, it is necessary to set the name of the content item for a specified culture:
demoProduct.SetCultureName("Microphone", "en-us"); // this will set the english name
demoProduct.SetCultureName("Mikrofon", "da"); // this will set the danish name
Publishing content programmatically
The ContentService is also used for publishing operations.
The following example shows a page being published with all descendants.
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Services;
namespace Umbraco.Cms.Web.UI.Custom;
public class PublishContentDemo
{
private readonly IContentService _contentService;
public PublishContentDemo(IContentService contentService) => _contentService = contentService;
public void Publish(Guid key)
{
IContent? content = _contentService.GetById(key)
?? throw new InvalidOperationException($"Could not find content with key: {key}.");
_contentService.SaveAndPublishBranch(content, PublishBranchFilter.Default);
}
}
The PublishBranchFilter option can include one or more of the following flags:
Default - publishes existing published content with pending changes.
IncludeUnpublished - publishes unpublished content and existing published with pending changes.
ForceRepublish - publishes existing published content with or without pending changes.
All - combines IncludeUnpublished and ForceRepublish.