Skip to Content

manifest_json()

Dynamically generate a manifest.json file.

PHP June 29, 2017

Usage

This function runs automatically, so it is not called manually. Is this incorrect?

Source File

Located in /libs/Functions.php on line 312.

2 Hooks

Find these filters and actions in the source code below to hook into them. Use do_action() and add_filter() in your functions file or plugin.

Filters
"pre_nebula_manifest_json"
"nebula_manifest_shortcuts"
Need a new filter hook? Request one here.

Actions
This function has no action hooks available. Request one?

PHP
        public function manifest_json(){
            $timer_name = $this->timer('Write Manifest JSON', 'start', 'Manifest');

            $override = apply_filters('pre_nebula_manifest_json', null);
            if ( isset($override) ){return;}

            $manifest_json = '{
                "name": "' . get_bloginfo('name') . ': ' . get_bloginfo('description') . '",
                "short_name": "' . get_bloginfo('name') . '",
                "description": "' . get_bloginfo('description') . '",
                "theme_color": "' . get_theme_mod('nebula_primary_color', $this->get_color('$primary_color')) . '",
                "background_color": "' . get_theme_mod('nebula_background_color', $this->get_color('$background_color')) . '",
                "gcm_sender_id": "' . $this->get_option('gcm_sender_id') . '",
                "scope": "/",
                "start_url": "' . home_url('/') . '?utm_source=pwa",
                "display": "standalone",
                "orientation": "portrait",';

            $shortcuts = apply_filters('nebula_manifest_shortcuts', array()); //Allow the child theme (or plugins) to add shortcuts to the PWA
            if ( !empty($shortcuts) ){
                $manifest_json .= '"shortcuts": ' . json_encode($shortcuts, JSON_PRETTY_PRINT) . ',';
            }

            $manifest_json .= '"icons": [';
            if ( has_site_icon() ){
                $manifest_json .= '{
                    "src": "' . get_site_icon_url(16, get_theme_file_uri('/assets/img/meta') . '/favicon-16x16.png') . '",
                    "sizes": "16x16",
                    "type": "image/png"
                }, {
                    "src": "' . get_site_icon_url(32, get_theme_file_uri('/assets/img/meta') . '/favicon-32x32.png') . '",
                    "sizes": "32x32",
                    "type": "image/png"
                }, {
                    "src": "' . get_site_icon_url(192, get_theme_file_uri('/assets/img/meta') . '/android-chrome-192x192.png') . '",
                    "sizes": "192x192",
                    "type": "image/png",
                    "purpose": "any maskable"
                }, {
                    "src": "' . get_site_icon_url(512, get_theme_file_uri('/assets/img/meta') . '/android-chrome-512x512.png') . '",
                    "sizes": "512x512",
                    "type": "image/png",
                    "purpose": "any maskable"
                }';
            } else {
                //Loop through all meta images
                $files = glob(get_theme_file_path('/assets/img/meta') . '/*.png');
                foreach ( $files as $file ){
                    $filename = $this->url_components('filename', $file);
                    $dimensions = getimagesize($file); //Considering adding an @ to ignore notices when getimagesize fails
                    if ( !empty($dimensions) ){
                        $manifest_json .= '{
                            "src": "' . get_theme_file_uri('/assets/img/meta') . '/' . $filename . '",
                            "sizes": "' . $dimensions[0] . 'x' . $dimensions[1] . '",
                            "type": "image/png",
                            "purpose": "any maskable"
                        }, ';
                    }
                }
            }

            $manifest_json = rtrim($manifest_json, ', ') . ']}';

            WP_Filesystem();
            global $wp_filesystem;
            $wp_filesystem->put_contents($this->manifest_json_location(false), $manifest_json);
            $this->timer($timer_name, 'end');
        }

Override

To override this PHP function, use this hook in your child theme or plugin ("my_custom" can be changed):

PHP
add_filter('pre_nebula_manifest_json', 'my_custom_manifest_json'); 
function my_custom_manifest_json(){ 
    //Write your own code here

    return true; //Return true to prevent the original function from running afterwords
}

You can completely disable this PHP function with a single line actions:

PHP
 add_filter('pre_nebula_manifest_json', '__return_false');