WordPress Version: 5.9
/**
* Expands a theme's starter content configuration using core-provided data.
*
* @since 4.7.0
*
* @return array Array of starter content.
*/
function get_theme_starter_content()
{
$theme_support = get_theme_support('starter-content');
if (is_array($theme_support) && !empty($theme_support[0]) && is_array($theme_support[0])) {
$config = $theme_support[0];
} else {
$config = array();
}
$core_content = array('widgets' => array('text_business_info' => array('text', array('title' => _x('Find Us', 'Theme starter content'), 'text' => implode('', array('<strong>' . _x('Address', 'Theme starter content') . "</strong>\n", _x('123 Main Street', 'Theme starter content') . "\n", _x('New York, NY 10001', 'Theme starter content') . "\n\n", '<strong>' . _x('Hours', 'Theme starter content') . "</strong>\n", _x('Monday–Friday: 9:00AM–5:00PM', 'Theme starter content') . "\n", _x('Saturday & Sunday: 11:00AM–3:00PM', 'Theme starter content'))), 'filter' => true, 'visual' => true)), 'text_about' => array('text', array('title' => _x('About This Site', 'Theme starter content'), 'text' => _x('This may be a good place to introduce yourself and your site or include some credits.', 'Theme starter content'), 'filter' => true, 'visual' => true)), 'archives' => array('archives', array('title' => _x('Archives', 'Theme starter content'))), 'calendar' => array('calendar', array('title' => _x('Calendar', 'Theme starter content'))), 'categories' => array('categories', array('title' => _x('Categories', 'Theme starter content'))), 'meta' => array('meta', array('title' => _x('Meta', 'Theme starter content'))), 'recent-comments' => array('recent-comments', array('title' => _x('Recent Comments', 'Theme starter content'))), 'recent-posts' => array('recent-posts', array('title' => _x('Recent Posts', 'Theme starter content'))), 'search' => array('search', array('title' => _x('Search', 'Theme starter content')))), 'nav_menus' => array('link_home' => array('type' => 'custom', 'title' => _x('Home', 'Theme starter content'), 'url' => home_url('/')), 'page_home' => array(
// Deprecated in favor of 'link_home'.
'type' => 'post_type',
'object' => 'page',
'object_id' => '{{home}}',
), 'page_about' => array('type' => 'post_type', 'object' => 'page', 'object_id' => '{{about}}'), 'page_blog' => array('type' => 'post_type', 'object' => 'page', 'object_id' => '{{blog}}'), 'page_news' => array('type' => 'post_type', 'object' => 'page', 'object_id' => '{{news}}'), 'page_contact' => array('type' => 'post_type', 'object' => 'page', 'object_id' => '{{contact}}'), 'link_email' => array('title' => _x('Email', 'Theme starter content'), 'url' => 'mailto:[email protected]'), 'link_facebook' => array('title' => _x('Facebook', 'Theme starter content'), 'url' => 'https://www.facebook.com/wordpress'), 'link_foursquare' => array('title' => _x('Foursquare', 'Theme starter content'), 'url' => 'https://foursquare.com/'), 'link_github' => array('title' => _x('GitHub', 'Theme starter content'), 'url' => 'https://github.com/wordpress/'), 'link_instagram' => array('title' => _x('Instagram', 'Theme starter content'), 'url' => 'https://www.instagram.com/explore/tags/wordcamp/'), 'link_linkedin' => array('title' => _x('LinkedIn', 'Theme starter content'), 'url' => 'https://www.linkedin.com/company/1089783'), 'link_pinterest' => array('title' => _x('Pinterest', 'Theme starter content'), 'url' => 'https://www.pinterest.com/'), 'link_twitter' => array('title' => _x('Twitter', 'Theme starter content'), 'url' => 'https://twitter.com/wordpress'), 'link_yelp' => array('title' => _x('Yelp', 'Theme starter content'), 'url' => 'https://www.yelp.com'), 'link_youtube' => array('title' => _x('YouTube', 'Theme starter content'), 'url' => 'https://www.youtube.com/channel/UCdof4Ju7amm1chz1gi1T2ZA')), 'posts' => array('home' => array('post_type' => 'page', 'post_title' => _x('Home', 'Theme starter content'), 'post_content' => sprintf("<!-- wp:paragraph -->\n<p>%s</p>\n<!-- /wp:paragraph -->", _x('Welcome to your site! This is your homepage, which is what most visitors will see when they come to your site for the first time.', 'Theme starter content'))), 'about' => array('post_type' => 'page', 'post_title' => _x('About', 'Theme starter content'), 'post_content' => sprintf("<!-- wp:paragraph -->\n<p>%s</p>\n<!-- /wp:paragraph -->", _x('You might be an artist who would like to introduce yourself and your work here or maybe you’re a business with a mission to describe.', 'Theme starter content'))), 'contact' => array('post_type' => 'page', 'post_title' => _x('Contact', 'Theme starter content'), 'post_content' => sprintf("<!-- wp:paragraph -->\n<p>%s</p>\n<!-- /wp:paragraph -->", _x('This is a page with some basic contact information, such as an address and phone number. You might also try a plugin to add a contact form.', 'Theme starter content'))), 'blog' => array('post_type' => 'page', 'post_title' => _x('Blog', 'Theme starter content')), 'news' => array('post_type' => 'page', 'post_title' => _x('News', 'Theme starter content')), 'homepage-section' => array('post_type' => 'page', 'post_title' => _x('A homepage section', 'Theme starter content'), 'post_content' => sprintf("<!-- wp:paragraph -->\n<p>%s</p>\n<!-- /wp:paragraph -->", _x('This is an example of a homepage section. Homepage sections can be any page other than the homepage itself, including the page that shows your latest blog posts.', 'Theme starter content')))));
$content = array();
foreach ($config as $type => $args) {
switch ($type) {
// Use options and theme_mods as-is.
case 'options':
case 'theme_mods':
$content[$type] = $config[$type];
break;
// Widgets are grouped into sidebars.
case 'widgets':
foreach ($config[$type] as $sidebar_id => $widgets) {
foreach ($widgets as $id => $widget) {
if (is_array($widget)) {
// Item extends core content.
if (!empty($core_content[$type][$id])) {
$widget = array($core_content[$type][$id][0], array_merge($core_content[$type][$id][1], $widget));
}
$content[$type][$sidebar_id][] = $widget;
} elseif (is_string($widget) && !empty($core_content[$type]) && !empty($core_content[$type][$widget])) {
$content[$type][$sidebar_id][] = $core_content[$type][$widget];
}
}
}
break;
// And nav menu items are grouped into nav menus.
case 'nav_menus':
foreach ($config[$type] as $nav_menu_location => $nav_menu) {
// Ensure nav menus get a name.
if (empty($nav_menu['name'])) {
$nav_menu['name'] = $nav_menu_location;
}
$content[$type][$nav_menu_location]['name'] = $nav_menu['name'];
foreach ($nav_menu['items'] as $id => $nav_menu_item) {
if (is_array($nav_menu_item)) {
// Item extends core content.
if (!empty($core_content[$type][$id])) {
$nav_menu_item = array_merge($core_content[$type][$id], $nav_menu_item);
}
$content[$type][$nav_menu_location]['items'][] = $nav_menu_item;
} elseif (is_string($nav_menu_item) && !empty($core_content[$type]) && !empty($core_content[$type][$nav_menu_item])) {
$content[$type][$nav_menu_location]['items'][] = $core_content[$type][$nav_menu_item];
}
}
}
break;
// Attachments are posts but have special treatment.
case 'attachments':
foreach ($config[$type] as $id => $item) {
if (!empty($item['file'])) {
$content[$type][$id] = $item;
}
}
break;
// All that's left now are posts (besides attachments).
// Not a default case for the sake of clarity and future work.
case 'posts':
foreach ($config[$type] as $id => $item) {
if (is_array($item)) {
// Item extends core content.
if (!empty($core_content[$type][$id])) {
$item = array_merge($core_content[$type][$id], $item);
}
// Enforce a subset of fields.
$content[$type][$id] = wp_array_slice_assoc($item, array('post_type', 'post_title', 'post_excerpt', 'post_name', 'post_content', 'menu_order', 'comment_status', 'thumbnail', 'template'));
} elseif (is_string($item) && !empty($core_content[$type][$item])) {
$content[$type][$item] = $core_content[$type][$item];
}
}
break;
}
}
/**
* Filters the expanded array of starter content.
*
* @since 4.7.0
*
* @param array $content Array of starter content.
* @param array $config Array of theme-specific starter content configuration.
*/
return apply_filters('get_theme_starter_content', $content, $config);
}