In this post I am going to explain how to get cms page collection in Magento 2.

1. Using Dependency Injection

Add below code snippet in Block class.

protected $_pageRepository;
protected $_searchCriteriaBuilder;

public function __construct(
    \Magento\Framework\View\Element\Template\Context $context,
    \Magento\Cms\Api\PageRepositoryInterface $pageRepository,
    \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder,
    array $data = []
) {
    $this->_pageRepository = $pageRepository;
    $this->_searchCriteriaBuilder = $searchCriteriaBuilder;
    parent::__construct($context, $data);
}

// Get CMS Page Collection
public function getCmsPageCollection() 
{
    $searchCriteria = $this->_searchCriteriaBuilder->create();
    $cmsPages = $this->_pageRepository->getList($searchCriteria)->getItems();
    return $cmsPages;
}

 

Add below code snippet in template file.

// Get CMS Page Collection
$cmsPages = $block->getCmsPageCollection();

if ($cmsPages && count($cmsPages) > 0) {
    foreach ($cmsPages as $cmsPage) {
        echo $cmsPage->getId() . '<br/>';
        echo $cmsPage->getTitle() . '<br/>';
    }
}

 

2. Using Object Manager

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();

$pageRepository = $objectManager->get('Magento\Cms\Api\PageRepositoryInterface');
$searchCriteriaBuilder = $objectManager->get('Magento\Framework\Api\SearchCriteriaBuilder');

$searchCriteria = $searchCriteriaBuilder->create();
$cmsPages = $pageRepository->getList($searchCriteria)->getItems();

if ($cmsPages && count($cmsPages) > 0) {
    foreach ($cmsPages as $cmsPage) {
        echo $cmsPage->getId() . '<br/>';
        echo $cmsPage->getTitle() . '<br/>';
    }
}

Thats it. Enjoy Magento 2!!