There is no default built in functionality to mass publish pages that I could find, so I created a code solution for this:
public void PublishDescendants(ContentReference parentContentReference)
{
// Get necessary services
var contentLoader = ServiceLocator.Current.GetInstance();
var contentRepository = ServiceLocator.Current.GetInstance();
// Get parent content
var parentContent = contentLoader.Get(parentContentReference);
// Create a writable clone of the parent content and publish it
var clonedParentContent = parentContent.CreateWritableClone();
contentRepository.Save(clonedParentContent, SaveAction.Publish, AccessLevel.Read);
// Get all descendants of the parent content
var descendantContentReferences = contentLoader.GetDescendents(parentContentReference);
// Collect all descendants that are of type PageData in a list
var descendantPageDataList = new List();
foreach (var descendantContentReference in descendantContentReferences)
{
// Try to get the descendant content as PageData
bool success = contentLoader.TryGet(descendantContentReference, out var descendantPageData);
if (success)
{
// Add the descendant content to the list if it is of type PageData
descendantPageDataList.Add(descendantPageData);
}
}
// Publish all descendants
foreach (var descendantPageData in descendantPageDataList)
{
// Create a writable clone of the descendant content and publish it
var clonedDescendantContent = descendantPageData.CreateWritableClone();
contentRepository.Save(clonedDescendantContent, SaveAction.Publish, AccessLevel.Read);
}
}
Call the method with the desired page id and all the pages below it, including itself, will be published:
var parent = new ContentReference(11758); PublishDescendants(parent);