HTML Meta Tags Automator

Script di automazione di inserimento di meta tag HTML all'interno di pagine contenenti un placeholder predefinito.
PHP, JSON - 2018

JSON Config file

Un estratto del file di configurazione che contiene le pagine di cui aggiungere i metatag definiti.

        
        {
            "page1_to_replace": {
                "meta": {
                    "keywords": "...",
                    "description": "...",
                    "twitter:image": "...",
                    "twitter:title": "...",
                    "twitter:description": "...",
                    "twitter:card": "...",
                    "og:image": "...",
                    "og:site_name": "...",
                    "og:url": "...",
                    "og:description": "...",
                    "og:title": "...",
                    "og:type": "...",
                    "og:locale": "..."
                },
                "title": "..."
            },
            ...
        }
        
        

PHP Function

La funzione php mostra come leggere il file JSON di configurazione, effettuare un backup del file originale e poi rimpiazzarlo con i valori aggiornati.

        
        function work($json_config_file)
        {
            if (!file_exists($json_config_file)) return;
            $meta_info = json_decode(file_get_contents($json_config_file), true);

            foreach($meta_info as $page => $meta_tags)
            {
                //skip if page does not exists...
                if (!file_exists($page)) continue;

                //backup page
                copy($page, $page.".old");

                //load all page into a string for working...
                $str_page = file_get_contents($page);
                
                //remove the <title> tag. Will be added what is defined in the json item
                $title_start_idx = strpos($str_page, "<title>");
                $title_end_idx = strpos($str_page, "</title>");
                if ($title_start_idx !== false && $title_end_idx !== false)
                {
                    $str_page = substr_replace($str_page, "", $title_start_idx, $title_end_idx-$title_start_idx+8);
                }
                
                //build a string with the title and the meta tags defined in the json item
                $str_meta_tags = "\t".'<title>'.$meta_tags['title'].'</title>'."\r\n";
                foreach ($meta_tags['meta'] as $key => $value)
                {
                    if (strpos($key, 'og:') !== false) //if meta tag name is OpenGraph protocol
                        $str_meta_tags .= "\t".'<meta property="'.$key.'" content="'.$value.'">'."\r\n";
                    else
                        $str_meta_tags .= "\t".'<meta name="'.$key.'" content="'.$value.'">'."\r\n";
            
                }

                //replace the placeholder with the actual meta tags
                $str_page = str_replace("", $str_meta_tags, $str_page);
                
                //save file
                file_put_contents($page, $str_page);
            }
        }