Главная Новости

XML карта сайта на WordPress без плагинов moneyinnetwork_xml_sitemap

Опубликовано: 21.10.2017

Пару дней назад решил избавиться еще от одного увесистого и прожорливого плагина, который строил XML карту сайта на WordPress , причем, несмотря на множество настроек и отличную репутацию среди вебмастеров, этот плагин никак не хотел добавлять к карте дочерние страницы. Вернее, он их добавлял, но при этом уровень вложенности был не более одной страницы и то работало это как-то избирательно (кстати, соответствующую опцию в настройках я активировал). Плагин этот Google XML Sitemaps (может, у меня версия была не последняя, кто знает).

На эту проблему я обратил внимание несколько дней назад. Причем, очевидной лично для меня она стала в тот момент, когда я реализовал у себя на сайте этот простецкий форум, создал несколько разделов и тем и увидел, что в карте-то sitemap.xml нифига нет моих форумных страниц с темами. Во дела, подумал я, и, имея начальный опыт в программировании на php и mysql, решил-таки, что мне нужна XML карта сайта на WordPress без всяких там плагинов , чтобы я точно знал: что, как, куда, откуда и почему .

Порывшись в закромах интернета, подобных решений не нашел. Все вебмастера в сети, на которых меня выводил “Яша”, использовали готовые “плагинные” решения для XML карт WordPress. Засучив рукава, приступил к ночному ваянию кода (днем-то дела несколько иного плана). Вот, собственно, то, что вышло:

//обсуждение функции построения XML карт сайтов moneyinnetwork_xml_sitemap ведется на сайте автора в теме: //http://moneyinnetwork.ru/forum/sajtostroenie-sistemy-upravleniya-sajtom-seo/vse-o-vordpress-wordpress/xml-karta-sajta-na-wordpress-bez-plaginov-moneyinnetwork_xml_sitemap function moneyinnetwork_xml_sitemap ( $home_priority = '1.0' , $page_priority = '0.6' , $post_priority = '0.6' , $other_priority = '0.3' ) { global $wpdb ; $result = $wpdb - > get_results ( "SELECT ID, post_modified_gmt, post_type FROM $wpdb->posts WHERE post_status='publish' ORDER BY post_modified_gmt DESC" , 'ARRAY_A' ) ; if ( ! empty ($result ) ) { $f = '<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' ; $i = 0 ; foreach ( $result as $row ) { $priority = $other_priority ; if ( $row [ 'post_type' ] == 'page' ) $priority = $page_priority ; if ( $row [ 'post_type' ] == 'post' ) $priority = $post_priority ; if ( $i == 0 ) { $f = $f. '<url><loc>' .get_home_url ( ) .'</loc><lastmod>' .date ( 'c' , strtotime ($row [ 'post_modified_gmt' ] ) ) .'</lastmod><changefreq>daily</changefreq><priority>' .$home_priority. '</priority></url>' ; $i = 1 ; } $f = $f. '<url><loc>' .get_permalink ( $row [ 'ID' ] ) .'</loc><lastmod>' .date ( 'c' , strtotime ($row [ 'post_modified_gmt' ] ) ) .'</lastmod><changefreq>daily</changefreq><priority>' .$priority. '</priority></url>' ; } $f = $f. '</urlset>' ; $fp = fopen ( $_SERVER [ 'DOCUMENT_ROOT' ] .'/sitemap.xml' , 'w' ) ; fwrite ( $fp, $f ) ; fclose ( $fp ) ; $result = wp_remote_get ( 'http://www.google.com/ping?sitemap=' .get_home_url ( ) .'/sitemap.xml' ) ; if ( ! is_wp_error ( $result ) || wp_remote_retrieve_response_code ( $result ) === 200 ) { //Карта успешно отправлена в Google. //Это просто под будущие разработки, если надо, конечно. } } return ; }

Итак, функция moneyinnetwork_xml_sitemap() строит XML карту сайта на WordPress, сохраняет ее в корневой директории сайта и “пингует” (отправляет) ее в Google (“примочка”, наверное, бесполезная, если у Вас есть кабинет вебмастера в Google, где Вы явно прописали карту сайта). Функцию moneyinnetwork_xml_sitemap() “укладываем” к функциям темы, то есть размещаем ее в functions.php.

3D стерео фильмы для 5D
rss