Better WordPress Google XML Sitemaps (support Sitemap Index, Multi-site and Google News) - Version 1.4.0

Version Description

(2016-01-14) =

For a quick overview of all the changes, take a look at this article instead: http://betterwp.net/bwp-google-xml-sitemaps-1-4-0-released/

  • New Features
    • Add a "News age" setting to allow more control over the Google News sitemap's contents. See http://betterwp.net/wordpress-plugins/google-xml-sitemaps/faq/#google-news-age for more info.
    • Allow excluding posts by terms. If a post belongs to several terms, it will be excluded if any of those terms is excluded.
    • Add a new filter hook bwp_gxs_external_sitemaps that can be used to add non-BWP sitemaps to the sitemap index. Read here for more info.
    • Add featured image to existing post-based sitemaps.
      • To enable this feature, go to BWP Sitemaps > Extensions and choose to enable the "Google Image Sitemap" extension, and select post type(s) to enable the extension for.
      • This feature is enabled automatically for the Google News sitemap if the news post type has the "Google Image Sitemap" extension enabled for it.
      • As a related change for this new feature, Google News sitemap is now part of BWP Sitemap > Extensions as well.
    • Add ability to use custom post types and taxonomies for the Google News sitemap.
    • Allow regenerating individual sitemap via admin page.
    • Allow adding non-WordPress pages via BWP Sitemaps > XML Sitemaps > External Pages.
    • Allow excluding posts/terms via BWP Sitemaps > XML Sitemaps > Exclude items.
  • Enhancements
    • Disable some inputs when they are overridden via codes and display overridden values instead.
    • Make "Frequency", "Priority" and "Last modified" optional when adding/updating external pages.
    • Handle last modified datetime of non-post items more consistently.
  • Other Changes
    • Update language template file. If you're a translator, please help translating this plugin! For more info, see: http://betterwp.net/wordpress-tips/create-pot-file-using-poedit/
    • Mark as compatible with WordPress 4.4+. Now require at least WordPress 3.6 and PHP 5.2.0.
    • Choosing which post types/taxonomies to generate sitemaps for is now an opt-out setting. Instead of choosing which post types/taxonomies to disable sitemap generation, you would now choose post types/taxonomies whose sitemaps should be generated.
    • Display an error message when enabling the Google News sitemap but it can not be generated.
    • Make it more obvious to check and generate the Sitemap Index when needed.
      • If no sitemap has been generated yet, a button to generate the Sitemap Index will be shown.
      • The "Clear All Logs" button have been moved to the "Sitemap Log" tab, and renamed to "Clear Message Log". Clicking on that button will now clear the message log only, leaving the sitemap log untouched. The sitemap log is expected to be improved in version 2.0.0.
    • Disable indexing of sitemaps using the X-Robots-Tag: noindex header.
    • Add more Google News sitemap languages, allow customizing language list via bwp_gxs_news_languages filter hook.
    • XSLT stylesheet is now disabled by default.
  • Bugs fixed
    • Fix a bug that causes post.xml to be included in sitemap index even when explicitly excluded.
    • Fix a bug that causes the sitemap index to be empty when post-splitting is not enabled.
    • Filter out urls whose protocols do not match the current protocol.
      • When SSL is not used, all HTTPS urls will be filtered out.
      • When SSL is used, all HTTP urls will be filtered out.
    • Fix a bug that makes it not possible to flush the default cache directory. The cause was we cached the cache directory in the BWP_Sitemaps::$cache_directory object, which was not updated correctly when flushing cache.
    • Fix a bug that could lead to custom post types being included in post.xml sitemap.
    • Fix a bug in the Google News sitemap that leads to duplicate posts when posts are assigned to multiple categories.
    • Fix a bug that generate duplicate terms when some terms are excluded.
    • Use UTC timezone when looking for google news posts.
Download this release

Release Info

Developer OddOneOut
Plugin Icon wp plugin Better WordPress Google XML Sitemaps (support Sitemap Index, Multi-site and Google News)
Version 1.4.0
Comparing to
See all releases

Code changes from version 1.3.0 to 1.4.0

Files changed (153) hide show
  1. assets/css/style.css +24 -0
  2. assets/dist/css/style.min.css +1 -0
  3. assets/dist/js/script.min.js +1 -0
  4. {images → assets/images}/icon_menu.png +0 -0
  5. {images → assets/images}/icon_menu_32.png +0 -0
  6. assets/js/admin-extensions.js +137 -0
  7. assets/js/bwp-gxs-admin.js +295 -0
  8. {xsl → assets/xsl}/bwp-sitemap.xsl +2 -2
  9. {xsl → assets/xsl}/bwp-sitemapindex.xsl +2 -2
  10. autoload.php +17 -0
  11. bwp-google-xml-sitemaps.pot +1480 -0
  12. bwp-gxs-ms.php +2 -0
  13. bwp-gxs.php +31 -0
  14. bwp-simple-gxs-ms.php +0 -2
  15. bwp-simple-gxs.php +12 -10
  16. bwp-simple-gxs.pot +0 -1046
  17. css/bwp-simple-gxs.css +0 -43
  18. includes/bwp-option-page/bwp-option-page.php +0 -3
  19. includes/bwp-option-page/css/bwp-option-page.css +0 -176
  20. includes/bwp-option-page/images/ad_250x250.png +0 -0
  21. includes/bwp-option-page/includes/class-bwp-option-page.php +0 -630
  22. includes/bwp-option-page/includes/index.php +0 -3
  23. includes/bwp-option-page/index.php +0 -3
  24. includes/bwp-option-page/js/paypal.js +0 -11
  25. includes/class-bwp-framework-improved.php +0 -733
  26. includes/class-bwp-simple-gxs.php +0 -3547
  27. includes/index.php +0 -3
  28. includes/modules/page_external.php +0 -52
  29. includes/modules/post_google_news.php +0 -250
  30. js/bwp-gxs.js +0 -14
  31. languages/bwp-google-xml-sitemaps-es_ES.mo +0 -0
  32. languages/bwp-google-xml-sitemaps-es_ES.po +1918 -0
  33. languages/bwp-google-xml-sitemaps-ms_MY.mo +0 -0
  34. languages/bwp-google-xml-sitemaps-ms_MY.po +1681 -0
  35. languages/bwp-google-xml-sitemaps-ro_RO.mo +0 -0
  36. languages/bwp-google-xml-sitemaps-ro_RO.po +1666 -0
  37. languages/bwp-google-xml-sitemaps-zh_TW.mo +0 -0
  38. languages/bwp-google-xml-sitemaps-zh_TW.po +1692 -0
  39. languages/bwp-simple-gxs-es_ES.mo +0 -0
  40. languages/bwp-simple-gxs-es_ES.po +0 -1035
  41. languages/bwp-simple-gxs-ms_MY.mo +0 -0
  42. languages/bwp-simple-gxs-ms_MY.po +0 -793
  43. languages/bwp-simple-gxs-ro_RO.mo +0 -0
  44. languages/bwp-simple-gxs-ro_RO.po +0 -793
  45. languages/bwp-simple-gxs-zh_TW.mo +0 -0
  46. languages/bwp-simple-gxs-zh_TW.po +0 -785
  47. readme.txt +177 -172
  48. screenshot-2.png +0 -0
  49. screenshot-3.png +0 -0
  50. screenshot-4.png +0 -0
  51. screenshot-5.png +0 -0
  52. screenshot-6.png +0 -0
  53. screenshot-7.png +0 -0
  54. screenshot-8.png +0 -0
  55. {includes → src}/class-bwp-gxs-cache.php +3 -5
  56. {includes → src}/class-bwp-gxs-module.php +243 -83
  57. src/class-bwp-gxs.php +4095 -0
  58. {includes → src}/common-functions.php +2 -2
  59. src/handler/ajax/external-page.php +219 -0
  60. src/handler/ajax/handler.php +36 -0
  61. src/handler/ajax/news-terms.php +88 -0
  62. src/handler/ajax/post.php +78 -0
  63. src/handler/ajax/taxonomy.php +100 -0
  64. src/handler/ajax/wp-content.php +53 -0
  65. src/index.php +2 -0
  66. src/logger/log-item.php +105 -0
  67. src/logger/logger.php +148 -0
  68. src/logger/message-log-item.php +96 -0
  69. src/logger/message-logger.php +24 -0
  70. src/logger/sitemap-log-item.php +64 -0
  71. src/logger/sitemap-logger.php +40 -0
  72. {includes → src}/modules/archive.php +1 -1
  73. {includes → src}/modules/author.php +1 -1
  74. {includes → src}/modules/index.php +0 -0
  75. {includes → src}/modules/page.php +20 -3
  76. src/modules/page_external.php +90 -0
  77. {includes → src}/modules/post.php +153 -22
  78. {includes → src}/modules/post_attachment.php +0 -0
  79. src/modules/post_google_news.php +312 -0
  80. {includes → src}/modules/post_most_popular.php +4 -6
  81. {includes → src}/modules/site.php +13 -4
  82. {includes → src}/modules/sitemapindex.php +52 -28
  83. {includes → src}/modules/taxonomy.php +43 -11
  84. src/phpunit/provider-unit-testcase.php +43 -0
  85. src/phpunit/wp-functional-testcase.php +53 -0
  86. src/provider/excluder.php +118 -0
  87. src/provider/external-page.php +123 -0
  88. src/provider/google-news/languages.php +62 -0
  89. src/provider/post/post.php +82 -0
  90. src/provider/provider.php +41 -0
  91. src/provider/taxonomy/taxonomy.php +98 -0
  92. src/sitemap/provider/provider.php +121 -0
  93. src/sitemap/sanitizer/sanitizer.php +49 -0
  94. src/sitemap/sanitizer/xml/factory.php +54 -0
  95. src/sitemap/sanitizer/xml/frequency.php +37 -0
  96. src/sitemap/sanitizer/xml/priority.php +35 -0
  97. src/sitemap/sanitizer/xml/text.php +20 -0
  98. src/sitemap/sitemap.php +198 -0
  99. src/sitemap/tag/compound-tag.php +111 -0
  100. src/sitemap/tag/single-tag.php +13 -0
  101. src/sitemap/tag/tag.php +275 -0
  102. src/sitemap/xml-google-news.php +83 -0
  103. src/sitemap/xml-index.php +49 -0
  104. src/sitemap/xml.php +121 -0
  105. src/templates/logger/admin/message-log.html.php +25 -0
  106. src/templates/logger/admin/sitemap-log.html.php +53 -0
  107. src/templates/provider/admin/exclude-posts.html.php +34 -0
  108. src/templates/provider/admin/exclude-terms.html.php +34 -0
  109. src/templates/provider/admin/external-page-form.html.php +61 -0
  110. src/templates/provider/admin/external-page-modal.html.php +38 -0
  111. src/templates/provider/admin/external-pages.html.php +31 -0
  112. src/templates/provider/admin/news-contents.html.php +21 -0
  113. src/upgrades/db/r2.php +49 -0
  114. src/upgrades/db/r3.php +35 -0
  115. src/upgrades/db/r4.php +11 -0
  116. src/validator/url.php +49 -0
  117. vendor/autoload.php +7 -0
  118. vendor/composer/ClassLoader.php +413 -0
  119. vendor/composer/LICENSE +21 -0
  120. vendor/composer/autoload_classmap.php +67 -0
  121. vendor/composer/autoload_namespaces.php +9 -0
  122. vendor/composer/autoload_psr4.php +9 -0
  123. vendor/composer/autoload_real.php +45 -0
  124. vendor/composer/installed.json +52 -0
  125. vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  126. vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-bg_flat_100_d5d5d5_40x100.png +0 -0
  127. vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-bg_flat_100_eee_40x100.png +0 -0
  128. vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-bg_flat_100_f7f7f7_40x100.png +0 -0
  129. vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-bg_flat_100_fafafa_40x100.png +0 -0
  130. vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-bg_flat_75_cccccc_40x100.png +0 -0
  131. vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  132. vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  133. vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-icons_222222_256x240.png +0 -0
  134. vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-icons_23282d_256x240.png +0 -0
  135. vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-icons_32373c_256x240.png +0 -0
  136. vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-icons_555_256x240.png +0 -0
  137. vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-icons_cd0a0a_256x240.png +0 -0
  138. vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-icons_fff_256x240.png +0 -0
  139. vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/jquery-ui.css +1225 -0
  140. vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/jquery-ui.min.css +7 -0
  141. vendor/kminh/bwp-framework/assets/option-page/css/less/bootstrap.less +99 -0
  142. vendor/kminh/bwp-framework/assets/option-page/css/less/bwp-tabs.less +50 -0
  143. vendor/kminh/bwp-framework/assets/option-page/css/less/bwp.less +275 -0
  144. vendor/kminh/bwp-framework/assets/option-page/css/less/codemirror.less +41 -0
  145. vendor/kminh/bwp-framework/assets/option-page/css/less/datetimepicker.less +3 -0
  146. vendor/kminh/bwp-framework/assets/option-page/css/less/form.less +232 -0
  147. vendor/kminh/bwp-framework/assets/option-page/css/less/mixins.less +33 -0
  148. vendor/kminh/bwp-framework/assets/option-page/css/less/modal.less +37 -0
  149. vendor/kminh/bwp-framework/assets/option-page/css/less/popover.less +28 -0
  150. vendor/kminh/bwp-framework/assets/option-page/css/less/style.less +10 -0
  151. vendor/kminh/bwp-framework/assets/option-page/css/less/table.less +137 -0
  152. vendor/kminh/bwp-framework/assets/option-page/css/less/variables.less +5 -0
  153. vendor/kminh/bwp-framework/assets/option-page/css/style.css +1079 -0
assets/css/style.css ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ * html .bwp-gxs-log {
2
+ height: expression( this.scrollHeight > 200 ? "200px" : "auto" );
3
+ }
4
+
5
+ .bwp-gxs-log {
6
+ /* width: 72%; */
7
+ margin-top: 1.5em;
8
+
9
+ font-size: 0.95em;
10
+ background-color: #ffffff;
11
+ padding: 5px 10px; padding-top: 0px;
12
+
13
+ border: 1px solid #cccccc;
14
+ overflow: auto;
15
+ }
16
+
17
+ .bwp-gxs-log-big {
18
+ max-height: 600px;
19
+ min-height: 500px;
20
+ }
21
+
22
+ .bwp-gxs-log-small {
23
+ max-height: 200px;
24
+ }
assets/dist/css/style.min.css ADDED
@@ -0,0 +1 @@
 
1
+ * html .bwp-gxs-log{height:expression( this.scrollHeight > 200 ? "200px" : "auto" )}.bwp-gxs-log{margin-top:1.5em;font-size:.95em;background-color:#fff;padding:0 10px 5px;border:1px solid #ccc;overflow:auto}.bwp-gxs-log-big{max-height:600px;min-height:500px}.bwp-gxs-log-small{max-height:200px}
assets/dist/js/script.min.js ADDED
@@ -0,0 +1 @@
 
1
+ function bwp_disable_inputs(e){e("#select_news_taxonomy").prop("disabled",true);e("#select_news_cat_action").prop("disabled",true);e("#table-selected-term-genres :input").prop("disabled",true);e('input[name="submit_bwp_gxs_google_news"]').prop("disabled",true)}function bwp_enable_inputs(e){e("#select_news_taxonomy").prop("disabled",false);e("#select_news_cat_action").prop("disabled",false);e("#table-selected-term-genres :input").prop("disabled",false);e('input[name="submit_bwp_gxs_google_news"]').prop("disabled",false)}function bwp_select_news_post_type_cb(e,t){var a=t.val();bwp_disable_inputs(e);e.get(ajaxurl,{action:"bwp-gxs-get-object-taxonomies",post_type:a},function(t){if(e.isArray(t)){e("#select_news_taxonomy option:gt(0)").remove();e.each(t,function(t,a){e("#select_news_taxonomy").append(e("<option></option>").val(a.name).text(a.title))});e("#select_news_taxonomy").trigger("change")}bwp_enable_inputs(e)})}function bwp_select_news_taxonomy_cb(e,t,a){if(e.fn.dataTable.isDataTable("#table-selected-term-genres")){e("#table-selected-term-genres").DataTable().clear().destroy();e("#wrapper-selected-term-genres").addClass("bwp-no-display").find('input[name="term_genre_can_submit"]').val(0)}var n=t.val();if(n){e("#button-toggle-selected-term-genres").click()}}function bwp_button_view_selected_term_genres_cb(e,t,a){if(!e.fn.dataTable.isDataTable("#table-selected-term-genres")){e.get(ajaxurl,{action:"bwp-gxs-get-news-term-genres",news_taxonomy:e("#select_news_taxonomy").val()},function(t){var n=e("#table-selected-term-genres").DataTable({deferRender:true,autoWidth:false,order:[[1,"asc"]],columns:[{data:"id",width:"10%",orderable:false,render:function(e,t,a){return'<input type="checkbox" '+'id="news_term_'+e+'" '+'name="term_'+e+'" '+'value="1" '+(a.selected?'checked="checked" ':"")+"/>"}},{data:"name",width:"25%",render:function(e,t,a){return'<label for="news_term_'+a.id+'">'+e+"</label>"}},{data:"genres",width:"65%",orderable:false,render:function(t,a,n){var r="";e.each(t,function(e,t){r+="<label>"+'<input type="checkbox" '+'name="term_'+n.id+'_genres[]" '+'value="'+t.name+'" '+(t.selected?'checked="checked" ':"")+"/> "+t.name+"</label>"+"&nbsp;&nbsp;&nbsp;"});return e.trim(r)}}]});n.columns.adjust().clear().rows.add(t).draw();e("#wrapper-selected-term-genres").find('input[name="term_genre_can_submit"]').val(1);a()},"json")}else{a()}}function bwp_reset_exclude_form(e,t,a){e("#select-exclude-"+a).select2({ajax:{url:ajaxurl,dataType:"json",data:function(e){return{action:"bwp-gxs-get-"+a,group:t.val(),q:e.term}},processResults:function(e){return{results:e.items}}},minimumInputLength:2,templateResult:function(e){return e.title},templateSelection:function(e){return e.title}});e("#select-exclude-"+a).val(null).trigger("change");if(e.fn.dataTable.isDataTable("#table-excluded-"+a)){e("#table-excluded-"+a).DataTable().clear().destroy();e("#wrapper-excluded-"+a).addClass("bwp-no-display")}}function bwp_select_exclude_post_cb(e,t){bwp_reset_exclude_form(e,t,"posts")}function bwp_select_exclude_term_cb(e,t){bwp_reset_exclude_form(e,t,"terms")}function bwp_add_rows_to_table(e,t){e.columns.adjust().clear().rows.add(t).draw()}function bwp_add_row_to_table(e,t){e.columns.adjust().row.add(t).draw()}function bwp_remove_table_row(e,t){e.row(t).remove().draw(false)}function bwp_view_excluded_items(e,t,a,n){var r=n=="posts"?"select_exclude_post_type":"select_exclude_taxonomy";if(!e.fn.dataTable.isDataTable("#table-excluded-"+n)){e.get(ajaxurl,{action:"bwp-gxs-get-excluded-"+n,group:e("#"+r).val()},function(t){var r=e("#table-excluded-"+n).DataTable({deferRender:true,autoWidth:false,columns:[{data:"id",width:"15%"},{data:"title",width:"65%"},{data:"id",render:function(e){return'<button type="button" '+'data-item-id="'+e+'" '+'title="'+bwp_gxs.text.exclude_items.remove_title+'" '+'class="button-secondary bwp-button bwp-ua-remove">'+'<span class="dashicons dashicons-trash"></span>'+"</button>"},orderable:false,width:"20%"}]});bwp_add_rows_to_table(r,t);a()},"json")}else{a()}}function bwp_button_view_excluded_posts_cb(e,t,a){bwp_view_excluded_items(e,t,a,"posts")}function bwp_button_view_excluded_terms_cb(e,t,a){bwp_view_excluded_items(e,t,a,"terms")}function bwp_button_add_new_external_page_cb(e,t){if(!t.data){return}if(!e.fn.dataTable.isDataTable("#table-external-pages")){return}var a=e("#table-external-pages").DataTable();if(!t.updated){bwp_add_row_to_table(a,t.data)}else{a.row(function(e,a,n){return a.url===t.data.url}).data(t.data)}}function bwp_button_view_external_pages_cb(e,t,a){if(!e.fn.dataTable.isDataTable("#table-external-pages")){e.get(ajaxurl,{action:"bwp-gxs-get-external-pages"},function(t){var n=e("#table-external-pages").DataTable({deferRender:true,autoWidth:false,order:[[3,"desc"]],columns:[{data:"url",width:"55%",render:function(e){return'<a target="_blank" href="'+e+'">'+e+"</a>"}},{data:"frequency"},{data:"priority"},{data:"last_modified"},{data:"url",render:function(e){return'<button type="button" '+'data-item-id="'+e+'" '+'data-toggle="modal"'+'data-target="#modal-external-page"'+'title="'+bwp_gxs.text.external_pages.edit_title+'" '+'class="button-secondary bwp-button bwp-ua-edit">'+'<span class="dashicons dashicons-edit"></span>'+"</button>"+" "+'<button type="button" '+'data-item-id="'+e+'" '+'title="'+bwp_gxs.text.external_pages.remove_title+'" '+'class="button-secondary bwp-button bwp-ua-remove">'+'<span class="dashicons dashicons-trash"></span>'+"</button>"},orderable:false,width:"10%"}]});bwp_add_rows_to_table(n,t);a()},"json")}else{a()}}function bwp_remove_excluded_item(e,t,a,n){bwp_bootbox.confirm(bwp_gxs.text.exclude_items.remove_warning,function(){jQuery.post(ajaxurl,{action:"bwp-gxs-remove-excluded-"+n,_ajax_nonce:bwp_gxs.nonce.remove_excluded_item,group:a,id:t.data("itemId")},function(a){if(a!=1){return}if(e.fn.dataTable.isDataTable("#table-excluded-"+n+"s")){bwp_remove_table_row(e("#table-excluded-"+n+"s").DataTable(),t.parents("tr"))}})})}jQuery(function(e){"use strict";e("#external-page-last-modified").inputmask("y-m-d[ h:s]",{placeholder:"yyyy-mm-dd hh:mm",showMaskOnHover:false,removeMaskOnSubmit:true});e("#table-excluded-posts").on("click",".bwp-ua-remove",function(t){t.preventDefault();bwp_remove_excluded_item(e,e(this),e("#select_exclude_post_type").val(),"post")});e("#table-excluded-terms").on("click",".bwp-ua-remove",function(t){t.preventDefault();bwp_remove_excluded_item(e,e(this),e("#select_exclude_taxonomy").val(),"term")});e("#table-external-pages").on("click",".bwp-ua-remove",function(t){t.preventDefault();var a=e(this);bwp_bootbox.confirm(bwp_gxs.text.external_pages.remove_warning,function(){jQuery.post(ajaxurl,{action:"bwp-gxs-remove-external-page",_ajax_nonce:bwp_gxs.nonce.remove_external_page,url:a.data("itemId")},function(t){if(t!=1){return}if(e.fn.dataTable.isDataTable("#table-external-pages")){bwp_remove_table_row(e("#table-external-pages").DataTable(),a.parents("tr"))}})})});e("#modal-external-page").on("show.bs.modal",function(t,a){var n=e(t.relatedTarget);var r=e(this).find("form");if(!n.is(".bwp-ua-edit")){return}if(!e.fn.dataTable.isDataTable("#table-external-pages")){return}var l=e("#table-external-pages").DataTable();var s=l.row(n.parents("tr")).data();r.find(':input[type!="hidden"]').val(function(){return s[this.name]})})});
{images → assets/images}/icon_menu.png RENAMED
File without changes
{images → assets/images}/icon_menu_32.png RENAMED
File without changes
assets/js/admin-extensions.js ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* global jQuery,ajaxurl,bwp_gxs */
2
+ function bwp_disable_inputs($) {
3
+ // disable all form inputs
4
+ $('#select_news_taxonomy').prop('disabled', true);
5
+ $('#select_news_cat_action').prop('disabled', true);
6
+ $('#table-selected-term-genres :input').prop('disabled', true);
7
+ $('input[name="submit_bwp_gxs_google_news"]').prop('disabled', true);
8
+ }
9
+
10
+ function bwp_enable_inputs($) {
11
+ // enable all form inputs
12
+ $('#select_news_taxonomy').prop('disabled', false);
13
+ $('#select_news_cat_action').prop('disabled', false);
14
+ $('#table-selected-term-genres :input').prop('disabled', false);
15
+ $('input[name="submit_bwp_gxs_google_news"]').prop('disabled', false);
16
+ }
17
+
18
+ function bwp_select_news_post_type_cb($, $t) {
19
+ var post_type = $t.val();
20
+
21
+ bwp_disable_inputs($);
22
+
23
+ $.get(ajaxurl, {
24
+ action: 'bwp-gxs-get-object-taxonomies',
25
+ post_type: post_type
26
+ }, function(r) {
27
+ if ($.isArray(r)) {
28
+ $('#select_news_taxonomy option:gt(0)').remove();
29
+ $.each(r, function(i, o) {
30
+ $('#select_news_taxonomy').append(
31
+ $('<option></option>')
32
+ .val(o.name)
33
+ .text(o.title)
34
+ );
35
+ });
36
+
37
+ $('#select_news_taxonomy').trigger('change');
38
+ }
39
+
40
+ bwp_enable_inputs($);
41
+ });
42
+ }
43
+
44
+ function bwp_select_news_taxonomy_cb($, $t, hide_loader_cb) {
45
+ if ($.fn.dataTable.isDataTable('#table-selected-term-genres')) {
46
+ $('#table-selected-term-genres').DataTable().clear().destroy();
47
+
48
+ // hide term genres wrapper, since all inputs in the table are gone need to
49
+ // make sure that we do not submit term genres
50
+ $('#wrapper-selected-term-genres')
51
+ .addClass('bwp-no-display')
52
+ .find('input[name="term_genre_can_submit"]')
53
+ .val(0);
54
+ }
55
+
56
+ var taxonomy = $t.val();
57
+
58
+ if (taxonomy) {
59
+ $('#button-toggle-selected-term-genres').click();
60
+ }
61
+ }
62
+
63
+ function bwp_button_view_selected_term_genres_cb($, $t, hide_loader_cb) {
64
+ // init datatable if not already done so
65
+ if (! $.fn.dataTable.isDataTable('#table-selected-term-genres')) {
66
+ $.get(ajaxurl, {
67
+ action: 'bwp-gxs-get-news-term-genres',
68
+ news_taxonomy: $('#select_news_taxonomy').val()
69
+ }, function(r) {
70
+ var tbl = $('#table-selected-term-genres').DataTable({
71
+ deferRender: true,
72
+ autoWidth: false,
73
+ order: [
74
+ [1, 'asc']
75
+ ],
76
+ columns: [{
77
+ data: 'id',
78
+ width: '10%',
79
+ orderable: false,
80
+ render: function(data, type, row) {
81
+ return '<input type="checkbox" '
82
+ + 'id="news_term_' + data + '" '
83
+ + 'name="term_' + data + '" '
84
+ + 'value="1" '
85
+ + (row.selected ? 'checked="checked" ' : '')
86
+ + '/>'
87
+ ;
88
+ }
89
+ }, {
90
+ data: 'name',
91
+ width: '25%',
92
+ render: function(data, type, row) {
93
+ return '<label for="news_term_' + row.id + '">' + data + '</label>';
94
+ }
95
+ }, {
96
+ data: 'genres',
97
+ width: '65%',
98
+ orderable: false,
99
+ render: function(genres, type, row) {
100
+ var html = '';
101
+ $.each(genres, function(i, v) {
102
+ html
103
+ += '<label>'
104
+ + '<input type="checkbox" '
105
+ + 'name="term_' + row.id + '_genres[]" '
106
+ + 'value="' + v.name + '" '
107
+ + (v.selected ? 'checked="checked" ' : '')
108
+ + '/> '
109
+ + v.name
110
+ + '</label>'
111
+ + '&nbsp;&nbsp;&nbsp;'
112
+ ;
113
+ });
114
+
115
+ return $.trim(html);
116
+ }
117
+ }]
118
+ });
119
+
120
+ tbl
121
+ .columns.adjust()
122
+ .clear()
123
+ .rows.add(r)
124
+ .draw();
125
+
126
+ // make sure we can submit term genres now
127
+ $('#wrapper-selected-term-genres')
128
+ .find('input[name="term_genre_can_submit"]')
129
+ .val(1);
130
+
131
+ hide_loader_cb();
132
+ }, 'json');
133
+ } else {
134
+ // hide loader immediately
135
+ hide_loader_cb();
136
+ }
137
+ }
assets/js/bwp-gxs-admin.js ADDED
@@ -0,0 +1,295 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* global jQuery,ajaxurl,bwp_gxs */
2
+ function bwp_reset_exclude_form($, $t, type) {
3
+ // init advanced dropdown
4
+ $('#select-exclude-' + type).select2({
5
+ ajax: {
6
+ url: ajaxurl,
7
+ dataType: 'json',
8
+ data: function(params) {
9
+ return {
10
+ action: 'bwp-gxs-get-' + type,
11
+ group: $t.val(),
12
+ q: params.term
13
+ };
14
+ },
15
+ processResults: function(data) {
16
+ return {
17
+ results: data.items
18
+ };
19
+ },
20
+ },
21
+ minimumInputLength: 2,
22
+ templateResult: function(items) {
23
+ return items.title;
24
+ },
25
+ templateSelection: function(selection) {
26
+ return selection.title;
27
+ }
28
+ });
29
+
30
+ // reset selected items
31
+ $('#select-exclude-' + type).val(null).trigger('change');
32
+
33
+ // reset datatable if needed
34
+ if ($.fn.dataTable.isDataTable('#table-excluded-' + type)) {
35
+ $('#table-excluded-' + type).DataTable().clear().destroy();
36
+ $('#wrapper-excluded-' + type).addClass('bwp-no-display');
37
+ }
38
+ }
39
+
40
+ function bwp_select_exclude_post_cb($, $t) {
41
+ bwp_reset_exclude_form($, $t, 'posts');
42
+ }
43
+
44
+ function bwp_select_exclude_term_cb($, $t) {
45
+ bwp_reset_exclude_form($, $t, 'terms');
46
+ }
47
+
48
+ function bwp_add_rows_to_table(tbl, r) {
49
+ tbl
50
+ .columns.adjust()
51
+ .clear()
52
+ .rows.add(r)
53
+ .draw();
54
+ }
55
+
56
+ function bwp_add_row_to_table(tbl, row) {
57
+ tbl
58
+ .columns.adjust()
59
+ .row.add(row)
60
+ .draw();
61
+ }
62
+
63
+ function bwp_remove_table_row(tbl, row) {
64
+ tbl
65
+ .row(row)
66
+ .remove()
67
+ .draw(false);
68
+ }
69
+
70
+ function bwp_view_excluded_items($, $t, hide_loader_cb, type) {
71
+ var select_id = type == 'posts' ? 'select_exclude_post_type' : 'select_exclude_taxonomy';
72
+
73
+ // init datatable if not already done so
74
+ if (! $.fn.dataTable.isDataTable('#table-excluded-' + type)) {
75
+ $.get(ajaxurl, {
76
+ action: 'bwp-gxs-get-excluded-' + type,
77
+ group: $('#' + select_id).val()
78
+ }, function(r) {
79
+ var tbl = $('#table-excluded-' + type).DataTable({
80
+ deferRender: true,
81
+ autoWidth: false,
82
+ columns: [{
83
+ data: 'id',
84
+ width: '15%'
85
+ }, {
86
+ data: 'title',
87
+ width: '65%'
88
+ }, {
89
+ data: 'id',
90
+ render: function(data) {
91
+ return '<button type="button" '
92
+ + 'data-item-id="' + data + '" '
93
+ + 'title="' + bwp_gxs.text.exclude_items.remove_title + '" '
94
+ + 'class="button-secondary bwp-button bwp-ua-remove">'
95
+ + '<span class="dashicons dashicons-trash"></span>'
96
+ + '</button>'
97
+ ;
98
+ },
99
+ orderable: false,
100
+ width: '20%'
101
+ }]
102
+ });
103
+
104
+ bwp_add_rows_to_table(tbl, r);
105
+ hide_loader_cb();
106
+ }, 'json');
107
+ } else {
108
+ // hide loader immediately
109
+ hide_loader_cb();
110
+ }
111
+ }
112
+
113
+ function bwp_button_view_excluded_posts_cb($, $t, hide_loader_cb) {
114
+ bwp_view_excluded_items($, $t, hide_loader_cb, 'posts');
115
+ }
116
+
117
+ function bwp_button_view_excluded_terms_cb($, $t, hide_loader_cb) {
118
+ bwp_view_excluded_items($, $t, hide_loader_cb, 'terms');
119
+ }
120
+
121
+ function bwp_button_add_new_external_page_cb($, r) {
122
+ // no data, nothing to do
123
+ if (! r.data) {
124
+ return;
125
+ }
126
+
127
+ // no table, nothing to do
128
+ if (! $.fn.dataTable.isDataTable('#table-external-pages')) {
129
+ return;
130
+ }
131
+
132
+ var tbl = $('#table-external-pages').DataTable();
133
+
134
+ // new page, add new row
135
+ if (! r.updated) {
136
+ bwp_add_row_to_table(tbl, r.data);
137
+ } else {
138
+ // update existing row
139
+ tbl
140
+ .row(function(i, data, node) {
141
+ return data.url === r.data.url;
142
+ })
143
+ .data(r.data);
144
+ }
145
+ }
146
+
147
+ function bwp_button_view_external_pages_cb($, $t, hide_loader_cb) {
148
+ // init datatable if not already done so
149
+ if (! $.fn.dataTable.isDataTable('#table-external-pages')) {
150
+ $.get(ajaxurl, {
151
+ action: 'bwp-gxs-get-external-pages'
152
+ }, function(r) {
153
+ var tbl = $('#table-external-pages').DataTable({
154
+ deferRender: true,
155
+ autoWidth: false,
156
+ order: [
157
+ [3, 'desc']
158
+ ],
159
+ columns: [{
160
+ data: 'url',
161
+ width: '55%',
162
+ render: function(data) {
163
+ return '<a target="_blank" href="'
164
+ + data + '">'
165
+ + data + '</a>';
166
+ }
167
+ }, {
168
+ data: 'frequency'
169
+ }, {
170
+ data: 'priority'
171
+ }, {
172
+ data: 'last_modified'
173
+ }, {
174
+ data: 'url',
175
+ render: function(data) {
176
+ // edit
177
+ return '<button type="button" '
178
+ + 'data-item-id="' + data + '" '
179
+ + 'data-toggle="modal"'
180
+ + 'data-target="#modal-external-page"'
181
+ + 'title="' + bwp_gxs.text.external_pages.edit_title + '" '
182
+ + 'class="button-secondary bwp-button bwp-ua-edit">'
183
+ + '<span class="dashicons dashicons-edit"></span>'
184
+ + '</button>'
185
+ + ' '
186
+ // remove
187
+ + '<button type="button" '
188
+ + 'data-item-id="' + data + '" '
189
+ + 'title="' + bwp_gxs.text.external_pages.remove_title + '" '
190
+ + 'class="button-secondary bwp-button bwp-ua-remove">'
191
+ + '<span class="dashicons dashicons-trash"></span>'
192
+ + '</button>'
193
+ ;
194
+ },
195
+ orderable: false,
196
+ width: '10%'
197
+ }]
198
+ });
199
+
200
+ bwp_add_rows_to_table(tbl, r);
201
+ hide_loader_cb();
202
+ }, 'json');
203
+ } else {
204
+ // hide loader immediately
205
+ hide_loader_cb();
206
+ }
207
+ }
208
+
209
+ function bwp_remove_excluded_item($, $t, group, type) {
210
+ bwp_bootbox.confirm(bwp_gxs.text.exclude_items.remove_warning, function() {
211
+ jQuery.post(ajaxurl, {
212
+ action: 'bwp-gxs-remove-excluded-' + type,
213
+ _ajax_nonce: bwp_gxs.nonce.remove_excluded_item,
214
+ group: group,
215
+ id: $t.data('itemId')
216
+ }, function(r) {
217
+ if (r != 1) {
218
+ return;
219
+ }
220
+
221
+ if ($.fn.dataTable.isDataTable('#table-excluded-' + type + 's')) {
222
+ bwp_remove_table_row($('#table-excluded-' + type + 's').DataTable(), $t.parents('tr'));
223
+ }
224
+ });
225
+ });
226
+ }
227
+
228
+ jQuery(function($){
229
+ "use strict";
230
+
231
+ // init datetime input mask
232
+ $('#external-page-last-modified').inputmask('y-m-d[ h:s]', {
233
+ placeholder: 'yyyy-mm-dd hh:mm',
234
+ showMaskOnHover: false,
235
+ removeMaskOnSubmit: true
236
+ });
237
+
238
+ // remove an excluded post
239
+ $('#table-excluded-posts').on('click', '.bwp-ua-remove', function(e) {
240
+ e.preventDefault();
241
+ bwp_remove_excluded_item($, $(this), $('#select_exclude_post_type').val(), 'post');
242
+ });
243
+
244
+ // remove an excluded term
245
+ $('#table-excluded-terms').on('click', '.bwp-ua-remove', function(e) {
246
+ e.preventDefault();
247
+ bwp_remove_excluded_item($, $(this), $('#select_exclude_taxonomy').val(), 'term');
248
+ });
249
+
250
+ // remove an external page
251
+ $('#table-external-pages').on('click', '.bwp-ua-remove', function(e) {
252
+ e.preventDefault();
253
+
254
+ var $t = $(this);
255
+
256
+ bwp_bootbox.confirm(bwp_gxs.text.external_pages.remove_warning, function() {
257
+ jQuery.post(ajaxurl, {
258
+ action: 'bwp-gxs-remove-external-page',
259
+ _ajax_nonce: bwp_gxs.nonce.remove_external_page,
260
+ url: $t.data('itemId')
261
+ }, function(r) {
262
+ if (r != 1) {
263
+ return;
264
+ }
265
+
266
+ if ($.fn.dataTable.isDataTable('#table-external-pages')) {
267
+ bwp_remove_table_row($('#table-external-pages').DataTable(), $t.parents('tr'));
268
+ }
269
+ });
270
+ });
271
+ });
272
+
273
+ // edit an external page
274
+ $('#modal-external-page').on('show.bs.modal', function(e, v) {
275
+ var $btn = $(e.relatedTarget);
276
+ var $form = $(this).find('form');
277
+
278
+ // not an edit action, nothing to do
279
+ if (!$btn.is('.bwp-ua-edit')) {
280
+ return;
281
+ }
282
+
283
+ // no table, nothing to do
284
+ if (! $.fn.dataTable.isDataTable('#table-external-pages')) {
285
+ return;
286
+ }
287
+
288
+ var tbl = $('#table-external-pages').DataTable();
289
+ var data = tbl.row($btn.parents('tr')).data();
290
+
291
+ $form.find(':input[type!="hidden"]').val(function () {
292
+ return data[this.name];
293
+ });
294
+ })
295
+ });
{xsl → assets/xsl}/bwp-sitemap.xsl RENAMED
@@ -53,7 +53,7 @@
53
  <h1>XML Sitemap</h1>
54
  <div id="header">
55
  <p>
56
- This sitemap was created using <a href="http://betterwp.net/wordpress-plugins/google-xml-sitemaps/" title="Better WordPress Google XML Sitemaps">Better WordPress Google XML Sitemaps</a>, a WordPress plugin that has support for Sitemapindex, Google News sitemap, and Multi-site.
57
  </p>
58
  </div>
59
  <div id="content">
@@ -91,7 +91,7 @@
91
  </table>
92
  </div>
93
  <div id="footer">
94
- This plugin is (c) 2014 <a href="http://profiles.wordpress.org/users/OddOneOut/">Khang Minh</a> and is licensed under GPLv3.
95
  </div>
96
  </body>
97
  </html>
53
  <h1>XML Sitemap</h1>
54
  <div id="header">
55
  <p>
56
+ This sitemap was created using <a href="http://betterwp.net/wordpress-plugins/google-xml-sitemaps/" title="Better WordPress Google XML Sitemaps">Better WordPress Google XML Sitemaps</a>, a WordPress plugin that has support for Sitemap Index, Google News sitemap, and Multi-site.
57
  </p>
58
  </div>
59
  <div id="content">
91
  </table>
92
  </div>
93
  <div id="footer">
94
+ This plugin is (c) 2011-2016 <a href="https://github.com/kminh">Khang Minh</a> and is licensed under GPLv3.
95
  </div>
96
  </body>
97
  </html>
{xsl → assets/xsl}/bwp-sitemapindex.xsl RENAMED
@@ -52,7 +52,7 @@
52
  <h1>XML Sitemap Index</h1>
53
  <div id="header">
54
  <p>
55
- This sitemapindex was created using <a href="http://betterwp.net/wordpress-plugins/google-xml-sitemaps/" title="Better WordPress Google XML Sitemaps">Better WordPress Google XML Sitemaps</a>, a WordPress plugin that has support for Sitemapindex, Google News sitemap and Multi-site.
56
  </p>
57
  </div>
58
  <div id="content">
@@ -82,7 +82,7 @@
82
  </table>
83
  </div>
84
  <div id="footer">
85
- This plugin is (c) 2014 <a href="http://profiles.wordpress.org/users/OddOneOut/">Khang Minh</a> and is licensed under GPLv3.
86
  </div>
87
  </body>
88
  </html>
52
  <h1>XML Sitemap Index</h1>
53
  <div id="header">
54
  <p>
55
+ This sitemapindex was created using <a href="http://betterwp.net/wordpress-plugins/google-xml-sitemaps/" title="Better WordPress Google XML Sitemaps">Better WordPress Google XML Sitemaps</a>, a WordPress plugin that has support for Sitemap Index, Google News sitemap and Multi-site.
56
  </p>
57
  </div>
58
  <div id="content">
82
  </table>
83
  </div>
84
  <div id="footer">
85
+ This plugin is (c) 2011-2016 <a href="https://github.com/kminh">Khang Minh</a> and is licensed under GPLv3.
86
  </div>
87
  </body>
88
  </html>
autoload.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ function _bwp_gxs_autoloader($class_name)
4
+ {
5
+ $class_maps = include dirname(__FILE__) . '/vendor/composer/autoload_classmap.php';
6
+
7
+ // only load BWP classes
8
+ if (stripos($class_name, 'BWP') === false) {
9
+ return;
10
+ }
11
+
12
+ if (array_key_exists($class_name, $class_maps)) {
13
+ require $class_maps[$class_name];
14
+ }
15
+ }
16
+
17
+ spl_autoload_register('_bwp_gxs_autoloader');
bwp-google-xml-sitemaps.pot ADDED
@@ -0,0 +1,1480 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # English translations for BWP Google XML Sitemaps package.
2
+ # Copyright (C) 2016 Khang Minh
3
+ # This file is distributed under the same license as the BWP Google XML Sitemaps package.
4
+ # Automatically generated, 2016.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: BWP Google XML Sitemaps 1.4.0\n"
9
+ "Report-Msgid-Bugs-To: contact@betterwp.net\n"
10
+ "POT-Creation-Date: 2016-01-14 21:05+0700\n"
11
+ "PO-Revision-Date: 2016-01-14 21:05+0700\n"
12
+ "Last-Translator: Automatically generated\n"
13
+ "Language-Team: none\n"
14
+ "Language: en_US\n"
15
+ "MIME-Version: 1.0\n"
16
+ "Content-Type: text/plain; charset=UTF-8\n"
17
+ "Content-Transfer-Encoding: 8bit\n"
18
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
19
+
20
+ #: vendor/kminh/bwp-framework/src/class-bwp-version.php:32
21
+ #, php-format
22
+ msgid ""
23
+ "%s requires WordPress <strong>%s</strong> or higher and PHP <strong>%s</"
24
+ "strong> or higher. The plugin will not function until you update your "
25
+ "software. Please deactivate this plugin."
26
+ msgstr ""
27
+ "%s requires WordPress <strong>%s</strong> or higher and PHP <strong>%s</"
28
+ "strong> or higher. The plugin will not function until you update your "
29
+ "software. Please deactivate this plugin."
30
+
31
+ #: src/templates/provider/admin/exclude-posts.html.php:18
32
+ #: src/templates/provider/admin/external-pages.html.php:13
33
+ #: src/templates/provider/admin/exclude-terms.html.php:18
34
+ #: src/class-bwp-gxs.php:1740
35
+ msgid "... loading"
36
+ msgstr "... loading"
37
+
38
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:411
39
+ msgid "... or any amount!"
40
+ msgstr "... or any amount!"
41
+
42
+ #: src/class-bwp-gxs.php:3641
43
+ #, php-format
44
+ msgid "<em>%s.xml</em> does not have any item."
45
+ msgstr "<em>%s.xml</em> does not have any item."
46
+
47
+ #: src/class-bwp-gxs.php:3675
48
+ #, php-format
49
+ msgid ""
50
+ "<em>%s.xml</em> was successfully generated but could not be served properly "
51
+ "because some headers have already been sent (something was printed on line "
52
+ "<strong>%s</strong> in file <strong>%s</strong>)."
53
+ msgstr ""
54
+ "<em>%s.xml</em> was successfully generated but could not be served properly "
55
+ "because some headers have already been sent (something was printed on line "
56
+ "<strong>%s</strong> in file <strong>%s</strong>)."
57
+
58
+ #: src/class-bwp-gxs.php:3349
59
+ #, php-format
60
+ msgid ""
61
+ "<em>%s.xml</em> will be served using module file <em>%s</em> in the custom "
62
+ "module directory."
63
+ msgstr ""
64
+ "<em>%s.xml</em> will be served using module file <em>%s</em> in the custom "
65
+ "module directory."
66
+
67
+ #: src/class-bwp-gxs.php:3366
68
+ #, php-format
69
+ msgid "<em>%s.xml</em> will be served using module file <em>%s</em>."
70
+ msgstr "<em>%s.xml</em> will be served using module file <em>%s</em>."
71
+
72
+ #: src/class-bwp-gxs.php:2412
73
+ #, php-format
74
+ msgid "<strong>%d</strong> cached sitemaps have been flushed successfully!"
75
+ msgstr "<strong>%d</strong> cached sitemaps have been flushed successfully!"
76
+
77
+ #: src/class-bwp-gxs.php:3373
78
+ #, php-format
79
+ msgid ""
80
+ "<strong>%s</strong> can not be served because of a missing module file: "
81
+ "<strong>%s</strong>."
82
+ msgstr ""
83
+ "<strong>%s</strong> can not be served because of a missing module file: "
84
+ "<strong>%s</strong>."
85
+
86
+ #: src/class-bwp-gxs.php:2528
87
+ msgid "<strong>BWP Google XML Sitemaps Error:</strong> "
88
+ msgstr "<strong>BWP Google XML Sitemaps Error:</strong> "
89
+
90
+ #: src/class-bwp-gxs.php:3974
91
+ #, php-format
92
+ msgid "<strong>Error %s</strong> from <em>%s</em>."
93
+ msgstr "<strong>Error %s</strong> from <em>%s</em>."
94
+
95
+ #: src/class-bwp-gxs.php:1679
96
+ msgid ""
97
+ "A Google News Sitemap is a file that allows you to control which content you "
98
+ "submit to Google News. By creating and submitting a Google News Sitemap, "
99
+ "you're able to help Google News discover and crawl your site's news articles "
100
+ "&mdash; http://support.google.com/"
101
+ msgstr ""
102
+ "A Google News Sitemap is a file that allows you to control which content you "
103
+ "submit to Google News. By creating and submitting a Google News Sitemap, "
104
+ "you're able to help Google News discover and crawl your site's news articles "
105
+ "&mdash; http://support.google.com/"
106
+
107
+ #: src/templates/provider/admin/external-page-form.html.php:17
108
+ msgid "Absolute URL to page"
109
+ msgstr "Absolute URL to page"
110
+
111
+ #: src/templates/provider/admin/external-pages.html.php:26
112
+ msgid "Actions"
113
+ msgstr "Actions"
114
+
115
+ #: src/class-bwp-gxs.php:1720
116
+ #, php-format
117
+ msgid ""
118
+ "Add <code>post_google_news.xml</code> to the main <a href=\"%s\" target="
119
+ "\"_blank\">sitemapindex.xml</a>."
120
+ msgstr ""
121
+ "Add <code>post_google_news.xml</code> to the main <a href=\"%s\" target="
122
+ "\"_blank\">sitemapindex.xml</a>."
123
+
124
+ #: src/class-bwp-gxs.php:1982
125
+ msgid "Add a sitemap index entry to blog's robots.txt"
126
+ msgstr "Add a sitemap index entry to blog's robots.txt"
127
+
128
+ #: src/class-bwp-gxs.php:1719
129
+ msgid ""
130
+ "Add an <code>&lt;image:image&gt;</code> entry to each sitemap item when "
131
+ "possible."
132
+ msgstr ""
133
+ "Add an <code>&lt;image:image&gt;</code> entry to each sitemap item when "
134
+ "possible."
135
+
136
+ #: src/class-bwp-gxs.php:1676
137
+ msgid "Add featured images to existing post-based sitemaps."
138
+ msgstr "Add featured images to existing post-based sitemaps."
139
+
140
+ #: src/templates/provider/admin/external-pages.html.php:7
141
+ msgid "Add new page"
142
+ msgstr "Add new page"
143
+
144
+ #: src/class-bwp-gxs.php:1394
145
+ #, php-format
146
+ msgid ""
147
+ "Add non-WordPress pages to the %s sitemap. You can also use %s to add "
148
+ "external pages programmatically."
149
+ msgstr ""
150
+ "Add non-WordPress pages to the %s sitemap. You can also use %s to add "
151
+ "external pages programmatically."
152
+
153
+ #: src/class-bwp-gxs.php:1983
154
+ msgid "Add sitemap index entries from all blogs to primary blog's robots.txt"
155
+ msgstr "Add sitemap index entries from all blogs to primary blog's robots.txt"
156
+
157
+ #: src/templates/provider/admin/external-page-modal.html.php:10
158
+ msgid "Add/Update an external page"
159
+ msgstr "Add/Update an external page"
160
+
161
+ #: src/class-bwp-gxs.php:347 src/class-bwp-gxs.php:998
162
+ msgid "Advanced Options"
163
+ msgstr "Advanced Options"
164
+
165
+ #: src/class-bwp-gxs.php:2459
166
+ msgid "All logs have been cleared successfully!"
167
+ msgstr "All logs have been cleared successfully!"
168
+
169
+ #: src/class-bwp-gxs.php:2442
170
+ #: vendor/kminh/bwp-framework/src/class-bwp-option-page-v3.php:439
171
+ msgid "All options have been saved."
172
+ msgstr "All options have been saved."
173
+
174
+ #: src/class-bwp-gxs.php:1458
175
+ msgid "Also exclude posts that belong to excluded terms."
176
+ msgstr "Also exclude posts that belong to excluded terms."
177
+
178
+ #: src/class-bwp-gxs.php:1787
179
+ #, php-format
180
+ msgid ""
181
+ "Also, if you notice that some non-news contents are indexed too, read <a "
182
+ "href=\"%sfaq#google-news\" target=\"_blank\">this</a>."
183
+ msgstr ""
184
+ "Also, if you notice that some non-news contents are indexed too, read <a "
185
+ "href=\"%sfaq#google-news\" target=\"_blank\">this</a>."
186
+
187
+ #: src/class-bwp-gxs.php:1799
188
+ msgid "Articles that are older than specified day(s) will NOT be considered."
189
+ msgstr "Articles that are older than specified day(s) will NOT be considered."
190
+
191
+ #: src/class-bwp-gxs.php:3108
192
+ msgid "Author archive"
193
+ msgstr "Author archive"
194
+
195
+ #: src/class-bwp-gxs.php:1456
196
+ msgid "Author archives"
197
+ msgstr "Author archives"
198
+
199
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:521
200
+ msgid "BWP Gems"
201
+ msgstr "BWP Gems"
202
+
203
+ #: src/class-bwp-gxs.php:948
204
+ msgid "BWP Google News XML Sitemap"
205
+ msgstr "BWP Google News XML Sitemap"
206
+
207
+ #: src/class-bwp-gxs.php:941
208
+ msgid "BWP Google XML Sitemaps"
209
+ msgstr "BWP Google XML Sitemaps"
210
+
211
+ #: src/class-bwp-gxs.php:955
212
+ msgid "BWP Google XML Sitemaps - Advanced Options"
213
+ msgstr "BWP Google XML Sitemaps - Advanced Options"
214
+
215
+ #: src/class-bwp-gxs.php:2529
216
+ msgid "BWP Google XML Sitemaps Error"
217
+ msgstr "BWP Google XML Sitemaps Error"
218
+
219
+ #: src/class-bwp-gxs.php:962
220
+ msgid "BWP Google XML Sitemaps Log"
221
+ msgstr "BWP Google XML Sitemaps Log"
222
+
223
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:531
224
+ msgid "BWP News"
225
+ msgstr "BWP News"
226
+
227
+ #: src/class-bwp-gxs.php:2126
228
+ msgid ""
229
+ "Below are messages logged when your sitemaps were generated, including <span "
230
+ "style=\"color: #999999;\">notices</span>, <span style=\"color: #FF0000;"
231
+ "\">errors</span> and <span style=\"color: #009900;\">success messages</span>."
232
+ msgstr ""
233
+ "Below are messages logged when your sitemaps were generated, including <span "
234
+ "style=\"color: #999999;\">notices</span>, <span style=\"color: #FF0000;"
235
+ "\">errors</span> and <span style=\"color: #009900;\">success messages</span>."
236
+
237
+ #: src/class-bwp-gxs.php:989
238
+ msgid "Better WordPress Google News XML Sitemap"
239
+ msgstr "Better WordPress Google News XML Sitemap"
240
+
241
+ #: src/class-bwp-gxs.php:972 src/class-bwp-gxs.php:981
242
+ msgid "Better WordPress Google XML Sitemaps"
243
+ msgstr "Better WordPress Google XML Sitemaps"
244
+
245
+ #: src/class-bwp-gxs.php:997
246
+ msgid "Better WordPress Google XML Sitemaps Advanced Options"
247
+ msgstr "Better WordPress Google XML Sitemaps Advanced Options"
248
+
249
+ #: src/class-bwp-gxs.php:1005
250
+ msgid "Better WordPress Google XML Sitemaps Log"
251
+ msgstr "Better WordPress Google XML Sitemaps Log"
252
+
253
+ #: src/class-bwp-gxs.php:1465
254
+ msgid "Bing"
255
+ msgstr "Bing"
256
+
257
+ #: src/class-bwp-gxs.php:1919
258
+ msgid "Cache directory"
259
+ msgstr "Cache directory"
260
+
261
+ #: src/class-bwp-gxs.php:2186
262
+ #, php-format
263
+ msgid ""
264
+ "Cache directory (<code>%s</code>) does not exist or is not writable. Please "
265
+ "try CHMODing it to either 755 or 777, or disable caching to hide this "
266
+ "warning (not recommended)."
267
+ msgstr ""
268
+ "Cache directory (<code>%s</code>) does not exist or is not writable. Please "
269
+ "try CHMODing it to either 755 or 777, or disable caching to hide this "
270
+ "warning (not recommended)."
271
+
272
+ #: src/class-bwp-gxs.php:3305
273
+ #, php-format
274
+ msgid ""
275
+ "Cache directory <strong>%s</strong> is not writable, no cache file was "
276
+ "created."
277
+ msgstr ""
278
+ "Cache directory <strong>%s</strong> is not writable, no cache file was "
279
+ "created."
280
+
281
+ #: src/class-bwp-gxs.php:1918
282
+ msgid "Cache expiry time"
283
+ msgstr "Cache expiry time"
284
+
285
+ #: src/class-bwp-gxs.php:1953
286
+ msgid ""
287
+ "Cache your sitemaps for better performance. If you are still configuring the "
288
+ "plugin it's best to disable caching or you might have to manually flush the "
289
+ "cache for any changes to show up."
290
+ msgstr ""
291
+ "Cache your sitemaps for better performance. If you are still configuring the "
292
+ "plugin it's best to disable caching or you might have to manually flush the "
293
+ "cache for any changes to show up."
294
+
295
+ #: src/templates/provider/admin/external-page-form.html.php:29
296
+ msgid "Calculate using \"Last modified\""
297
+ msgstr "Calculate using \"Last modified\""
298
+
299
+ #: src/templates/provider/admin/external-pages.html.php:23
300
+ #: src/templates/provider/admin/external-page-form.html.php:27
301
+ msgid "Change frequency"
302
+ msgstr "Change frequency"
303
+
304
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:439
305
+ msgid "Check out this cool plugin"
306
+ msgstr "Check out this cool plugin"
307
+
308
+ #: src/class-bwp-gxs.php:1381
309
+ msgid "Choose appropriate sitemaps to generate."
310
+ msgstr "Choose appropriate sitemaps to generate."
311
+
312
+ #: src/class-bwp-gxs.php:2359
313
+ msgid "Clear Message Log"
314
+ msgstr "Clear Message Log"
315
+
316
+ #: src/templates/provider/admin/external-page-form.html.php:51
317
+ msgid "Click to open a calendar"
318
+ msgstr "Click to open a calendar"
319
+
320
+ #: src/templates/logger/admin/sitemap-log.html.php:39
321
+ msgid "Click to regenerate"
322
+ msgstr "Click to regenerate"
323
+
324
+ #: src/templates/logger/admin/sitemap-log.html.php:34
325
+ msgid "Click to view"
326
+ msgstr "Click to view"
327
+
328
+ #: src/templates/provider/admin/external-page-modal.html.php:24
329
+ msgid "Close"
330
+ msgstr "Close"
331
+
332
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:387
333
+ msgid "Coffees"
334
+ msgstr "Coffees"
335
+
336
+ #: src/class-bwp-gxs.php:1911
337
+ msgid "Compress sitemaps"
338
+ msgstr "Compress sitemaps"
339
+
340
+ #: src/handler/ajax/external-page.php:136
341
+ msgid "Could not add/update page, please try again."
342
+ msgstr "Could not add/update page, please try again."
343
+
344
+ #: src/class-bwp-gxs.php:2425
345
+ #, php-format
346
+ msgid ""
347
+ "Could not flush the cache, cache directory is either not found or is not "
348
+ "writable. See <a href=\"%s\" target=\"_blank\">this FAQ entry</a> for a "
349
+ "possible solution."
350
+ msgstr ""
351
+ "Could not flush the cache, cache directory is either not found or is not "
352
+ "writable. See <a href=\"%s\" target=\"_blank\">this FAQ entry</a> for a "
353
+ "possible solution."
354
+
355
+ #: src/class-bwp-gxs.php:3318
356
+ #, php-format
357
+ msgid "Could not write sitemap file to cache directory <strong>%s</strong>"
358
+ msgstr "Could not write sitemap file to cache directory <strong>%s</strong>"
359
+
360
+ #: src/class-bwp-gxs.php:1346
361
+ msgid "Custom XSLT stylesheet URL"
362
+ msgstr "Custom XSLT stylesheet URL"
363
+
364
+ #: src/class-bwp-gxs.php:1922
365
+ msgid "Custom module directory"
366
+ msgstr "Custom module directory"
367
+
368
+ #: src/class-bwp-gxs.php:1416
369
+ msgid ""
370
+ "Customize the look and feel of your sitemaps. Note that no stylesheet will "
371
+ "be used for the Google News sitemap."
372
+ msgstr ""
373
+ "Customize the look and feel of your sitemaps. Note that no stylesheet will "
374
+ "be used for the Google News sitemap."
375
+
376
+ #: src/class-bwp-gxs.php:1921
377
+ msgid "Database query limit"
378
+ msgstr "Database query limit"
379
+
380
+ #: src/class-bwp-gxs.php:3104
381
+ msgid "Date archive"
382
+ msgstr "Date archive"
383
+
384
+ #: src/class-bwp-gxs.php:1455
385
+ msgid "Date archives"
386
+ msgstr "Date archives"
387
+
388
+ #: src/class-bwp-gxs.php:1923
389
+ msgid "Debugging"
390
+ msgstr "Debugging"
391
+
392
+ #: src/class-bwp-gxs.php:1460
393
+ msgid ""
394
+ "Default XSLT stylesheets will be used. Set your custom stylesheets below or "
395
+ "filter the <code>bwp_gxs_xslt</code> hook."
396
+ msgstr ""
397
+ "Default XSLT stylesheets will be used. Set your custom stylesheets below or "
398
+ "filter the <code>bwp_gxs_xslt</code> hook."
399
+
400
+ #: src/class-bwp-gxs.php:1336
401
+ msgid "Default change frequency"
402
+ msgstr "Default change frequency"
403
+
404
+ #: src/class-bwp-gxs.php:1337
405
+ msgid "Default priority"
406
+ msgstr "Default priority"
407
+
408
+ #: src/class-bwp-gxs.php:1335
409
+ msgid "Default values"
410
+ msgstr "Default values"
411
+
412
+ #: src/class-bwp-gxs.php:1412
413
+ msgid "Default values are only used when valid ones can not be calculated."
414
+ msgstr "Default values are only used when valid ones can not be calculated."
415
+
416
+ #: src/class-bwp-gxs.php:1978
417
+ msgid ""
418
+ "Disable this to use the local timezone setting in <em>Settings >> General</"
419
+ "em>."
420
+ msgstr ""
421
+ "Disable this to use the local timezone setting in <em>Settings >> General</"
422
+ "em>."
423
+
424
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:1530
425
+ msgid "Dismiss this notice."
426
+ msgstr "Dismiss this notice."
427
+
428
+ #: src/class-bwp-gxs.php:1818
429
+ msgid ""
430
+ "Due to performance reason, it is advised to NOT use a tag-like taxonomy "
431
+ "(such as <em>Post Tag</em>) as the news taxonomy."
432
+ msgstr ""
433
+ "Due to performance reason, it is advised to NOT use a tag-like taxonomy "
434
+ "(such as <em>Post Tag</em>) as the news taxonomy."
435
+
436
+ #: src/templates/provider/admin/external-page-form.html.php:19
437
+ msgid ""
438
+ "Each page must have a unique URL, so if you provide an existing URL, the "
439
+ "page with that URL will be updated with new data provided here."
440
+ msgstr ""
441
+ "Each page must have a unique URL, so if you provide an existing URL, the "
442
+ "page with that URL will be updated with new data provided here."
443
+
444
+ #: src/class-bwp-gxs.php:561
445
+ msgid "Edit this page"
446
+ msgstr "Edit this page"
447
+
448
+ #: src/class-bwp-gxs.php:1917
449
+ msgid "Enable auto cache re-generation"
450
+ msgstr "Enable auto cache re-generation"
451
+
452
+ #: src/class-bwp-gxs.php:1924
453
+ msgid "Enable build stats"
454
+ msgstr "Enable build stats"
455
+
456
+ #: src/class-bwp-gxs.php:1916
457
+ msgid "Enable caching"
458
+ msgstr "Enable caching"
459
+
460
+ #: src/class-bwp-gxs.php:1347
461
+ msgid "Enable credit"
462
+ msgstr "Enable credit"
463
+
464
+ #: src/class-bwp-gxs.php:1926
465
+ msgid "Enable debugging mode"
466
+ msgstr "Enable debugging mode"
467
+
468
+ #: src/class-bwp-gxs.php:1640 src/class-bwp-gxs.php:1643
469
+ msgid "Enable extension"
470
+ msgstr "Enable extension"
471
+
472
+ #: src/class-bwp-gxs.php:1927
473
+ msgid "Enable extra debugging mode"
474
+ msgstr "Enable extra debugging mode"
475
+
476
+ #: src/class-bwp-gxs.php:1324 src/class-bwp-gxs.php:1342
477
+ msgid "Enable following post types"
478
+ msgstr "Enable following post types"
479
+
480
+ #: src/class-bwp-gxs.php:1323
481
+ msgid "Enable following sitemaps"
482
+ msgstr "Enable following sitemaps"
483
+
484
+ #: src/class-bwp-gxs.php:1325
485
+ msgid "Enable following taxonomies"
486
+ msgstr "Enable following taxonomies"
487
+
488
+ #: src/class-bwp-gxs.php:1641
489
+ msgid "Enable for following post types"
490
+ msgstr "Enable for following post types"
491
+
492
+ #: src/class-bwp-gxs.php:1653
493
+ msgid "Enable keywords support"
494
+ msgstr "Enable keywords support"
495
+
496
+ #: src/class-bwp-gxs.php:1925
497
+ msgid "Enable message log"
498
+ msgstr "Enable message log"
499
+
500
+ #: src/class-bwp-gxs.php:1652
501
+ msgid "Enable multi-term support"
502
+ msgstr "Enable multi-term support"
503
+
504
+ #: src/class-bwp-gxs.php:1914
505
+ msgid "Enable multisite robots.txt support"
506
+ msgstr "Enable multisite robots.txt support"
507
+
508
+ #: src/class-bwp-gxs.php:1340 src/class-bwp-gxs.php:1644
509
+ msgid "Enable pinging"
510
+ msgstr "Enable pinging"
511
+
512
+ #: src/class-bwp-gxs.php:1913
513
+ msgid "Enable robots.txt support"
514
+ msgstr "Enable robots.txt support"
515
+
516
+ #: src/class-bwp-gxs.php:1723
517
+ msgid "Enable this if you have posts assigned to more than one terms."
518
+ msgstr "Enable this if you have posts assigned to more than one terms."
519
+
520
+ #: src/class-bwp-gxs.php:3647
521
+ msgid "Enable/disable sitemaps via <em>BWP Sitemaps >> XML Sitemaps</em>."
522
+ msgstr "Enable/disable sitemaps via <em>BWP Sitemaps >> XML Sitemaps</em>."
523
+
524
+ #: src/class-bwp-gxs.php:1700
525
+ msgid "Exclude"
526
+ msgstr "Exclude"
527
+
528
+ #: src/class-bwp-gxs.php:1385
529
+ #, php-format
530
+ msgid ""
531
+ "Exclude individual items for each sitemap. You can also use <a href="
532
+ "\"%s#exclude-items\" target=\"_blank\">filters</a> to exclude items "
533
+ "programmatically."
534
+ msgstr ""
535
+ "Exclude individual items for each sitemap. You can also use <a href="
536
+ "\"%s#exclude-items\" target=\"_blank\">filters</a> to exclude items "
537
+ "programmatically."
538
+
539
+ #: src/class-bwp-gxs.php:1326
540
+ msgid "Exclude items"
541
+ msgstr "Exclude items"
542
+
543
+ #: src/class-bwp-gxs.php:1327
544
+ msgid "Exclude posts"
545
+ msgstr "Exclude posts"
546
+
547
+ #: src/class-bwp-gxs.php:1329
548
+ msgid "Exclude posts by terms"
549
+ msgstr "Exclude posts by terms"
550
+
551
+ #: src/templates/provider/admin/exclude-posts.html.php:12
552
+ #: src/templates/provider/admin/exclude-terms.html.php:12
553
+ msgid "Exclude selected items"
554
+ msgstr "Exclude selected items"
555
+
556
+ #: src/class-bwp-gxs.php:1328
557
+ msgid "Exclude terms"
558
+ msgstr "Exclude terms"
559
+
560
+ #: src/class-bwp-gxs.php:1543
561
+ msgid ""
562
+ "Expect an absolute URL, e.g. <code>http://example.com/my-stylesheet.xsl</"
563
+ "code>. You must also have a stylesheet for the sitemap index that can be "
564
+ "accessed through the above URL, e.g. <code>my-stylesheet.xsl</code> and "
565
+ "<code>my-stylesheetindex.xsl</code>. Leave blank to use provided stylesheets."
566
+ msgstr ""
567
+ "Expect an absolute URL, e.g. <code>http://example.com/my-stylesheet.xsl</"
568
+ "code>. You must also have a stylesheet for the sitemap index that can be "
569
+ "accessed through the above URL, e.g. <code>my-stylesheet.xsl</code> and "
570
+ "<code>my-stylesheetindex.xsl</code>. Leave blank to use provided stylesheets."
571
+
572
+ #: src/class-bwp-gxs.php:2045
573
+ msgid ""
574
+ "Expect an absolute path to a writable directory (i.e. CHMOD to 755 or 777). "
575
+ msgstr ""
576
+ "Expect an absolute path to a writable directory (i.e. CHMOD to 755 or 777). "
577
+
578
+ #: src/class-bwp-gxs.php:2056
579
+ msgid ""
580
+ "Expect an absolute path to the directory where you put your custom modules "
581
+ "(e.g. <code>/home/mysite/public_html/gxs-modules/</code>). "
582
+ msgstr ""
583
+ "Expect an absolute path to the directory where you put your custom modules "
584
+ "(e.g. <code>/home/mysite/public_html/gxs-modules/</code>). "
585
+
586
+ #: src/class-bwp-gxs.php:1971
587
+ #, php-format
588
+ msgid ""
589
+ "Extend this plugin using customizable modules. More info <a href=\"%s#module-"
590
+ "api\">here</a>."
591
+ msgstr ""
592
+ "Extend this plugin using customizable modules. More info <a href=\"%s#module-"
593
+ "api\">here</a>."
594
+
595
+ #: src/class-bwp-gxs.php:338 src/class-bwp-gxs.php:990
596
+ msgid "Extensions"
597
+ msgstr "Extensions"
598
+
599
+ #: src/class-bwp-gxs.php:1457
600
+ msgid "External (non-WordPress) pages."
601
+ msgstr "External (non-WordPress) pages."
602
+
603
+ #: src/class-bwp-gxs.php:3094
604
+ msgid "External page"
605
+ msgstr "External page"
606
+
607
+ #: src/handler/ajax/external-page.php:131
608
+ msgid "External page has been successfully added/updated."
609
+ msgstr "External page has been successfully added/updated."
610
+
611
+ #: src/class-bwp-gxs.php:1330 src/class-bwp-gxs.php:1397
612
+ msgid "External pages"
613
+ msgstr "External pages"
614
+
615
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:371
616
+ msgid "FAQ"
617
+ msgstr "FAQ"
618
+
619
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:409
620
+ msgid "Five cups! $25.00"
621
+ msgstr "Five cups! $25.00"
622
+
623
+ #: src/class-bwp-gxs.php:2348
624
+ msgid "Flush Cache"
625
+ msgstr "Flush Cache"
626
+
627
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:548
628
+ msgid "Follow"
629
+ msgstr "Follow"
630
+
631
+ #: src/class-bwp-gxs.php:1519
632
+ msgid ""
633
+ "For a multi-site installation of WordPress, this sitemap will list all "
634
+ "appropriate blogs' addresses within your network, not just the main blog's."
635
+ msgstr ""
636
+ "For a multi-site installation of WordPress, this sitemap will list all "
637
+ "appropriate blogs' addresses within your network, not just the main blog's."
638
+
639
+ #: src/class-bwp-gxs.php:1238
640
+ #, php-format
641
+ msgid ""
642
+ "For more details, see <a target=\"_blank\" href=\"%1$s\">this article</a>."
643
+ msgstr ""
644
+ "For more details, see <a target=\"_blank\" href=\"%1$s\">this article</a>."
645
+
646
+ #: src/class-bwp-gxs.php:1909
647
+ msgid "Formatting"
648
+ msgstr "Formatting"
649
+
650
+ #: src/class-bwp-gxs.php:1321
651
+ msgid "Generated Sitemaps"
652
+ msgstr "Generated Sitemaps"
653
+
654
+ #: src/templates/provider/admin/news-contents.html.php:11
655
+ msgid "Genres"
656
+ msgstr "Genres"
657
+
658
+ #: src/class-bwp-gxs.php:1332
659
+ msgid "Global limit"
660
+ msgstr "Global limit"
661
+
662
+ #: src/class-bwp-gxs.php:1464
663
+ msgid "Google"
664
+ msgstr "Google"
665
+
666
+ #: src/class-bwp-gxs.php:1639
667
+ msgid "Google Image Sitemap"
668
+ msgstr "Google Image Sitemap"
669
+
670
+ #: src/class-bwp-gxs.php:1642
671
+ msgid "Google News Sitemap"
672
+ msgstr "Google News Sitemap"
673
+
674
+ #: src/class-bwp-gxs.php:3082
675
+ msgid "Google News posts"
676
+ msgstr "Google News posts"
677
+
678
+ #: src/class-bwp-gxs.php:2332
679
+ #, php-format
680
+ msgid ""
681
+ "Google News sitemap could not be generated, please check <a href=\"%s"
682
+ "\">Sitemap Log</a> for possible errors."
683
+ msgstr ""
684
+ "Google News sitemap could not be generated, please check <a href=\"%s"
685
+ "\">Sitemap Log</a> for possible errors."
686
+
687
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:374
688
+ msgid "Got a problem with this plugin? Please say it out loud!"
689
+ msgstr "Got a problem with this plugin? Please say it out loud!"
690
+
691
+ #: src/templates/provider/admin/exclude-posts.html.php:27
692
+ #: src/templates/provider/admin/exclude-terms.html.php:27
693
+ msgid "ID"
694
+ msgstr "ID"
695
+
696
+ #: src/class-bwp-gxs.php:1812
697
+ msgid ""
698
+ "If you enable the \"Google Image Extension\" for selected post type, "
699
+ "featured image will also be added automatically to the news sitemap."
700
+ msgstr ""
701
+ "If you enable the \"Google Image Extension\" for selected post type, "
702
+ "featured image will also be added automatically to the news sitemap."
703
+
704
+ #: src/class-bwp-gxs.php:2038
705
+ #, php-format
706
+ msgid ""
707
+ "If you have for example 50 blogs, 50 sitemap index entries will be added to "
708
+ "your primary blog's <a href=\"%s\" target=\"_blank\">robots.txt</a>."
709
+ msgstr ""
710
+ "If you have for example 50 blogs, 50 sitemap index entries will be added to "
711
+ "your primary blog's <a href=\"%s\" target=\"_blank\">robots.txt</a>."
712
+
713
+ #: src/class-bwp-gxs.php:2027
714
+ #, php-format
715
+ msgid ""
716
+ "If you're on a Multi-site installation with <strong>Sub-domain</strong> "
717
+ "enabled, each blog will have its own robots.txt. Blogs in <strong>sub-"
718
+ "directory</strong> will not, however. Please read the <a href=\"%s#robots.txt"
719
+ "\" target=\"_blank\">documentation</a> for more info."
720
+ msgstr ""
721
+ "If you're on a Multi-site installation with <strong>Sub-domain</strong> "
722
+ "enabled, each blog will have its own robots.txt. Blogs in <strong>sub-"
723
+ "directory</strong> will not, however. Please read the <a href=\"%s#robots.txt"
724
+ "\" target=\"_blank\">documentation</a> for more info."
725
+
726
+ #: src/templates/provider/admin/external-page-form.html.php:55
727
+ #: src/class-bwp-gxs.php:1770
728
+ msgid "Important"
729
+ msgstr "Important"
730
+
731
+ #: src/class-bwp-gxs.php:1699
732
+ msgid "Include"
733
+ msgstr "Include"
734
+
735
+ #: src/handler/ajax/external-page.php:91
736
+ msgid "Invalid frequency or priority."
737
+ msgstr "Invalid frequency or priority."
738
+
739
+ #: src/class-bwp-gxs.php:1187
740
+ msgid "It appears that no sitemap has been generated yet"
741
+ msgstr "It appears that no sitemap has been generated yet"
742
+
743
+ #: src/class-bwp-gxs.php:1331
744
+ msgid "Item limits"
745
+ msgstr "Item limits"
746
+
747
+ #: src/class-bwp-gxs.php:1654
748
+ msgid "Keyword source"
749
+ msgstr "Keyword source"
750
+
751
+ #: src/templates/logger/admin/sitemap-log.html.php:11
752
+ msgid "Last generated on"
753
+ msgstr "Last generated on"
754
+
755
+ #: src/templates/provider/admin/external-pages.html.php:25
756
+ msgid "Last modified"
757
+ msgstr "Last modified"
758
+
759
+ #: src/templates/provider/admin/external-page-form.html.php:46
760
+ msgid "Last modified (time is optional)"
761
+ msgstr "Last modified (time is optional)"
762
+
763
+ #: src/class-bwp-gxs.php:1766
764
+ #, php-format
765
+ msgid "Learn more about <a href=\"%s\" target=\"_blank\">Image sitemaps</a>."
766
+ msgstr "Learn more about <a href=\"%s\" target=\"_blank\">Image sitemaps</a>."
767
+
768
+ #: src/class-bwp-gxs.php:2049
769
+ #, php-format
770
+ msgid "Leave empty to use <code>%s</code>."
771
+ msgstr "Leave empty to use <code>%s</code>."
772
+
773
+ #: src/class-bwp-gxs.php:1405
774
+ msgid "Limit the number of items to output in one sitemap. "
775
+ msgstr "Limit the number of items to output in one sitemap. "
776
+
777
+ #: src/class-bwp-gxs.php:1985
778
+ #, php-format
779
+ msgid ""
780
+ "Log useful messages when sitemaps are generated. The log can be viewed <a "
781
+ "href=\"%s\">here</a>."
782
+ msgstr ""
783
+ "Log useful messages when sitemaps are generated. The log can be viewed <a "
784
+ "href=\"%s\">here</a>."
785
+
786
+ #: src/class-bwp-gxs.php:2132
787
+ msgid ""
788
+ "Logging is not currently enabled. You can enable this feature by checking "
789
+ "\"Enable logging\" in <strong>XML Sitemaps >> Sitemap log & debug</strong>."
790
+ msgstr ""
791
+ "Logging is not currently enabled. You can enable this feature by checking "
792
+ "\"Enable logging\" in <strong>XML Sitemaps >> Sitemap log & debug</strong>."
793
+
794
+ #: src/class-bwp-gxs.php:1344
795
+ msgid "Look and Feel"
796
+ msgstr "Look and Feel"
797
+
798
+ #: src/templates/logger/admin/sitemap-log.html.php:23
799
+ #: src/templates/logger/admin/message-log.html.php:11
800
+ msgid "M d, Y h:i:s A"
801
+ msgstr "M d, Y h:i:s A"
802
+
803
+ #: src/class-bwp-gxs.php:1345
804
+ msgid "Make sitemaps look pretty"
805
+ msgstr "Make sitemaps look pretty"
806
+
807
+ #: src/class-bwp-gxs.php:1475
808
+ msgid "Maximum is <strong>50,000</strong>. Set to 0 to use the Global limit."
809
+ msgstr "Maximum is <strong>50,000</strong>. Set to 0 to use the Global limit."
810
+
811
+ #: src/class-bwp-gxs.php:1470
812
+ msgid ""
813
+ "Maximum is <strong>50,000</strong>. This setting is applied to all sitemaps."
814
+ msgstr ""
815
+ "Maximum is <strong>50,000</strong>. This setting is applied to all sitemaps."
816
+
817
+ #: src/class-bwp-gxs.php:2002
818
+ msgid ""
819
+ "Maximum number of items to fetch in each query to database. This helps when "
820
+ "a sitemap has thousands of items and host is low on memory."
821
+ msgstr ""
822
+ "Maximum number of items to fetch in each query to database. This helps when "
823
+ "a sitemap has thousands of items and host is low on memory."
824
+
825
+ #: src/class-bwp-gxs.php:2118
826
+ msgid "Message Log"
827
+ msgstr "Message Log"
828
+
829
+ #: src/class-bwp-gxs.php:1338
830
+ msgid "Minimum priority"
831
+ msgstr "Minimum priority"
832
+
833
+ #: src/templates/provider/admin/news-contents.html.php:9
834
+ #: src/templates/provider/admin/exclude-terms.html.php:28
835
+ #: src/templates/logger/admin/sitemap-log.html.php:10
836
+ msgid "Name"
837
+ msgstr "Name"
838
+
839
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:503
840
+ msgid "Need a highly customizable theme?"
841
+ msgstr "Need a highly customizable theme?"
842
+
843
+ #: src/class-bwp-gxs.php:1648
844
+ msgid "News age"
845
+ msgstr "News age"
846
+
847
+ #: src/class-bwp-gxs.php:1647
848
+ msgid "News language"
849
+ msgstr "News language"
850
+
851
+ #: src/class-bwp-gxs.php:1646
852
+ msgid "News name"
853
+ msgstr "News name"
854
+
855
+ #: src/class-bwp-gxs.php:1649
856
+ msgid "News post type"
857
+ msgstr "News post type"
858
+
859
+ #: src/class-bwp-gxs.php:1650
860
+ msgid "News taxonomy"
861
+ msgstr "News taxonomy"
862
+
863
+ #: src/class-bwp-gxs.php:1651
864
+ msgid "News terms and genres"
865
+ msgstr "News terms and genres"
866
+
867
+ #: src/templates/logger/admin/message-log.html.php:23
868
+ msgid "No log yet!"
869
+ msgstr "No log yet!"
870
+
871
+ #: src/class-bwp-gxs.php:1745
872
+ msgid "Note:"
873
+ msgstr "Note:"
874
+
875
+ #: src/class-bwp-gxs.php:2458
876
+ msgid "Notice"
877
+ msgstr "Notice"
878
+
879
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:410
880
+ msgid "One LL-cup!!! $50.00"
881
+ msgstr "One LL-cup!!! $50.00"
882
+
883
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:407
884
+ msgid "One cup $5.00"
885
+ msgstr "One cup $5.00"
886
+
887
+ #: src/class-bwp-gxs.php:2060
888
+ msgid ""
889
+ "Override a built-in module by having a module with the same filename in "
890
+ "specified directory."
891
+ msgstr ""
892
+ "Override a built-in module by having a module with the same filename in "
893
+ "specified directory."
894
+
895
+ #: src/class-bwp-gxs.php:3096
896
+ msgid "Page"
897
+ msgstr "Page"
898
+
899
+ #: src/class-bwp-gxs.php:1343
900
+ msgid "Ping limit"
901
+ msgstr "Ping limit"
902
+
903
+ #: src/class-bwp-gxs.php:3985
904
+ #, php-format
905
+ msgid ""
906
+ "Ping limit for today to <em>%s</em> has been reached, consider increasing "
907
+ "the ping limit via <em>XML Sitemaps >> Ping search engines >> \"Ping limit "
908
+ "for each search engine\"</em>"
909
+ msgstr ""
910
+ "Ping limit for today to <em>%s</em> has been reached, consider increasing "
911
+ "the ping limit via <em>XML Sitemaps >> Ping search engines >> \"Ping limit "
912
+ "for each search engine\"</em>"
913
+
914
+ #: src/class-bwp-gxs.php:1339
915
+ msgid "Ping search engines"
916
+ msgstr "Ping search engines"
917
+
918
+ #: src/class-bwp-gxs.php:1722
919
+ msgid "Ping search engines when a news article is published."
920
+ msgstr "Ping search engines when a news article is published."
921
+
922
+ #: src/class-bwp-gxs.php:1463
923
+ msgid "Ping search engines when you publish new posts."
924
+ msgstr "Ping search engines when you publish new posts."
925
+
926
+ #: src/class-bwp-gxs.php:3964
927
+ #, php-format
928
+ msgid "Pinged <em>%s</em> with <em>%s</em> successfully!"
929
+ msgstr "Pinged <em>%s</em> with <em>%s</em> successfully!"
930
+
931
+ #: src/class-bwp-gxs.php:3658
932
+ msgid ""
933
+ "Please make sure that you have at least one sitemap enabled in <em>BWP "
934
+ "Sitemaps >> XML Sitemaps >> Sitemaps to generate</em>."
935
+ msgstr ""
936
+ "Please make sure that you have at least one sitemap enabled in <em>BWP "
937
+ "Sitemaps >> XML Sitemaps >> Sitemaps to generate</em>."
938
+
939
+ #: src/class-bwp-gxs.php:1759
940
+ #, php-format
941
+ msgid ""
942
+ "Please make sure you have enabled the <a href=\"%s\" target=\"_blank\">Post "
943
+ "Thumbnails feature</a> in your theme before enabling this extension."
944
+ msgstr ""
945
+ "Please make sure you have enabled the <a href=\"%s\" target=\"_blank\">Post "
946
+ "Thumbnails feature</a> in your theme before enabling this extension."
947
+
948
+ #: src/handler/ajax/external-page.php:107
949
+ msgid "Please provide a valid last modified date time."
950
+ msgstr "Please provide a valid last modified date time."
951
+
952
+ #: src/handler/ajax/external-page.php:63
953
+ msgid "Please provide all required fields."
954
+ msgstr "Please provide all required fields."
955
+
956
+ #: src/handler/ajax/external-page.php:78
957
+ #, php-format
958
+ msgid "Please provide an absolute URL under your domain, for example: %s."
959
+ msgstr "Please provide an absolute URL under your domain, for example: %s."
960
+
961
+ #: src/class-bwp-gxs.php:2484 src/class-bwp-gxs.php:2498
962
+ msgid "Please select at least one item to exclude."
963
+ msgstr "Please select at least one item to exclude."
964
+
965
+ #: src/templates/provider/admin/external-page-form.html.php:56
966
+ #, php-format
967
+ msgid ""
968
+ "Please specify \"Last modified\" in your <a href=\"%s\" target=\"_blank"
969
+ "\">local timezone</a>."
970
+ msgstr ""
971
+ "Please specify \"Last modified\" in your <a href=\"%s\" target=\"_blank"
972
+ "\">local timezone</a>."
973
+
974
+ #: src/class-bwp-gxs.php:1780
975
+ #, php-format
976
+ msgid ""
977
+ "Please take a look at <a href=\"%s\" target=\"_blank\">Google News's "
978
+ "guidelines</a> before enabling this feature."
979
+ msgstr ""
980
+ "Please take a look at <a href=\"%s\" target=\"_blank\">Google News's "
981
+ "guidelines</a> before enabling this feature."
982
+
983
+ #: src/class-bwp-gxs.php:1804
984
+ #, php-format
985
+ msgid ""
986
+ "Please take a look at <a href=\"%s\" target=\"_blank\">Google News's "
987
+ "guidelines</a> for more info."
988
+ msgstr ""
989
+ "Please take a look at <a href=\"%s\" target=\"_blank\">Google News's "
990
+ "guidelines</a> for more info."
991
+
992
+ #: vendor/kminh/bwp-framework/src/class-bwp-option-page-v3.php:93
993
+ msgid "Plugin Configurations"
994
+ msgstr "Plugin Configurations"
995
+
996
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:375
997
+ msgid "Plugin Support"
998
+ msgstr "Plugin Support"
999
+
1000
+ #: src/class-bwp-gxs.php:3087
1001
+ msgid "Post"
1002
+ msgstr "Post"
1003
+
1004
+ #: src/class-bwp-gxs.php:1984
1005
+ msgid ""
1006
+ "Print useful information such as build time, memory usage, SQL queries, etc."
1007
+ msgstr ""
1008
+ "Print useful information such as build time, memory usage, SQL queries, etc."
1009
+
1010
+ #: src/templates/provider/admin/external-pages.html.php:24
1011
+ #: src/templates/provider/admin/external-page-form.html.php:37
1012
+ msgid "Priority"
1013
+ msgstr "Priority"
1014
+
1015
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:378
1016
+ msgid "Rate this plugin 5 stars if you like it, thank you!"
1017
+ msgstr "Rate this plugin 5 stars if you like it, thank you!"
1018
+
1019
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:379
1020
+ msgid "Rate this plugin 5 stars!"
1021
+ msgstr "Rate this plugin 5 stars!"
1022
+
1023
+ #: src/class-bwp-gxs.php:1981
1024
+ msgid ""
1025
+ "Re-generate sitemap cache when expired. If you disable this, remember to "
1026
+ "manually flush the cache once in a while."
1027
+ msgstr ""
1028
+ "Re-generate sitemap cache when expired. If you disable this, remember to "
1029
+ "manually flush the cache once in a while."
1030
+
1031
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:370
1032
+ msgid "Read this first before asking any question!"
1033
+ msgstr "Read this first before asking any question!"
1034
+
1035
+ #: src/templates/provider/admin/exclude-posts.html.php:29
1036
+ #: src/templates/provider/admin/exclude-terms.html.php:29
1037
+ msgid "Remove"
1038
+ msgstr "Remove"
1039
+
1040
+ #: src/class-bwp-gxs.php:557
1041
+ msgid "Remove from exclusion"
1042
+ msgstr "Remove from exclusion"
1043
+
1044
+ #: src/class-bwp-gxs.php:562
1045
+ msgid "Remove this page"
1046
+ msgstr "Remove this page"
1047
+
1048
+ #: src/class-bwp-gxs.php:3489
1049
+ #, php-format
1050
+ msgid "Requested sitemap (<em>%s.xml</em>) was not found or not enabled."
1051
+ msgstr "Requested sitemap (<em>%s.xml</em>) was not found or not enabled."
1052
+
1053
+ #: src/templates/provider/admin/external-page-modal.html.php:27
1054
+ msgid "Reset"
1055
+ msgstr "Reset"
1056
+
1057
+ #: src/class-bwp-gxs.php:1912
1058
+ msgid "Robots.txt"
1059
+ msgstr "Robots.txt"
1060
+
1061
+ #: src/templates/provider/admin/external-page-modal.html.php:33
1062
+ #: vendor/kminh/bwp-framework/src/class-bwp-option-page-v3.php:306
1063
+ msgid "Save Changes"
1064
+ msgstr "Save Changes"
1065
+
1066
+ #: src/class-bwp-gxs.php:2346
1067
+ msgid "Save Changes and Flush Cache"
1068
+ msgstr "Save Changes and Flush Cache"
1069
+
1070
+ #: src/class-bwp-gxs.php:1341
1071
+ msgid "Search engines to ping"
1072
+ msgstr "Search engines to ping"
1073
+
1074
+ #: src/templates/provider/admin/exclude-posts.html.php:5
1075
+ msgid "Search for posts to exclude"
1076
+ msgstr "Search for posts to exclude"
1077
+
1078
+ #: src/templates/provider/admin/exclude-terms.html.php:5
1079
+ msgid "Search for terms to exclude"
1080
+ msgstr "Search for terms to exclude"
1081
+
1082
+ #: src/templates/provider/admin/news-contents.html.php:8
1083
+ msgid "Select"
1084
+ msgstr "Select"
1085
+
1086
+ #: src/class-bwp-gxs.php:1248
1087
+ msgid "Select a post type"
1088
+ msgstr "Select a post type"
1089
+
1090
+ #: src/class-bwp-gxs.php:1262
1091
+ msgid "Select a taxonomy"
1092
+ msgstr "Select a taxonomy"
1093
+
1094
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:386
1095
+ msgid "Send"
1096
+ msgstr "Send"
1097
+
1098
+ #: src/class-bwp-gxs.php:1794
1099
+ msgid ""
1100
+ "Set a different name for your news sitemap. By default, your <em>Site Title</"
1101
+ "em> is used."
1102
+ msgstr ""
1103
+ "Set a different name for your news sitemap. By default, your <em>Site Title</"
1104
+ "em> is used."
1105
+
1106
+ #: src/class-bwp-gxs.php:1801
1107
+ msgid "Set to <code>0</code> to disable (not recommended)."
1108
+ msgstr "Set to <code>0</code> to disable (not recommended)."
1109
+
1110
+ #: src/class-bwp-gxs.php:1406
1111
+ #, php-format
1112
+ msgid ""
1113
+ "Setting too high limits might lead to white page error due to timeout or "
1114
+ "memory issue. Refer to this plugin's <a target=\"_blank\" href=\"%s\">FAQ "
1115
+ "section</a> for more info."
1116
+ msgstr ""
1117
+ "Setting too high limits might lead to white page error due to timeout or "
1118
+ "memory issue. Refer to this plugin's <a target=\"_blank\" href=\"%s\">FAQ "
1119
+ "section</a> for more info."
1120
+
1121
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:1315
1122
+ msgid "Settings"
1123
+ msgstr "Settings"
1124
+
1125
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:431
1126
+ msgid "Share the love for this plugin!"
1127
+ msgstr "Share the love for this plugin!"
1128
+
1129
+ #: src/templates/provider/admin/exclude-posts.html.php:17
1130
+ #: src/templates/provider/admin/exclude-terms.html.php:17
1131
+ msgid "Show/Hide excluded items"
1132
+ msgstr "Show/Hide excluded items"
1133
+
1134
+ #: src/templates/provider/admin/external-pages.html.php:12
1135
+ msgid "Show/Hide external pages"
1136
+ msgstr "Show/Hide external pages"
1137
+
1138
+ #: src/class-bwp-gxs.php:1737
1139
+ msgid "Show/Hide selected terms"
1140
+ msgstr "Show/Hide selected terms"
1141
+
1142
+ #: src/class-bwp-gxs.php:1462
1143
+ msgid "Site Address"
1144
+ msgstr "Site Address"
1145
+
1146
+ #: src/class-bwp-gxs.php:1915
1147
+ msgid "Sitemap Cache"
1148
+ msgstr "Sitemap Cache"
1149
+
1150
+ #: src/class-bwp-gxs.php:1645
1151
+ msgid "Sitemap Contents"
1152
+ msgstr "Sitemap Contents"
1153
+
1154
+ #: src/class-bwp-gxs.php:350 src/class-bwp-gxs.php:1006
1155
+ msgid "Sitemap Log"
1156
+ msgstr "Sitemap Log"
1157
+
1158
+ #: src/class-bwp-gxs.php:1920
1159
+ msgid "Sitemap modules"
1160
+ msgstr "Sitemap modules"
1161
+
1162
+ #: src/class-bwp-gxs.php:1461
1163
+ msgid ""
1164
+ "Sitemaps like <code>post.xml</code> are split into <code>post_part1.xml</"
1165
+ "code>, <code>post_part2.xml</code>, etc. when limit reached."
1166
+ msgstr ""
1167
+ "Sitemaps like <code>post.xml</code> are split into <code>post_part1.xml</"
1168
+ "code>, <code>post_part2.xml</code>, etc. when limit reached."
1169
+
1170
+ #: src/class-bwp-gxs.php:1322
1171
+ msgid "Sitemaps to generate"
1172
+ msgstr "Sitemaps to generate"
1173
+
1174
+ #: src/class-bwp-gxs.php:1459
1175
+ msgid "Some copyrighted info is added to your sitemaps."
1176
+ msgstr "Some copyrighted info is added to your sitemaps."
1177
+
1178
+ #: src/class-bwp-gxs.php:1333
1179
+ msgid "Split <strong>post-based</strong> sitemaps"
1180
+ msgstr "Split <strong>post-based</strong> sitemaps"
1181
+
1182
+ #: src/class-bwp-gxs.php:1334
1183
+ msgid "Split limit"
1184
+ msgstr "Split limit"
1185
+
1186
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:541
1187
+ msgid "Subscribe"
1188
+ msgstr "Subscribe"
1189
+
1190
+ #: src/class-bwp-gxs.php:2472
1191
+ #, php-format
1192
+ msgid "Successfully excluded <strong>%d</strong> items."
1193
+ msgstr "Successfully excluded <strong>%d</strong> items."
1194
+
1195
+ #: src/class-bwp-gxs.php:3627
1196
+ #, php-format
1197
+ msgid ""
1198
+ "Successfully generated <em>%s.xml</em> using custom module file <em>%s</em>."
1199
+ msgstr ""
1200
+ "Successfully generated <em>%s.xml</em> using custom module file <em>%s</em>."
1201
+
1202
+ #: src/class-bwp-gxs.php:3628
1203
+ #, php-format
1204
+ msgid "Successfully generated <em>%s.xml</em> using module file <em>%s</em>."
1205
+ msgstr "Successfully generated <em>%s.xml</em> using module file <em>%s</em>."
1206
+
1207
+ #: src/class-bwp-gxs.php:3271
1208
+ #, php-format
1209
+ msgid "Successfully served a cached version of <em>%s.xml</em>."
1210
+ msgstr "Successfully served a cached version of <em>%s.xml</em>."
1211
+
1212
+ #: src/class-bwp-gxs.php:1454
1213
+ msgid "Taxonomy (including custom taxonomies)"
1214
+ msgstr "Taxonomy (including custom taxonomies)"
1215
+
1216
+ #: src/class-bwp-gxs.php:2416
1217
+ msgid "There are no cached sitemaps to flush."
1218
+ msgstr "There are no cached sitemaps to flush."
1219
+
1220
+ #: src/class-bwp-gxs.php:3652
1221
+ #, php-format
1222
+ msgid "There are no public <em>%s</em>."
1223
+ msgstr "There are no public <em>%s</em>."
1224
+
1225
+ #: src/class-bwp-gxs.php:3597
1226
+ #, php-format
1227
+ msgid ""
1228
+ "There is no class named <strong>%s</strong> in the module file <strong>%s</"
1229
+ "strong>."
1230
+ msgstr ""
1231
+ "There is no class named <strong>%s</strong> in the module file <strong>%s</"
1232
+ "strong>."
1233
+
1234
+ #: src/class-bwp-gxs.php:558 src/class-bwp-gxs.php:563
1235
+ msgid "This action can not be undone, are you sure?"
1236
+ msgstr "This action can not be undone, are you sure?"
1237
+
1238
+ #: src/class-bwp-gxs.php:1771
1239
+ msgid ""
1240
+ "This extension has an effect on performance, if you notice any slowdown "
1241
+ "please try disabling it first."
1242
+ msgstr ""
1243
+ "This extension has an effect on performance, if you notice any slowdown "
1244
+ "please try disabling it first."
1245
+
1246
+ #: src/class-bwp-gxs.php:1827
1247
+ msgid ""
1248
+ "This ping works separately from the sitemap index ping, and only occurs when "
1249
+ "you publish an article in one of the news categories set below."
1250
+ msgstr ""
1251
+ "This ping works separately from the sitemap index ping, and only occurs when "
1252
+ "you publish an article in one of the news categories set below."
1253
+
1254
+ #: src/class-bwp-gxs.php:379
1255
+ #, php-format
1256
+ msgid ""
1257
+ "This sitemap was originally generated in %s second(s) (Memory usage: %s) - "
1258
+ "%s queries - %s URL(s) listed"
1259
+ msgstr ""
1260
+ "This sitemap was originally generated in %s second(s) (Memory usage: %s) - "
1261
+ "%s queries - %s URL(s) listed"
1262
+
1263
+ #: src/templates/provider/admin/exclude-posts.html.php:28
1264
+ msgid "Title"
1265
+ msgstr "Title"
1266
+
1267
+ #: src/class-bwp-gxs.php:1231
1268
+ #, php-format
1269
+ msgid ""
1270
+ "To proceed, submit your <a href=\"%s\" target=\"_blank\">sitemapindex</a> to "
1271
+ "major search engines like <a href=\"%s\" target=\"_blank\">Google</a> or <a "
1272
+ "href=\"%s\" target=\"_blank\">Bing</a>."
1273
+ msgstr ""
1274
+ "To proceed, submit your <a href=\"%s\" target=\"_blank\">sitemapindex</a> to "
1275
+ "major search engines like <a href=\"%s\" target=\"_blank\">Google</a> or <a "
1276
+ "href=\"%s\" target=\"_blank\">Bing</a>."
1277
+
1278
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:408
1279
+ msgid "Two cups $10.00"
1280
+ msgstr "Two cups $10.00"
1281
+
1282
+ #: src/class-bwp-gxs.php:3959
1283
+ msgid "Unknown response code from search engines. Ping failed."
1284
+ msgstr "Unknown response code from search engines. Ping failed."
1285
+
1286
+ #: src/templates/provider/admin/external-pages.html.php:22
1287
+ msgid "Url"
1288
+ msgstr "Url"
1289
+
1290
+ #: src/class-bwp-gxs.php:1910
1291
+ msgid "Use GMT for Last Modified date"
1292
+ msgstr "Use GMT for Last Modified date"
1293
+
1294
+ #: src/class-bwp-gxs.php:1979
1295
+ #, php-format
1296
+ msgid ""
1297
+ "Use gzip to make sitemaps ~70% smaller. If you see an error after enabling "
1298
+ "this, it's very likely that you have gzip active on your server already."
1299
+ msgstr ""
1300
+ "Use gzip to make sitemaps ~70% smaller. If you see an error after enabling "
1301
+ "this, it's very likely that you have gzip active on your server already."
1302
+
1303
+ #: src/class-bwp-gxs.php:1706
1304
+ msgid "Use the selected \"News taxonomy\""
1305
+ msgstr "Use the selected \"News taxonomy\""
1306
+
1307
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:416
1308
+ msgid "Via"
1309
+ msgstr "Via"
1310
+
1311
+ #: src/templates/provider/admin/news-contents.html.php:13
1312
+ #: vendor/kminh/bwp-framework/src/class-bwp-option-page-v3.php:828
1313
+ msgid "View more info in a separate tab"
1314
+ msgstr "View more info in a separate tab"
1315
+
1316
+ #: src/class-bwp-gxs.php:2185
1317
+ msgid "Warning"
1318
+ msgstr "Warning"
1319
+
1320
+ #: src/class-bwp-gxs.php:1525
1321
+ msgid ""
1322
+ "When a post belongs to multiple terms, it will be excluded if <strong>ANY</"
1323
+ "strong> of those terms is currently excluded."
1324
+ msgstr ""
1325
+ "When a post belongs to multiple terms, it will be excluded if <strong>ANY</"
1326
+ "strong> of those terms is currently excluded."
1327
+
1328
+ #: src/class-bwp-gxs.php:1986
1329
+ msgid ""
1330
+ "When this is on, NO caching is used and <code>WP_DEBUG</code> is respected, "
1331
+ "useful when developing new modules."
1332
+ msgstr ""
1333
+ "When this is on, NO caching is used and <code>WP_DEBUG</code> is respected, "
1334
+ "useful when developing new modules."
1335
+
1336
+ #: src/class-bwp-gxs.php:1987
1337
+ #, php-format
1338
+ msgid ""
1339
+ "When this is on, NO headers are sent and sitemaps are NOT compressed, useful "
1340
+ "when debugging <em>Content Encoding Error</em>. More info <a href="
1341
+ "\"%s#sitemap-log-debug\" target=\"_blank\">here</a>."
1342
+ msgstr ""
1343
+ "When this is on, NO headers are sent and sitemaps are NOT compressed, useful "
1344
+ "when debugging <em>Content Encoding Error</em>. More info <a href="
1345
+ "\"%s#sitemap-log-debug\" target=\"_blank\">here</a>."
1346
+
1347
+ #: src/class-bwp-gxs.php:1421
1348
+ msgid ""
1349
+ "Whenever you post something new to your blog, you can <em>ping</em> search "
1350
+ "engines with your sitemap index to tell them your blog just got updated."
1351
+ msgstr ""
1352
+ "Whenever you post something new to your blog, you can <em>ping</em> search "
1353
+ "engines with your sitemap index to tell them your blog just got updated."
1354
+
1355
+ #: src/class-bwp-gxs.php:1959
1356
+ #, php-format
1357
+ msgid ""
1358
+ "WordPress generates a %svirtual robots.txt%s file for your blog by default. "
1359
+ "You can add the sitemap index file to that robots.txt file using settings "
1360
+ "below."
1361
+ msgstr ""
1362
+ "WordPress generates a %svirtual robots.txt%s file for your blog by default. "
1363
+ "You can add the sitemap index file to that robots.txt file using settings "
1364
+ "below."
1365
+
1366
+ #: src/class-bwp-gxs.php:963
1367
+ msgid "XML Sitemap Log"
1368
+ msgstr "XML Sitemap Log"
1369
+
1370
+ #: src/class-bwp-gxs.php:335 src/class-bwp-gxs.php:942
1371
+ #: src/class-bwp-gxs.php:982
1372
+ msgid "XML Sitemaps"
1373
+ msgstr "XML Sitemaps"
1374
+
1375
+ #: src/class-bwp-gxs.php:956
1376
+ msgid "XML Sitemaps - Advanced Options"
1377
+ msgstr "XML Sitemaps - Advanced Options"
1378
+
1379
+ #: src/class-bwp-gxs.php:949
1380
+ msgid "XML Sitemaps - Extensions"
1381
+ msgstr "XML Sitemaps - Extensions"
1382
+
1383
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:565
1384
+ #, php-format
1385
+ msgid "You are using version %s!"
1386
+ msgstr "You are using version %s!"
1387
+
1388
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:391
1389
+ msgid ""
1390
+ "You can buy me some special coffees if you appreciate my work, thank you!"
1391
+ msgstr ""
1392
+ "You can buy me some special coffees if you appreciate my work, thank you!"
1393
+
1394
+ #: src/class-bwp-gxs.php:1748
1395
+ #, php-format
1396
+ msgid ""
1397
+ "You can only select post types that <a href=\"%s\" target=\"_blank\">support "
1398
+ "the thumbnail feature</a>."
1399
+ msgstr ""
1400
+ "You can only select post types that <a href=\"%s\" target=\"_blank\">support "
1401
+ "the thumbnail feature</a>."
1402
+
1403
+ #: src/class-bwp-gxs.php:1980
1404
+ msgid "Your sitemaps are generated and then cached to reduce unnecessary work."
1405
+ msgstr ""
1406
+ "Your sitemaps are generated and then cached to reduce unnecessary work."
1407
+
1408
+ #: src/class-bwp-gxs.php:1191
1409
+ msgid "click to generate your Sitemap Index"
1410
+ msgstr "click to generate your Sitemap Index"
1411
+
1412
+ #: src/class-bwp-gxs.php:1445 src/class-bwp-gxs.php:2013
1413
+ msgid "day(s)"
1414
+ msgstr "day(s)"
1415
+
1416
+ #: src/class-bwp-gxs.php:1715
1417
+ msgid "day(s)."
1418
+ msgstr "day(s)."
1419
+
1420
+ #: src/class-bwp-gxs.php:2573
1421
+ msgid "debugging was on"
1422
+ msgstr "debugging was on"
1423
+
1424
+ #: src/class-bwp-gxs.php:2572
1425
+ msgid "extra debugging was on"
1426
+ msgstr "extra debugging was on"
1427
+
1428
+ #: src/class-bwp-gxs.php:1400
1429
+ msgid "filter"
1430
+ msgstr "filter"
1431
+
1432
+ #: src/class-bwp-gxs.php:1444 src/class-bwp-gxs.php:2012
1433
+ msgid "hour(s)"
1434
+ msgstr "hour(s)"
1435
+
1436
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:524
1437
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:534
1438
+ msgid "loading..."
1439
+ msgstr "loading..."
1440
+
1441
+ #: src/class-bwp-gxs.php:1443 src/class-bwp-gxs.php:2011
1442
+ msgid "minute(s)"
1443
+ msgstr "minute(s)"
1444
+
1445
+ #: src/class-bwp-gxs.php:3073
1446
+ #, php-format
1447
+ msgid ""
1448
+ "news posts that are published within the last <strong>%d day(s)</strong>. To "
1449
+ "include news posts within a longer time period, change the \"News age\" "
1450
+ "setting via BWP Sitemaps >> Extensions >> Google News Sitemap >> Sitemap "
1451
+ "Contents"
1452
+ msgstr ""
1453
+ "news posts that are published within the last <strong>%d day(s)</strong>. To "
1454
+ "include news posts within a longer time period, change the \"News age\" "
1455
+ "setting via BWP Sitemaps >> Extensions >> Google News Sitemap >> Sitemap "
1456
+ "Contents"
1457
+
1458
+ #: src/class-bwp-gxs.php:1108
1459
+ msgid "overridden"
1460
+ msgstr "overridden"
1461
+
1462
+ #: src/class-bwp-gxs.php:1442 src/class-bwp-gxs.php:2010
1463
+ msgid "second(s)"
1464
+ msgstr "second(s)"
1465
+
1466
+ #: src/class-bwp-gxs.php:1729
1467
+ msgid "selected terms."
1468
+ msgstr "selected terms."
1469
+
1470
+ #: src/class-bwp-gxs.php:1487
1471
+ msgid ""
1472
+ "time(s) per search engine per day. Increase this limit if you publish a lot "
1473
+ "of posts in a single day."
1474
+ msgstr ""
1475
+ "time(s) per search engine per day. Increase this limit if you publish a lot "
1476
+ "of posts in a single day."
1477
+
1478
+ #: src/templates/provider/admin/external-page-modal.html.php:21
1479
+ msgid "working ..."
1480
+ msgstr "working ..."
bwp-gxs-ms.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+ include_once dirname(__FILE__) . '/bwp-google-xml-sitemaps/bwp-gxs.php';
bwp-gxs.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // in case someone integrates this plugin in a theme or calling this directly
3
+ global $bwp_gxs;
4
+
5
+ if ((isset($bwp_gxs) && $bwp_gxs instanceof BWP_Sitemaps) || !defined('ABSPATH'))
6
+ return;
7
+
8
+ // require libs manually if PHP version is lower than 5.3.2
9
+ // @todo remove this when WordPress drops support for PHP version < 5.3.2
10
+ if (version_compare(PHP_VERSION, '5.3.2', '<'))
11
+ {
12
+ require_once dirname(__FILE__) . '/autoload.php';
13
+ }
14
+ else
15
+ {
16
+ // load dependencies using composer autoload
17
+ require_once dirname(__FILE__) . '/vendor/autoload.php';
18
+ }
19
+
20
+ /**
21
+ * Global instance of the plugin
22
+ *
23
+ * TODO in 2.0.0 `$bwp_gxs` should be changed to `$bwp_sitemaps`
24
+ *
25
+ * @var BwP_Sitemaps
26
+ */
27
+ $bwp_gxs = new BWP_Sitemaps(array(
28
+ 'title' => 'Better WordPress Google XML Sitemaps',
29
+ 'version' => '1.4.0',
30
+ 'domain' => 'bwp-google-xml-sitemaps'
31
+ ));
bwp-simple-gxs-ms.php DELETED
@@ -1,2 +0,0 @@
1
- <?php
2
- include_once dirname(__FILE__) . '/bwp-google-xml-sitemaps/bwp-simple-gxs.php';
 
 
bwp-simple-gxs.php CHANGED
@@ -2,19 +2,21 @@
2
  /*
3
  Plugin Name: Better WordPress Google XML Sitemaps
4
  Plugin URI: http://betterwp.net/wordpress-plugins/google-xml-sitemaps/
5
- Description: A more lightweight Google XML Sitemap WordPress plugin that generates a <a href="http://en.wikipedia.org/wiki/Sitemap_index">Sitemap index</a> rather than a single sitemap. Despite its simplicity, it is still very powerful and has plenty of options to choose.
6
- Version: 1.3.0
7
- Text Domain: bwp-simple-gxs
8
  Domain Path: /languages/
9
  Author: Khang Minh
10
  Author URI: http://betterwp.net
11
  License: GPLv3 or later
12
  */
13
 
14
- // In case someone integrates this plugin in a theme or calling this directly
15
- if (class_exists('BWP_SIMPLE_GXS') || !defined('ABSPATH'))
16
- return;
17
-
18
- // init plugin
19
- require_once dirname(__FILE__) . '/includes/class-bwp-simple-gxs.php';
20
- $bwp_gxs = new BWP_SIMPLE_GXS();
 
 
2
  /*
3
  Plugin Name: Better WordPress Google XML Sitemaps
4
  Plugin URI: http://betterwp.net/wordpress-plugins/google-xml-sitemaps/
5
+ Description: Generates XML sitemaps for your WordPress website with ease. This plugin comes with support for sitemap index, multisite WordPress and Google News sitemap. It also provides a powerful and flexible system for any customization need.
6
+ Version: 1.4.0
7
+ Text Domain: bwp-google-xml-sitemaps
8
  Domain Path: /languages/
9
  Author: Khang Minh
10
  Author URI: http://betterwp.net
11
  License: GPLv3 or later
12
  */
13
 
14
+ /**
15
+ * The current file (`bwp-simple-gxs.php`) is used to make sure updates to
16
+ * 1.4.0 is smooth.
17
+ *
18
+ * There's no easy way to change a plugin's main file, need to find a solution.
19
+ * For now we load the actual main plugin file via a simple `include_once`
20
+ * statement.
21
+ */
22
+ include_once dirname(__FILE__) . '/bwp-gxs.php';
bwp-simple-gxs.pot DELETED
@@ -1,1046 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: BWP Google XML Sitemaps\n"
4
- "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2014-09-03 15:10+0700\n"
6
- "PO-Revision-Date: 2014-09-03 15:10+0700\n"
7
- "Last-Translator: Khang Minh <contact@betterwp.net>\n"
8
- "Language-Team: BWP <contact@betterwp.net>\n"
9
- "Language: en_US\n"
10
- "MIME-Version: 1.0\n"
11
- "Content-Type: text/plain; charset=UTF-8\n"
12
- "Content-Transfer-Encoding: 8bit\n"
13
- "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n"
14
- "X-Poedit-Basepath: .\n"
15
- "X-Poedit-SourceCharset: UTF-8\n"
16
- "X-Generator: Poedit 1.6.5\n"
17
- "X-Poedit-SearchPath-0: .\n"
18
-
19
- #: includes/bwp-option-page/includes/class-bwp-option-page.php:81
20
- msgid "Plugin Configurations"
21
- msgstr ""
22
-
23
- #: includes/bwp-option-page/includes/class-bwp-option-page.php:623
24
- msgid "Save Changes"
25
- msgstr ""
26
-
27
- #: includes/class-bwp-framework-improved.php:211
28
- #, php-format
29
- msgid ""
30
- "%s requires WordPress <strong>%s</strong> or higher and PHP <strong>%s</"
31
- "strong> or higher. The plugin will not protected function until you update "
32
- "your software. Please deactivate this plugin."
33
- msgstr ""
34
-
35
- #: includes/class-bwp-framework-improved.php:232
36
- msgid "Development Log"
37
- msgstr ""
38
-
39
- #: includes/class-bwp-framework-improved.php:232
40
- msgid "Frequently Asked Questions"
41
- msgstr ""
42
-
43
- #: includes/class-bwp-framework-improved.php:232
44
- msgid "FAQ"
45
- msgstr ""
46
-
47
- #: includes/class-bwp-framework-improved.php:232
48
- msgid "Got a problem? Send me a feedback!"
49
- msgstr ""
50
-
51
- #: includes/class-bwp-framework-improved.php:232
52
- msgid "Contact"
53
- msgstr ""
54
-
55
- #: includes/class-bwp-framework-improved.php:239
56
- msgid ""
57
- "You can buy me some special coffees if you appreciate my work, thank you!"
58
- msgstr ""
59
-
60
- #: includes/class-bwp-framework-improved.php:253
61
- #, php-format
62
- msgid "Donate to %s"
63
- msgstr ""
64
-
65
- #: includes/class-bwp-framework-improved.php:255
66
- msgid "One cup $5.00"
67
- msgstr ""
68
-
69
- #: includes/class-bwp-framework-improved.php:256
70
- msgid "Two cups $10.00"
71
- msgstr ""
72
-
73
- #: includes/class-bwp-framework-improved.php:257
74
- msgid "Five cups! $25.00"
75
- msgstr ""
76
-
77
- #: includes/class-bwp-framework-improved.php:258
78
- msgid "One LL-cup!!! $50.00"
79
- msgstr ""
80
-
81
- #: includes/class-bwp-framework-improved.php:259
82
- msgid "... or any amount!"
83
- msgstr ""
84
-
85
- #: includes/class-bwp-framework-improved.php:274
86
- msgid "Latest updates from BetterWP.net!"
87
- msgstr ""
88
-
89
- #: includes/class-bwp-framework-improved.php:275
90
- msgid "Follow me on Twitter!"
91
- msgstr ""
92
-
93
- #: includes/class-bwp-framework-improved.php:285
94
- msgid "This Plugin is Proudly Sponsored By"
95
- msgstr ""
96
-
97
- #: includes/class-bwp-framework-improved.php:305
98
- #, php-format
99
- msgid "You are using version %s!"
100
- msgstr ""
101
-
102
- #: includes/class-bwp-framework-improved.php:546
103
- msgid "Settings"
104
- msgstr ""
105
-
106
- #: includes/class-bwp-simple-gxs.php:361 includes/class-bwp-simple-gxs.php:785
107
- msgid "XML Sitemaps"
108
- msgstr ""
109
-
110
- #: includes/class-bwp-simple-gxs.php:363 includes/class-bwp-simple-gxs.php:793
111
- msgid "Google News Sitemap"
112
- msgstr ""
113
-
114
- #: includes/class-bwp-simple-gxs.php:365 includes/class-bwp-simple-gxs.php:801
115
- msgid "Sitemap Log"
116
- msgstr ""
117
-
118
- #: includes/class-bwp-simple-gxs.php:397
119
- #, php-format
120
- msgid ""
121
- "This sitemap was originally generated in %s second(s) (Memory usage: %s) - "
122
- "%s queries - %s URL(s) listed"
123
- msgstr ""
124
-
125
- #: includes/class-bwp-simple-gxs.php:751
126
- msgid "BWP Google XML Sitemaps Statistics"
127
- msgstr ""
128
-
129
- #: includes/class-bwp-simple-gxs.php:752
130
- msgid "BWP XML Sitemaps"
131
- msgstr ""
132
-
133
- #: includes/class-bwp-simple-gxs.php:758
134
- msgid "BWP Google News XML Sitemap"
135
- msgstr ""
136
-
137
- #: includes/class-bwp-simple-gxs.php:759
138
- msgid "BWP Google News Sitemap"
139
- msgstr ""
140
-
141
- #: includes/class-bwp-simple-gxs.php:765
142
- msgid "BWP Google XML Sitemaps Generator"
143
- msgstr ""
144
-
145
- #: includes/class-bwp-simple-gxs.php:766
146
- msgid "BWP Sitemap Log"
147
- msgstr ""
148
-
149
- #: includes/class-bwp-simple-gxs.php:775
150
- msgid "Better WordPress Google XML Sitemaps"
151
- msgstr ""
152
-
153
- #: includes/class-bwp-simple-gxs.php:784
154
- msgid "Better WordPress Google XML Sitemaps Statistics"
155
- msgstr ""
156
-
157
- #: includes/class-bwp-simple-gxs.php:792
158
- msgid "Better WordPress Google News XML Sitemap"
159
- msgstr ""
160
-
161
- #: includes/class-bwp-simple-gxs.php:800
162
- msgid "Better WordPress Google XML Sitemaps Generator"
163
- msgstr ""
164
-
165
- #: includes/class-bwp-simple-gxs.php:878
166
- msgid "You do not have sufficient permissions to access this page."
167
- msgstr ""
168
-
169
- #: includes/class-bwp-simple-gxs.php:925
170
- #: includes/class-bwp-simple-gxs.php:1776
171
- #: includes/class-bwp-simple-gxs.php:1788
172
- msgid "Notice"
173
- msgstr ""
174
-
175
- #: includes/class-bwp-simple-gxs.php:926
176
- msgid "All logs have been cleared successfully!"
177
- msgstr ""
178
-
179
- #: includes/class-bwp-simple-gxs.php:974
180
- msgid "Your sitemaps"
181
- msgstr ""
182
-
183
- #: includes/class-bwp-simple-gxs.php:975
184
- msgid "Sitemaps to generate"
185
- msgstr ""
186
-
187
- #: includes/class-bwp-simple-gxs.php:976
188
- msgid "<strong>Enable</strong> following sitemaps"
189
- msgstr ""
190
-
191
- #: includes/class-bwp-simple-gxs.php:977
192
- msgid "For post-based sitemaps, <strong>disable</strong> following post types:"
193
- msgstr ""
194
-
195
- #: includes/class-bwp-simple-gxs.php:978
196
- msgid ""
197
- "For taxonomy-based sitemaps, <strong>disable</strong> following taxonomies:"
198
- msgstr ""
199
-
200
- #: includes/class-bwp-simple-gxs.php:979
201
- msgid "Item limits"
202
- msgstr ""
203
-
204
- #: includes/class-bwp-simple-gxs.php:980
205
- msgid "Global limit"
206
- msgstr ""
207
-
208
- #: includes/class-bwp-simple-gxs.php:981
209
- msgid "Split <strong>post-based</strong> sitemaps"
210
- msgstr ""
211
-
212
- #: includes/class-bwp-simple-gxs.php:982
213
- msgid "Split limit"
214
- msgstr ""
215
-
216
- #: includes/class-bwp-simple-gxs.php:983
217
- msgid "Default values & Formatting"
218
- msgstr ""
219
-
220
- #: includes/class-bwp-simple-gxs.php:984
221
- msgid "Default change frequency"
222
- msgstr ""
223
-
224
- #: includes/class-bwp-simple-gxs.php:985
225
- msgid "Default priority"
226
- msgstr ""
227
-
228
- #: includes/class-bwp-simple-gxs.php:986
229
- msgid "Minimum priority"
230
- msgstr ""
231
-
232
- #: includes/class-bwp-simple-gxs.php:987
233
- msgid "Use GMT for Last Modified date"
234
- msgstr ""
235
-
236
- #: includes/class-bwp-simple-gxs.php:988
237
- msgid "Compress sitemaps"
238
- msgstr ""
239
-
240
- #: includes/class-bwp-simple-gxs.php:989
241
- msgid "Look and Feel"
242
- msgstr ""
243
-
244
- #: includes/class-bwp-simple-gxs.php:990
245
- msgid "Make sitemaps look pretty"
246
- msgstr ""
247
-
248
- #: includes/class-bwp-simple-gxs.php:991
249
- msgid "Custom XSLT stylesheet URL"
250
- msgstr ""
251
-
252
- #: includes/class-bwp-simple-gxs.php:992
253
- msgid "Enable build stats"
254
- msgstr ""
255
-
256
- #: includes/class-bwp-simple-gxs.php:993
257
- msgid "Enable credit"
258
- msgstr ""
259
-
260
- #: includes/class-bwp-simple-gxs.php:994
261
- msgid "Virtual robots.txt"
262
- msgstr ""
263
-
264
- #: includes/class-bwp-simple-gxs.php:995
265
- msgid "Add a sitemapindex entry to blog's robots.txt"
266
- msgstr ""
267
-
268
- #: includes/class-bwp-simple-gxs.php:996
269
- msgid "Add sitemapindex entries from all blogs to primary blog's robots.txt"
270
- msgstr ""
271
-
272
- #: includes/class-bwp-simple-gxs.php:997
273
- msgid "Ping search engines"
274
- msgstr ""
275
-
276
- #: includes/class-bwp-simple-gxs.php:998
277
- msgid "Enable pinging"
278
- msgstr ""
279
-
280
- #: includes/class-bwp-simple-gxs.php:999
281
- msgid "Search engines to ping"
282
- msgstr ""
283
-
284
- #: includes/class-bwp-simple-gxs.php:1000
285
- msgid "<strong>Disable pinging</strong> for following post types:"
286
- msgstr ""
287
-
288
- #: includes/class-bwp-simple-gxs.php:1001
289
- msgid "Ping limit for each search engine"
290
- msgstr ""
291
-
292
- #: includes/class-bwp-simple-gxs.php:1002
293
- msgid "Caching"
294
- msgstr ""
295
-
296
- #: includes/class-bwp-simple-gxs.php:1003
297
- msgid "Enable caching"
298
- msgstr ""
299
-
300
- #: includes/class-bwp-simple-gxs.php:1004
301
- msgid "Enable auto cache re-generation"
302
- msgstr ""
303
-
304
- #: includes/class-bwp-simple-gxs.php:1005
305
- msgid "Cache expiry time"
306
- msgstr ""
307
-
308
- #: includes/class-bwp-simple-gxs.php:1006
309
- msgid "Cache directory"
310
- msgstr ""
311
-
312
- #: includes/class-bwp-simple-gxs.php:1007
313
- msgid "Sitemap modules"
314
- msgstr ""
315
-
316
- #: includes/class-bwp-simple-gxs.php:1008
317
- msgid "Database query limit"
318
- msgstr ""
319
-
320
- #: includes/class-bwp-simple-gxs.php:1009
321
- msgid "Custom module directory"
322
- msgstr ""
323
-
324
- #: includes/class-bwp-simple-gxs.php:1010
325
- msgid "Sitemap log & debug"
326
- msgstr ""
327
-
328
- #: includes/class-bwp-simple-gxs.php:1011
329
- msgid "Enable sitemap log"
330
- msgstr ""
331
-
332
- #: includes/class-bwp-simple-gxs.php:1012
333
- msgid "Enable debug mode"
334
- msgstr ""
335
-
336
- #: includes/class-bwp-simple-gxs.php:1013
337
- msgid "Enable debug extra mode"
338
- msgstr ""
339
-
340
- #: includes/class-bwp-simple-gxs.php:1061
341
- #, php-format
342
- msgid ""
343
- "Choose appropriate sitemaps to generate. For each sitemap, you can use "
344
- "filters to further <a href=\"%s#exclude_items\" target=\"_blank\">exclude "
345
- "items</a> you do not need."
346
- msgstr ""
347
-
348
- #: includes/class-bwp-simple-gxs.php:1068
349
- msgid "Limit the number of items to output in one sitemap. "
350
- msgstr ""
351
-
352
- #: includes/class-bwp-simple-gxs.php:1069
353
- #, php-format
354
- msgid ""
355
- "Avoid setting too high limits, i.e. ones that your server can not handle. In "
356
- "such case, you might encounter white page error due to timeout or memory "
357
- "issue. Refer to this plugin's <a target=\"_blank\" href=\"%s\">FAQ section</"
358
- "a> for more info."
359
- msgstr ""
360
-
361
- #: includes/class-bwp-simple-gxs.php:1076
362
- msgid ""
363
- "Customize default values and some formating for your sitemaps. Default "
364
- "values are only used when valid ones can not be calculated."
365
- msgstr ""
366
-
367
- #: includes/class-bwp-simple-gxs.php:1081
368
- msgid ""
369
- "Customize the look and feel of your sitemaps. Note that an XSLT stylesheet "
370
- "will NOT be used for the Google News Sitemap module regardless of any "
371
- "setting in this section."
372
- msgstr ""
373
-
374
- #: includes/class-bwp-simple-gxs.php:1087
375
- #, php-format
376
- msgid ""
377
- "WordPress generates a %svirtual robots.txt%s file for your blog by default. "
378
- "You can add links to sitemapindex files generated by this plugin to that "
379
- "robots.txt file using settings below."
380
- msgstr ""
381
-
382
- #: includes/class-bwp-simple-gxs.php:1099
383
- msgid ""
384
- "Whenever you post something new to your blog, you can <em>ping</em> search "
385
- "engines with your sitemapindex to tell them your blog just got updated."
386
- msgstr ""
387
-
388
- #: includes/class-bwp-simple-gxs.php:1104
389
- msgid ""
390
- "Cache your sitemaps for better performance. If you are still configuring the "
391
- "plugin it's best to disable caching or you might have to manually flush the "
392
- "cache for any changes to show up."
393
- msgstr ""
394
-
395
- #: includes/class-bwp-simple-gxs.php:1110
396
- #, php-format
397
- msgid ""
398
- "Extend this plugin using customizable modules. More info <a href="
399
- "\"%s#module_api\">here</a>."
400
- msgstr ""
401
-
402
- #: includes/class-bwp-simple-gxs.php:1132
403
- #: includes/class-bwp-simple-gxs.php:1138
404
- msgid "second(s)"
405
- msgstr ""
406
-
407
- #: includes/class-bwp-simple-gxs.php:1133
408
- #: includes/class-bwp-simple-gxs.php:1139
409
- msgid "minute(s)"
410
- msgstr ""
411
-
412
- #: includes/class-bwp-simple-gxs.php:1134
413
- #: includes/class-bwp-simple-gxs.php:1140
414
- msgid "hour(s)"
415
- msgstr ""
416
-
417
- #: includes/class-bwp-simple-gxs.php:1135
418
- #: includes/class-bwp-simple-gxs.php:1141
419
- msgid "day(s)"
420
- msgstr ""
421
-
422
- #: includes/class-bwp-simple-gxs.php:1149
423
- #: includes/class-bwp-simple-gxs.php:1152
424
- #: includes/class-bwp-simple-gxs.php:1155
425
- msgid "read more"
426
- msgstr ""
427
-
428
- #: includes/class-bwp-simple-gxs.php:1159
429
- msgid "Your sitemaps are generated and then cached to reduce unnecessary work."
430
- msgstr ""
431
-
432
- #: includes/class-bwp-simple-gxs.php:1160
433
- msgid ""
434
- "Re-generate sitemap cache when expired. If you disable this, remember to "
435
- "manually flush the cache once in a while."
436
- msgstr ""
437
-
438
- #: includes/class-bwp-simple-gxs.php:1161
439
- msgid ""
440
- "print useful information such as build time, memory usage, SQL queries, etc."
441
- msgstr ""
442
-
443
- #: includes/class-bwp-simple-gxs.php:1162
444
- #, php-format
445
- msgid ""
446
- "Use gzip to make sitemaps ~70% smaller. If you see an error after enabling "
447
- "this, it's very likely that you have gzip active on your server already."
448
- msgstr ""
449
-
450
- #: includes/class-bwp-simple-gxs.php:1163
451
- #, php-format
452
- msgid ""
453
- "If you have for example 50 blogs, 50 sitemapindex entries will be added to "
454
- "your primary blog's <a href=\"%s\" target=\"_blank\">robots.txt</a>."
455
- msgstr ""
456
-
457
- #: includes/class-bwp-simple-gxs.php:1164
458
- msgid "Taxonomy (including custom taxonomies)."
459
- msgstr ""
460
-
461
- #: includes/class-bwp-simple-gxs.php:1165
462
- msgid "Date archives."
463
- msgstr ""
464
-
465
- #: includes/class-bwp-simple-gxs.php:1166
466
- msgid "Author archives."
467
- msgstr ""
468
-
469
- #: includes/class-bwp-simple-gxs.php:1167
470
- #, php-format
471
- msgid ""
472
- "External pages. More info <a href=\"%s#external_sitemap\" target=\"_blank"
473
- "\">here</a>."
474
- msgstr ""
475
-
476
- #: includes/class-bwp-simple-gxs.php:1168
477
- msgid "some copyrighted info is also added to your sitemaps. Thanks!"
478
- msgstr ""
479
-
480
- #: includes/class-bwp-simple-gxs.php:1169
481
- msgid ""
482
- "Default XSLT stylesheets will be used. Set your custom stylesheets below or "
483
- "filter the <code>bwp_gxs_xslt</code> hook."
484
- msgstr ""
485
-
486
- #: includes/class-bwp-simple-gxs.php:1170
487
- #, php-format
488
- msgid ""
489
- "If you're on a Multi-site installation with <strong>Sub-domain</strong> "
490
- "enabled, each blog will have its own robots.txt. Blogs in <strong>sub-"
491
- "directory</strong> will not, however. Please read the <a href=\"%s#robots.txt"
492
- "\" target=\"_blank\">documentation</a> for more info."
493
- msgstr ""
494
-
495
- #: includes/class-bwp-simple-gxs.php:1171
496
- msgid ""
497
- "Sitemaps like <code>post.xml</code> are split into <code>post_part1.xml</"
498
- "code>, <code>post_part2.xml</code>, etc. when limit reached."
499
- msgstr ""
500
-
501
- #: includes/class-bwp-simple-gxs.php:1172
502
- msgid ""
503
- "Disable this to use the local timezone setting in <em>Settings >> General</"
504
- "em>."
505
- msgstr ""
506
-
507
- #: includes/class-bwp-simple-gxs.php:1173
508
- msgid ""
509
- "Site Address. For a multi-site installation of WordPress, this sitemap will "
510
- "list all appropriate blogs' addresses within your network, not just the main "
511
- "blog's."
512
- msgstr ""
513
-
514
- #: includes/class-bwp-simple-gxs.php:1174
515
- msgid ""
516
- "Ping search engines when you publish new posts. By default all public posts "
517
- "are considered, unless explicitly disabled below."
518
- msgstr ""
519
-
520
- #: includes/class-bwp-simple-gxs.php:1175
521
- msgid "Google"
522
- msgstr ""
523
-
524
- #: includes/class-bwp-simple-gxs.php:1176
525
- msgid "Bing"
526
- msgstr ""
527
-
528
- #: includes/class-bwp-simple-gxs.php:1177
529
- #, php-format
530
- msgid ""
531
- "No additional load is needed so enabling this is highly recommended. You can "
532
- "check the log <a href=\"%s\">here</a>."
533
- msgstr ""
534
-
535
- #: includes/class-bwp-simple-gxs.php:1178
536
- msgid ""
537
- "When this is on, NO caching is used and <code>WP_DEBUG</code> is respected, "
538
- "useful when developing new modules."
539
- msgstr ""
540
-
541
- #: includes/class-bwp-simple-gxs.php:1179
542
- #, php-format
543
- msgid ""
544
- "When this is on, NO headers are sent and sitemaps are NOT compressed, useful "
545
- "when debugging <em>Content Encoding Error</em>. More info <a href="
546
- "\"%s#sitemap_log_debug\" target=\"_blank\">here</a>."
547
- msgstr ""
548
-
549
- #: includes/class-bwp-simple-gxs.php:1184
550
- msgid ""
551
- "Maximum is <strong>50,000</strong>. This setting is applied to all sitemaps."
552
- msgstr ""
553
-
554
- #: includes/class-bwp-simple-gxs.php:1189
555
- msgid "Maximum is <strong>50,000</strong>. Set to 0 to use the Global limit."
556
- msgstr ""
557
-
558
- #: includes/class-bwp-simple-gxs.php:1195
559
- msgid ""
560
- "Expect an absolute URL, e.g. <code>http://example.com/my-stylesheet.xsl</"
561
- "code>. You must also have a stylesheet for the sitemapindex that can be "
562
- "accessed through the above URL, e.g. <code>my-stylesheet.xsl</code> and "
563
- "<code>my-stylesheetindex.xsl</code>. Leave blank to use provided stylesheets."
564
- msgstr ""
565
-
566
- #: includes/class-bwp-simple-gxs.php:1206
567
- msgid ""
568
- "Expect an absolute path to the directory where you put your custom modules "
569
- "(e.g. <code>/home/mysite/public_html/gxs-modules/</code>). "
570
- msgstr ""
571
-
572
- #: includes/class-bwp-simple-gxs.php:1210
573
- msgid ""
574
- "Override a built-in module by having a module with the same filename in "
575
- "specified directory."
576
- msgstr ""
577
-
578
- #: includes/class-bwp-simple-gxs.php:1216
579
- msgid "set via constant (BWP_GXS_CACHE_DIR)"
580
- msgstr ""
581
-
582
- #: includes/class-bwp-simple-gxs.php:1218
583
- msgid ""
584
- "Expect an absolute path to a writable directory (i.e. CHMOD to 755 or 777). "
585
- msgstr ""
586
-
587
- #: includes/class-bwp-simple-gxs.php:1221
588
- #, php-format
589
- msgid "Leave empty to use <code>%s</code>."
590
- msgstr ""
591
-
592
- #: includes/class-bwp-simple-gxs.php:1226
593
- msgid ""
594
- "Only get this many items when querying from Database. This is to make sure "
595
- "we are not running too heavy queries."
596
- msgstr ""
597
-
598
- #: includes/class-bwp-simple-gxs.php:1239
599
- msgid ""
600
- "time(s) per day. Increase this limit if you publish a lot of posts in a "
601
- "single day."
602
- msgstr ""
603
-
604
- #: includes/class-bwp-simple-gxs.php:1252
605
- #, php-format
606
- msgid ""
607
- "Submit your <a href=\"%s\" target=\"_blank\">sitemapindex</a> to major "
608
- "search engines like <a href=\"%s\" target=\"_blank\">Google</a>, <a href=\"%s"
609
- "\" target=\"_blank\">Bing</a>."
610
- msgstr ""
611
-
612
- #: includes/class-bwp-simple-gxs.php:1259
613
- #, php-format
614
- msgid ""
615
- "Only the sitemapindex needs to be submitted as search engines will "
616
- "automatically recognize other included sitemaps. More info can be found <a "
617
- "href=\"%s\">here</a>."
618
- msgstr ""
619
-
620
- #: includes/class-bwp-simple-gxs.php:1370
621
- msgid "Add Google News Sitemap to your sitemapindex"
622
- msgstr ""
623
-
624
- #: includes/class-bwp-simple-gxs.php:1371
625
- msgid "Enable news sitemap"
626
- msgstr ""
627
-
628
- #: includes/class-bwp-simple-gxs.php:1372
629
- msgid "Enable keywords support"
630
- msgstr ""
631
-
632
- #: includes/class-bwp-simple-gxs.php:1373
633
- msgid "Get keywords from"
634
- msgstr ""
635
-
636
- #: includes/class-bwp-simple-gxs.php:1374
637
- msgid "Enable multi-category support"
638
- msgstr ""
639
-
640
- #: includes/class-bwp-simple-gxs.php:1375
641
- msgid "Ping search engines when a news article is published"
642
- msgstr ""
643
-
644
- #: includes/class-bwp-simple-gxs.php:1376
645
- msgid "News sitemap's language"
646
- msgstr ""
647
-
648
- #: includes/class-bwp-simple-gxs.php:1377
649
- #: includes/class-bwp-simple-gxs.php:1436
650
- msgid "News categories"
651
- msgstr ""
652
-
653
- #: includes/class-bwp-simple-gxs.php:1378
654
- msgid "The Google News sitemap will"
655
- msgstr ""
656
-
657
- #: includes/class-bwp-simple-gxs.php:1393
658
- msgid ""
659
- "A Google News Sitemap is a file that allows you to control which content you "
660
- "submit to Google News. By creating and submitting a Google News Sitemap, "
661
- "you're able to help Google News discover and crawl your site's news articles "
662
- "&mdash; http://support.google.com/"
663
- msgstr ""
664
-
665
- #: includes/class-bwp-simple-gxs.php:1401
666
- msgid ""
667
- "Below you will be able to choose what categories to use (or not use) in the "
668
- "news sitemap. You can also assign genres to a specific category."
669
- msgstr ""
670
-
671
- #: includes/class-bwp-simple-gxs.php:1407
672
- msgid "below selected categories in the news sitemap."
673
- msgstr ""
674
-
675
- #: includes/class-bwp-simple-gxs.php:1412
676
- msgid "English"
677
- msgstr ""
678
-
679
- #: includes/class-bwp-simple-gxs.php:1413
680
- msgid "Arabic"
681
- msgstr ""
682
-
683
- #: includes/class-bwp-simple-gxs.php:1414
684
- msgid "Chinese (simplified)"
685
- msgstr ""
686
-
687
- #: includes/class-bwp-simple-gxs.php:1415
688
- msgid "Chinese (traditional)"
689
- msgstr ""
690
-
691
- #: includes/class-bwp-simple-gxs.php:1416
692
- msgid "Dutch"
693
- msgstr ""
694
-
695
- #: includes/class-bwp-simple-gxs.php:1417
696
- msgid "French"
697
- msgstr ""
698
-
699
- #: includes/class-bwp-simple-gxs.php:1418
700
- msgid "German"
701
- msgstr ""
702
-
703
- #: includes/class-bwp-simple-gxs.php:1419
704
- msgid "Hebrew"
705
- msgstr ""
706
-
707
- #: includes/class-bwp-simple-gxs.php:1420
708
- msgid "Hindi"
709
- msgstr ""
710
-
711
- #: includes/class-bwp-simple-gxs.php:1421
712
- msgid "Italian"
713
- msgstr ""
714
-
715
- #: includes/class-bwp-simple-gxs.php:1422
716
- msgid "Japanese"
717
- msgstr ""
718
-
719
- #: includes/class-bwp-simple-gxs.php:1423
720
- msgid "Norwegian"
721
- msgstr ""
722
-
723
- #: includes/class-bwp-simple-gxs.php:1424
724
- msgid "Portuguese"
725
- msgstr ""
726
-
727
- #: includes/class-bwp-simple-gxs.php:1425
728
- msgid "Polish"
729
- msgstr ""
730
-
731
- #: includes/class-bwp-simple-gxs.php:1426
732
- msgid "Russian"
733
- msgstr ""
734
-
735
- #: includes/class-bwp-simple-gxs.php:1427
736
- msgid "Spanish"
737
- msgstr ""
738
-
739
- #: includes/class-bwp-simple-gxs.php:1428
740
- msgid "Turkish"
741
- msgstr ""
742
-
743
- #: includes/class-bwp-simple-gxs.php:1429
744
- msgid "Vietnamese"
745
- msgstr ""
746
-
747
- #: includes/class-bwp-simple-gxs.php:1432
748
- msgid "include"
749
- msgstr ""
750
-
751
- #: includes/class-bwp-simple-gxs.php:1433
752
- msgid "exclude"
753
- msgstr ""
754
-
755
- #: includes/class-bwp-simple-gxs.php:1437
756
- msgid "News tags"
757
- msgstr ""
758
-
759
- #: includes/class-bwp-simple-gxs.php:1443
760
- #, php-format
761
- msgid ""
762
- "A <code>post_google_news.xml</code> sitemap will be added to the main <a "
763
- "href=\"%s\" target=\"_blank\">sitemapindex.xml</a>. It is strongly "
764
- "recommended that you take a look at <a href=\"%s\" target=\"_blank"
765
- "\">Google's guidelines</a> before enabling this feature."
766
- msgstr ""
767
-
768
- #: includes/class-bwp-simple-gxs.php:1444
769
- #, php-format
770
- msgid "More info <a href=\"%s\" target=\"_blank\">here</a>."
771
- msgstr ""
772
-
773
- #: includes/class-bwp-simple-gxs.php:1445
774
- msgid ""
775
- "This ping works separately from the sitemapindex ping, and only occurs when "
776
- "you publish an article in one of the news categories set below."
777
- msgstr ""
778
-
779
- #: includes/class-bwp-simple-gxs.php:1446
780
- msgid "Enable this if you have posts assigned to more than one categories."
781
- msgstr ""
782
-
783
- #: includes/class-bwp-simple-gxs.php:1454
784
- msgid "Note"
785
- msgstr ""
786
-
787
- #: includes/class-bwp-simple-gxs.php:1455
788
- msgid ""
789
- "The Google News sitemap is an extension (or sub-module) of the <code>post."
790
- "xml</code> sitemap, which means it also uses posts from the <strong>Post</"
791
- "strong> post type, but only from categories that are selected."
792
- msgstr ""
793
-
794
- #: includes/class-bwp-simple-gxs.php:1506
795
- msgid "Sitemap Generator's Log"
796
- msgstr ""
797
-
798
- #: includes/class-bwp-simple-gxs.php:1514
799
- msgid ""
800
- "Below are details on how your sitemaps are generated including <span style="
801
- "\"color: #999999;\">notices</span>, <span style=\"color: #FF0000;\">errors</"
802
- "span> and <span style=\"color: #009900;\">success messages</span>."
803
- msgstr ""
804
-
805
- #: includes/class-bwp-simple-gxs.php:1520
806
- msgid ""
807
- "Logging is not currently enabled. You can enable this feature by checking "
808
- "\"Enable sitemap log\" in <strong>XML Sitemaps >> Sitemap log & debug</"
809
- "strong>."
810
- msgstr ""
811
-
812
- #: includes/class-bwp-simple-gxs.php:1654
813
- msgid "All options have been saved."
814
- msgstr ""
815
-
816
- #: includes/class-bwp-simple-gxs.php:1679
817
- msgid "Warning"
818
- msgstr ""
819
-
820
- #: includes/class-bwp-simple-gxs.php:1680
821
- #, php-format
822
- msgid ""
823
- "Cache directory (<code>%s</code>) does not exist or is not writable. Please "
824
- "try CHMODing it to either 755 or 777, or disable caching to hide this "
825
- "warning (not recommended)."
826
- msgstr ""
827
-
828
- #: includes/class-bwp-simple-gxs.php:1704
829
- msgid "Save Changes and Flush Cache"
830
- msgstr ""
831
-
832
- #: includes/class-bwp-simple-gxs.php:1706
833
- msgid "Flush Cache"
834
- msgstr ""
835
-
836
- #: includes/class-bwp-simple-gxs.php:1718
837
- msgid "Clear All Logs"
838
- msgstr ""
839
-
840
- #: includes/class-bwp-simple-gxs.php:1778
841
- #, php-format
842
- msgid "<strong>%d</strong> cached sitemaps have been flushed successfully!"
843
- msgstr ""
844
-
845
- #: includes/class-bwp-simple-gxs.php:1789
846
- msgid ""
847
- "Could not delete any cached sitemaps. Please manually check the cache "
848
- "directory."
849
- msgstr ""
850
-
851
- #: includes/class-bwp-simple-gxs.php:1815
852
- msgid "<strong>BWP Google XML Sitemaps Error:</strong> "
853
- msgstr ""
854
-
855
- #: includes/class-bwp-simple-gxs.php:1816
856
- msgid "BWP Google XML Sitemaps Error"
857
- msgstr ""
858
-
859
- #: includes/class-bwp-simple-gxs.php:1837
860
- msgid "Debug extra was on"
861
- msgstr ""
862
-
863
- #: includes/class-bwp-simple-gxs.php:1838
864
- msgid "Debug was on"
865
- msgstr ""
866
-
867
- #: includes/class-bwp-simple-gxs.php:1928
868
- msgid ""
869
- "It appears that no sitemap has been generated yet, or you have recently "
870
- "cleared the sitemap log."
871
- msgstr ""
872
-
873
- #: includes/class-bwp-simple-gxs.php:1931
874
- msgid "No log yet!"
875
- msgstr ""
876
-
877
- #: includes/class-bwp-simple-gxs.php:1940
878
- #, php-format
879
- msgid ""
880
- "<a href=\"%s\" target=\"_blank\">%s</a> was generated on <strong>%s</strong>."
881
- msgstr ""
882
-
883
- #: includes/class-bwp-simple-gxs.php:1945
884
- msgid "Below you can find a list of generated sitemaps:"
885
- msgstr ""
886
-
887
- #: includes/class-bwp-simple-gxs.php:1977
888
- #: includes/class-bwp-simple-gxs.php:2012
889
- msgid "M j, Y : H:i:s"
890
- msgstr ""
891
-
892
- #: includes/class-bwp-simple-gxs.php:2113
893
- msgid "Category's name"
894
- msgstr ""
895
-
896
- #: includes/class-bwp-simple-gxs.php:2114
897
- #, php-format
898
- msgid ""
899
- "<span>Genres used for this category</span> (more info <a href=\"%s\" target="
900
- "\"_blank\">here</a>)"
901
- msgstr ""
902
-
903
- #: includes/class-bwp-simple-gxs.php:2409
904
- #, php-format
905
- msgid ""
906
- "Google news posts that are published within last 48 hours (as per <a href="
907
- "\"%s\" target=\"_blank\">Google's guidelines</a>)"
908
- msgstr ""
909
-
910
- #: includes/class-bwp-simple-gxs.php:2416
911
- msgid "Post"
912
- msgstr ""
913
-
914
- #: includes/class-bwp-simple-gxs.php:2423
915
- msgid "External page"
916
- msgstr ""
917
-
918
- #: includes/class-bwp-simple-gxs.php:2425
919
- msgid "Page"
920
- msgstr ""
921
-
922
- #: includes/class-bwp-simple-gxs.php:2433
923
- msgid "Date archive"
924
- msgstr ""
925
-
926
- #: includes/class-bwp-simple-gxs.php:2437
927
- msgid "Author archive"
928
- msgstr ""
929
-
930
- #: includes/class-bwp-simple-gxs.php:2589
931
- #, php-format
932
- msgid "Successfully served a cached version of <em>%s.xml</em>."
933
- msgstr ""
934
-
935
- #: includes/class-bwp-simple-gxs.php:2617
936
- #, php-format
937
- msgid ""
938
- "Cache directory <strong>%s</strong> is not writable, no cache file was "
939
- "created."
940
- msgstr ""
941
-
942
- #: includes/class-bwp-simple-gxs.php:2630
943
- #, php-format
944
- msgid "Could not write sitemap file to cache directory <strong>%s</strong>"
945
- msgstr ""
946
-
947
- #: includes/class-bwp-simple-gxs.php:2661
948
- #, php-format
949
- msgid ""
950
- "<em>%s.xml</em> will be served using module file <em>%s</em> in the custom "
951
- "module directory."
952
- msgstr ""
953
-
954
- #: includes/class-bwp-simple-gxs.php:2678
955
- #, php-format
956
- msgid "<em>%s.xml</em> will be served using module file <em>%s</em>."
957
- msgstr ""
958
-
959
- #: includes/class-bwp-simple-gxs.php:2685
960
- #, php-format
961
- msgid ""
962
- "<strong>%s</strong> can not be served because of a missing module file: "
963
- "<strong>%s</strong>."
964
- msgstr ""
965
-
966
- #: includes/class-bwp-simple-gxs.php:2770
967
- #, php-format
968
- msgid "Requested sitemap (<em>%s.xml</em>) was not found or not enabled."
969
- msgstr ""
970
-
971
- #: includes/class-bwp-simple-gxs.php:2898
972
- #, php-format
973
- msgid ""
974
- "There is no class named <strong>%s</strong> in the module file <strong>%s</"
975
- "strong>."
976
- msgstr ""
977
-
978
- #: includes/class-bwp-simple-gxs.php:2926
979
- #, php-format
980
- msgid ""
981
- "Successfully generated <em>%s.xml</em> using custom module file <em>%s</em>."
982
- msgstr ""
983
-
984
- #: includes/class-bwp-simple-gxs.php:2927
985
- #, php-format
986
- msgid "Successfully generated <em>%s.xml</em> using module file <em>%s</em>."
987
- msgstr ""
988
-
989
- #: includes/class-bwp-simple-gxs.php:2944
990
- #, php-format
991
- msgid ""
992
- "An unknown error occurred when generating <em>%s</em> using module file <em>"
993
- "%s</em>. Try again later."
994
- msgstr ""
995
-
996
- #: includes/class-bwp-simple-gxs.php:2959
997
- #, php-format
998
- msgid ""
999
- "<em>%s.xml</em> was successfully generated but could not be served properly "
1000
- "because some headers have already been sent (something was printed on line "
1001
- "<strong>%s</strong> in file <strong>%s</strong>)."
1002
- msgstr ""
1003
-
1004
- #: includes/class-bwp-simple-gxs.php:3157
1005
- #, php-format
1006
- msgid "<em>%s.xml</em> does not have any item."
1007
- msgstr ""
1008
-
1009
- #: includes/class-bwp-simple-gxs.php:3163
1010
- msgid ""
1011
- "Enable/disable sitemaps via <em>BWP Sitemaps >> XML Sitemaps >> Sitemaps to "
1012
- "generate</em>."
1013
- msgstr ""
1014
-
1015
- #: includes/class-bwp-simple-gxs.php:3168
1016
- #, php-format
1017
- msgid "There are no public <em>%s</em>."
1018
- msgstr ""
1019
-
1020
- #: includes/class-bwp-simple-gxs.php:3174
1021
- msgid ""
1022
- "Please make sure that you have at least one sitemap enabled in <em>BWP "
1023
- "Sitemaps >> XML Sitemaps >> Sitemaps to generate</em>."
1024
- msgstr ""
1025
-
1026
- #: includes/class-bwp-simple-gxs.php:3508
1027
- msgid "Unknown response code from search engines. Ping failed."
1028
- msgstr ""
1029
-
1030
- #: includes/class-bwp-simple-gxs.php:3513
1031
- #, php-format
1032
- msgid "Pinged <em>%s</em> with <em>%s</em> successfully!"
1033
- msgstr ""
1034
-
1035
- #: includes/class-bwp-simple-gxs.php:3523
1036
- #, php-format
1037
- msgid "<strong>Error %s</strong> from <em>%s</em>."
1038
- msgstr ""
1039
-
1040
- #: includes/class-bwp-simple-gxs.php:3534
1041
- #, php-format
1042
- msgid ""
1043
- "Ping limit for today to <em>%s</em> has been reached, consider increasing "
1044
- "the ping limit via <em>XML Sitemaps >> Ping search engines >> \"Ping limit "
1045
- "for each search engine\"</em>"
1046
- msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
css/bwp-simple-gxs.css DELETED
@@ -1,43 +0,0 @@
1
- * html .bwp-gxs-log {
2
- height: expression( this.scrollHeight > 200 ? "200px" : "auto" );
3
- }
4
- .bwp-gxs-log {
5
- font-size: 0.95em;
6
- background-color: #ffffff;
7
- padding: 5px 10px; padding-top: 0px;
8
- width: 72%;
9
- border: 1px solid #cccccc;
10
- overflow: auto;
11
- }
12
-
13
- .bwp-gxs-log-big {
14
- max-height: 600px;
15
- min-height: 500px;
16
- }
17
-
18
- .bwp-gxs-log-small {
19
- max-height: 200px;
20
- }
21
-
22
- .bwp-table {
23
- width: 100%;
24
- background-color: #f8f8f8;
25
- border: 1px solid #cccccc;
26
- padding: 10px;
27
- }
28
-
29
- .bwp-table th {
30
- text-align: left;
31
- }
32
-
33
- .bwp-table th span {
34
- text-decoration: underline;
35
- }
36
-
37
- .bwp-table td, .bwp-table th {
38
- padding: 3px 7px;
39
- }
40
-
41
- .bwp-table td.bwp_gxs_news_cat_td {
42
- width: 148px;
43
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/bwp-option-page/bwp-option-page.php DELETED
@@ -1,3 +0,0 @@
1
- <?php
2
- if (!is_admin()) return;
3
- require_once(dirname(__FILE__) . '/includes/class-bwp-option-page.php');
 
 
 
includes/bwp-option-page/css/bwp-option-page.css DELETED
@@ -1,176 +0,0 @@
1
- /* For WordPress of older versions */
2
- .nav-tab{
3
- border-style:solid;
4
- border-color:#ccc #ccc #f9f9f9;
5
- border-width:1px 1px 0;
6
- color:#c1c1c1;
7
- text-shadow:rgba(255,255,255,1) 0 1px 0;
8
- font-size:12px;
9
- line-height:16px;
10
- display:inline-block;
11
- padding:4px 14px 6px;
12
- text-decoration:none;
13
- margin:0 3px -1px 0;
14
- /* -moz-border-radius:5px 5px 0 0; */
15
- /* -webkit-border-top-left-radius:5px; */
16
- /* -webkit-border-top-right-radius:5px; */
17
- /* -khtml-border-top-left-radius:5px; */
18
- /* -khtml-border-top-right-radius:5px; */
19
- /* border-top-left-radius:5px; */
20
- /* border-top-right-radius:5px; */
21
- }
22
- .nav-tab-active{
23
- border-width:1px;
24
- border-bottom-color: transparent;
25
- color: #000000;
26
- }
27
- h2.nav-tab-wrapper, h3.nav-tab-wrapper{
28
- border-bottom:1px solid #ccc;
29
- padding-bottom:0;
30
- }
31
- h2 .nav-tab{padding:6px 15px 6px;}
32
-
33
- .bwp-option-page {
34
- margin-top: 1em;
35
- }
36
-
37
- .bwp-option-page p {
38
- margin-top: 0px;
39
- margin-bottom: 0px;
40
- zoom: 1;
41
- }
42
-
43
- .bwp-option-page li.bwp-clear, .bwp-option-page div.bwp-clear {
44
- clear: left;
45
- display: block;
46
- margin: 1em 0 0 0;
47
- zoom: 1;
48
- }
49
-
50
- .bwp-option-page p.submit {
51
- clear: both;
52
- padding-top: 1.5em;
53
- }
54
-
55
- .wrap .bwp-option-page-tabs {
56
- border-bottom: 1px solid #CCCCCC;
57
- padding-bottom: 0px;
58
- margin-bottom: 20px;
59
- }
60
-
61
- .bwp-option-page-tabs a {
62
- font-size: 18px;
63
- line-height: 24px;
64
- font-style: italic;
65
- }
66
-
67
- .bwp-option-page-tabs a.version {
68
- font-size: 14px;
69
- line-height: 14px;
70
- }
71
-
72
- .bwp-opton-page-label {
73
- display: block;
74
- float: left;
75
- width: 200px;
76
- margin: 3px 0 1em 0;
77
- }
78
-
79
- .type-checkbox {
80
- margin-top: 0px;
81
- }
82
-
83
- p.bwp-option-page-inputs {
84
- margin: 0 0 0 220px;
85
- padding: 0;
86
- }
87
-
88
- .bwp-option-page-inputs input {
89
- margin: 0 0 5px 0;
90
- }
91
-
92
- .bwp-option-page-inputs label {
93
- margin: 0;
94
- }
95
-
96
- .bwp-option-page-inputs select {
97
- margin: 1px 0 0 0;
98
- }
99
-
100
- .bwp-option-page-inputs input[type="checkbox"] {
101
- margin-left: 2px;
102
- }
103
-
104
- #icon-betterwp-net {
105
- background: url("betterwp.jpg") no-repeat transparent;
106
- border: 1px solid #E3E3E3;
107
- height: 32px;
108
- width: 32px;
109
- }
110
-
111
- #icon-bwp-plugin {
112
- background-repeat: no-repeat;
113
- background-position: left center;
114
- margin-top: 21px; margin-left: 5px;
115
- width: 36px;
116
- }
117
-
118
- #bwp-info-place {
119
- float: right;
120
- margin: 0 0 10px 10px;
121
- }
122
-
123
- #bwp-donation, #bwp-contact, #bwp-ads {
124
- width: 255px;
125
- padding: 7px; padding-bottom: 0px;
126
- background-color: #ffffff;
127
- border: 1px solid #cccccc;
128
- text-align: center;
129
- }
130
-
131
- #bwp-donation p, #bwp-ads p {
132
- margin: 0.5em 0 1em 0;
133
- }
134
-
135
- #bwp-ads {
136
- padding-bottom: 5px;
137
- }
138
-
139
- #bwp-ads p {
140
- text-decoration: underline;
141
- }
142
-
143
- #bwp-info-place small {
144
- font-size: 0.8em;
145
- }
146
-
147
- #bwp-donation .paypal-submit {
148
- vertical-align: bottom;
149
- display: inline-block;
150
- margin: 0 0 1px 2px;
151
- padding: 0px;
152
- }
153
-
154
- .bwp-separator {
155
- width: 271px;
156
- }
157
-
158
- #bwp-contact {
159
- text-align: left;
160
- padding: 7px;
161
- }
162
-
163
- #bwp-contact a {
164
- display: block;
165
- height: 20px;
166
- font-size: 0.8em;
167
- padding-left: 25px;
168
- }
169
-
170
- #bwp-contact .bwp-rss {
171
- background: transparent url("../images/icon-rss.png") no-repeat left center;
172
- }
173
-
174
- #bwp-contact .bwp-twitter {
175
- background: transparent url("../images/icon-twitter.png") no-repeat left center;
176
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/bwp-option-page/images/ad_250x250.png DELETED
Binary file
includes/bwp-option-page/includes/class-bwp-option-page.php DELETED
@@ -1,630 +0,0 @@
1
- <?php
2
- /**
3
- * Copyright (c) 2014 Khang Minh <betterwp.net>
4
- * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
5
- */
6
-
7
- class BWP_OPTION_PAGE {
8
-
9
- /**
10
- * The form
11
- */
12
- var $form;
13
-
14
- /**
15
- * The form name
16
- */
17
- var $form_name;
18
-
19
- /**
20
- * Tabs to build
21
- */
22
- var $form_tabs;
23
-
24
- /**
25
- * Current tab
26
- */
27
- var $current_tab;
28
-
29
- /**
30
- * This holds the form items, determining the position
31
- */
32
- var $form_items = array();
33
-
34
- /**
35
- * This holds the name for each items (an item can have more than one fields)
36
- */
37
- var $form_item_names = array();
38
-
39
- /**
40
- * This holds the form label
41
- */
42
- var $form_item_labels = array();
43
-
44
- /**
45
- * This holds the form option aka data
46
- */
47
- var $form_options = array(), $site_options = array();
48
-
49
- /**
50
- * Other things
51
- */
52
- var $domain;
53
-
54
- /**
55
- * Constructor
56
- */
57
- function __construct($form_name = 'bwp_option_page', $site_options = array(), $domain = '')
58
- {
59
- $this->form_name = $form_name;
60
- $this->site_options = $site_options;
61
- $this->domain = $domain;
62
- }
63
-
64
- /**
65
- * Init the class
66
- *
67
- * @param array $form The form array that contains everything we need to build the form
68
- * @param array $options The data array that contains all data fetched from db or by default
69
- * @param string $form_name The name of the form, change this if you have more than one forms on a page
70
- */
71
- function init($form = array(), $options = array(), $form_tabs = array())
72
- {
73
- $this->form_items = $form['items'];
74
- $this->form_item_names = $form['item_names'];
75
- $this->form_item_labels = $form['item_labels'];
76
- $this->form = $form;
77
- $this->form_options = $options;
78
- $this->form_tabs = $form_tabs;
79
-
80
- if (sizeof($this->form_tabs) == 0)
81
- $this->form_tabs = array(__('Plugin Configurations', 'bwp-option-page'));
82
- }
83
-
84
- function get_form_name()
85
- {
86
- return $this->form_name;
87
- }
88
-
89
- function set_current_tab($current_tab = 0)
90
- {
91
- $this->current_tab = $current_tab;
92
- }
93
-
94
- function get_options($options = array(), $options_default = array())
95
- {
96
- foreach ($options_default as $key => $option)
97
- {
98
- if (!in_array($key, $options))
99
- unset($options_default[$key]);
100
- }
101
-
102
- return $options_default;
103
- }
104
-
105
- function get_db_options($name = '', $options = array())
106
- {
107
- $db_options = get_option($name);
108
-
109
- if (!$db_options)
110
- {
111
- update_option($name, $options);
112
- }
113
- else if (array_keys($options) != array_keys($db_options))
114
- {
115
- foreach ($db_options as $key => $data)
116
- if (isset($options[$key]) && !in_array($key, $this->site_options))
117
- $options[$key] = $data;
118
-
119
- update_option($name, $options);
120
- }
121
- else
122
- {
123
- foreach ($db_options as $key => $data)
124
- {
125
- if (!in_array($key, $this->site_options))
126
- $options[$key] = $data;
127
- }
128
- }
129
-
130
- return $options;
131
- }
132
-
133
- function format_field($key, $option_formats)
134
- {
135
- if (!empty($option_formats[$key]))
136
- {
137
- if ('int' == $option_formats[$key])
138
- $_POST[$key] = (int) $_POST[$key];
139
- else if ('float' == $option_formats[$key])
140
- $_POST[$key] = (float) $_POST[$key];
141
- else if ('html' == $option_formats[$key])
142
- $_POST[$key] = wp_filter_post_kses($_POST[$key]);
143
- }
144
- else
145
- $_POST[$key] = strip_tags($_POST[$key]);
146
- }
147
-
148
- function kill_html_fields(&$form, $names)
149
- {
150
- $ids = array();
151
- $names = (array) $names;
152
-
153
- foreach ($this->form_item_names as $key => $name)
154
- {
155
- if (in_array($name, $names))
156
- $ids[] = $key;
157
- }
158
-
159
- $in_keys = array(
160
- 'items',
161
- 'item_labels',
162
- 'item_names'
163
- );
164
-
165
- foreach ($ids as $id)
166
- {
167
- foreach ($in_keys as $key)
168
- unset($form[$key][$id]);
169
- }
170
- }
171
-
172
- /**
173
- * Generate HTML field
174
- */
175
- function generate_html_field($type = '', $data = array(), $name = '', $in_section = false)
176
- {
177
- $pre_html_field = '';
178
- $post_html_field = '';
179
-
180
- $checked = 'checked="checked" ';
181
- $selected = 'selected="selected" ';
182
-
183
- $value = isset($this->form_options[$name])
184
- ? $this->form_options[$name]
185
- : '';
186
-
187
- $value = isset($data['value']) ? $data['value'] : $value;
188
-
189
- $value = !empty($this->domain)
190
- && ('textarea' == $type || 'input' == $type)
191
- ? __($value, $this->domain)
192
- : $value;
193
-
194
- if (is_array($value))
195
- {
196
- foreach ($value as &$v)
197
- $v = is_array($v) ? array_map('esc_attr', $v) : esc_attr($v);
198
- }
199
- else
200
- {
201
- $value = 'textarea' == $type
202
- ? esc_html($value)
203
- : esc_attr($value);
204
- }
205
-
206
- $array_replace = array();
207
- $array_search = array(
208
- 'size',
209
- 'name',
210
- 'value',
211
- 'cols',
212
- 'rows',
213
- 'label',
214
- 'disabled',
215
- 'pre',
216
- 'post'
217
- );
218
-
219
- $return_html = '';
220
-
221
- $br = isset($this->form['inline_fields'][$name])
222
- && is_array($this->form['inline_fields'][$name])
223
- ? ''
224
- : "<br />\n";
225
-
226
- $pre = !empty($data['pre']) ? $data['pre'] : '';
227
- $post = !empty($data['post']) ? $data['post'] : '';
228
-
229
- $param = empty($this->form['params'][$name])
230
- ? false : $this->form['params'][$name];
231
-
232
- switch ($type)
233
- {
234
- case 'heading':
235
- $html_field = '%s';
236
- break;
237
-
238
- case 'input':
239
- $html_field = !$in_section
240
- ? '%pre%<input%disabled% size="%size%" type="text" '
241
- . 'id="' . $name . '" '
242
- . 'name="' . $name . '" '
243
- . 'value="' . $value . '" /> <em>%label%</em>'
244
- : '<label for="' . $name . '">%pre%<input%disabled% size="%size%" type="text" '
245
- . 'id="' . $name . '" '
246
- . 'name="' . $name . '" '
247
- . 'value="' . $value . '" /> <em>%label%</em></label>';
248
- break;
249
-
250
- case 'select':
251
- case 'select_multi':
252
- $pre_html_field = 'select_multi' == $type
253
- ? '%pre%<select id="' . $name . '" name="' . $name . '[]" multiple>' . "\n"
254
- : '%pre%<select id="' . $name . '" name="' . $name . '">' . "\n";
255
-
256
- $html_field = '<option %selected%value="%value%">%option%</option>';
257
-
258
- $post_html_field = '</select>%post%' . $br;
259
- break;
260
-
261
- case 'checkbox':
262
- $html_field = '<label for="%name%">'
263
- . '<input %checked%type="checkbox" id="%name%" name="%name%" value="yes" /> %label%</label>';
264
- break;
265
-
266
- case 'checkbox_multi':
267
- $html_field = '<label for="%name%-%value%">'
268
- . '<input %checked%type="checkbox" id="%name%-%value%" name="%name%[]" value="%value%" /> %label%</label>';
269
- break;
270
-
271
- case 'radio':
272
- $html_field = '<label>' . '<input %checked%type="radio" '
273
- . 'name="' . $name . '" value="%value%" /> %label%</label>';
274
- break;
275
-
276
- case 'textarea':
277
- $html_field = '%pre%<textarea%disabled% '
278
- . 'id="' . $name . '" '
279
- . 'name="' . $name . '" cols="%cols%" rows="%rows%">'
280
- . $value . '</textarea>%post%';
281
- break;
282
- }
283
-
284
- if (!isset($data))
285
- return;
286
-
287
- if ($type == 'heading' && !is_array($data))
288
- {
289
- $return_html .= sprintf($html_field, $data) . $br;
290
- }
291
- else if ($type == 'radio'
292
- || $type == 'checkbox' || $type == 'checkbox_multi'
293
- || $type == 'select' || $type == 'select_multi'
294
- ) {
295
- foreach ($data as $key => $value)
296
- {
297
- if ($type == 'checkbox')
298
- {
299
- // handle checkbox a little bit differently
300
- if ($this->form_options[$value] == 'yes')
301
- {
302
- $return_html .= str_replace(
303
- array('%value%', '%name%', '%label%', '%checked%'),
304
- array($value, $value, $key, $checked),
305
- $html_field
306
- );
307
-
308
- $return_html .= apply_filters('bwp_option_after_' . $type . '_' . $name . '_checked', '', $value, $param);
309
- $return_html .= $br;
310
- }
311
- else
312
- {
313
- $return_html .= str_replace(
314
- array('%value%', '%name%', '%label%', '%checked%'),
315
- array($value, $value, $key, ''),
316
- $html_field
317
- );
318
-
319
- $return_html .= apply_filters('bwp_option_after_' . $type . '_' . $name, '', $value, $param);
320
- $return_html .= $br;
321
- }
322
- }
323
- else if ($type == 'checkbox_multi')
324
- {
325
- // handle a multi checkbox differently
326
- if (isset($this->form_options[$name])
327
- && is_array($this->form_options[$name])
328
- && (in_array($value, $this->form_options[$name])
329
- || array_key_exists($value, $this->form_options[$name]))
330
- ) {
331
- $return_html .= str_replace(
332
- array('%value%', '%name%', '%label%', '%checked%'),
333
- array($value, $name, $key, $checked),
334
- $html_field
335
- );
336
-
337
- $return_html .= apply_filters('bwp_option_after_' . $type . '_' . $name . '_checked', '', $value, $param);
338
- $return_html .= $br;
339
- }
340
- else
341
- {
342
- $return_html .= str_replace(
343
- array('%value%', '%name%', '%label%', '%checked%'),
344
- array($value, $name, $key, ''),
345
- $html_field
346
- );
347
-
348
- $return_html .= apply_filters('bwp_option_after_' . $type . '_' . $name, '', $value, $param);
349
- $return_html .= $br;
350
- }
351
- }
352
- else if (isset($this->form_options[$name])
353
- && ($this->form_options[$name] == $value
354
- || (is_array($this->form_options[$name])
355
- && (in_array($value, $this->form_options[$name])
356
- || array_key_exists($value, $this->form_options[$name]))))
357
- ) {
358
- $item_br = $type == 'select' || $type == 'select_multi' ? "\n" : $br;
359
-
360
- $return_html .= str_replace(
361
- array('%value%', '%name%', '%label%', '%option%', '%checked%', '%selected%', '%pre%', '%post%'),
362
- array($value, $value, $key, $key, $checked, $selected, $pre, $post),
363
- $html_field
364
- ) . $item_br;
365
- }
366
- else
367
- {
368
- $item_br = $type == 'select' || $type == 'select_multi' ? "\n" : $br;
369
-
370
- $return_html .= str_replace(
371
- array('%value%', '%name%', '%label%', '%option%', '%checked%', '%selected%', '%pre%', '%post%'),
372
- array($value, $value, $key, $key, '', '', $pre, $post),
373
- $html_field
374
- ) . $item_br;
375
- }
376
- }
377
- }
378
- else
379
- {
380
- foreach ($array_search as &$keyword)
381
- {
382
- $array_replace[$keyword] = '';
383
-
384
- if (!empty($data[$keyword]))
385
- {
386
- $array_replace[$keyword] = $data[$keyword];
387
- }
388
-
389
- $keyword = '%' . $keyword . '%';
390
- }
391
-
392
- $return_html = str_replace($array_search, $array_replace, $html_field) . $br;
393
- }
394
-
395
- // inline fields
396
- $inline_html = '';
397
- if (isset($this->form['inline_fields'][$name]) && is_array($this->form['inline_fields'][$name]))
398
- {
399
- foreach ($this->form['inline_fields'][$name] as $field => $field_type)
400
- {
401
- if (isset($this->form[$field_type][$field]))
402
- $inline_html = ' ' . $this->generate_html_field($field_type, $this->form[$field_type][$field], $field, $in_section);
403
- }
404
- }
405
-
406
- // html after field
407
- $post = !empty($this->form['post'][$name])
408
- ? ' ' . $this->form['post'][$name]
409
- : $post;
410
-
411
- return str_replace('%pre%', $pre, $pre_html_field) . $return_html . str_replace('%post%', $post, $post_html_field) . $inline_html;
412
- }
413
-
414
- /**
415
- * Generate HTML fields
416
- *
417
- * @params they explain themselves
418
- */
419
- function generate_html_fields($type, $name)
420
- {
421
- $item_label = '';
422
- $return_html = '';
423
-
424
- $item_key = array_keys($this->form_item_names, $name);
425
-
426
- $input_class = $type == 'heading'
427
- ? 'bwp-option-page-heading-desc'
428
- : 'bwp-option-page-inputs';
429
-
430
- // an inline item can hold any HTML markup, example is to display some
431
- // kinds of button right be low the label
432
- $inline = '';
433
-
434
- if (isset($this->form['inline']) && is_array($this->form['inline'])
435
- && array_key_exists($name, $this->form['inline'])
436
- ) {
437
- $inline = empty($this->form['inline'][$name]) ? '' : $this->form['inline'][$name];
438
- }
439
-
440
- $inline .= "\n";
441
-
442
- switch ($type)
443
- {
444
- case 'section':
445
- if (!isset($this->form[$name]) || !is_array($this->form[$name]))
446
- return;
447
-
448
- $item_label = '<span class="bwp-opton-page-label">'
449
- . $this->form_item_labels[$item_key[0]]
450
- . $inline
451
- . '</span>';
452
-
453
- foreach ($this->form[$name] as $section_field)
454
- {
455
- $type = $section_field[0];
456
- $name = $section_field['name'];
457
-
458
- if (isset($this->form[$section_field[0]]))
459
- {
460
- $return_html .= $this->generate_html_field($section_field[0], $this->form[$type][$name], $name, true);
461
- }
462
- }
463
- break;
464
-
465
- default:
466
- if (!isset($this->form[$type][$name])
467
- || ($type != 'heading' && !is_array($this->form[$type][$name])))
468
- return;
469
-
470
- $item_label = $type != 'checkbox' && $type != 'checkbox_multi' && $type != 'radio'
471
- ? '<label class="bwp-opton-page-label" for="' . $name . '">'
472
- . $this->form_item_labels[$item_key[0]] . $inline
473
- . '</label>'
474
- : '<span class="bwp-opton-page-label type-' . $type . '">'
475
- . $this->form_item_labels[$item_key[0]] . $inline
476
- . '</span>';
477
-
478
- $item_label = $type == 'heading'
479
- ? '<h3>' . $this->form_item_labels[$item_key[0]] . '</h3>' . $inline
480
- : $item_label;
481
-
482
- if (isset($this->form[$type]))
483
- $return_html = $this->generate_html_field($type, $this->form[$type][$name], $name);
484
- break;
485
- }
486
-
487
- // a container can hold some result executed by customized script,
488
- // such as displaying something when user press the submit button
489
- $containers = '';
490
-
491
- if (isset($this->form['container'])
492
- && is_array($this->form['container'])
493
- && array_key_exists($name, $this->form['container'])
494
- ) {
495
- $container_array = (array) $this->form['container'][$name];
496
-
497
- foreach ($container_array as $container)
498
- {
499
- $containers .= empty($container)
500
- ? '<div style="display: none;"><!-- --></div>'
501
- : '<div class="bwp-clear">' . $container . '</div>' . "\n";
502
- }
503
- }
504
-
505
- $pure_return = trim(strip_tags($return_html));
506
-
507
- if (empty($pure_return) && $type == 'heading')
508
- {
509
- return $item_label . $containers;
510
- }
511
- else
512
- {
513
- return $item_label . '<p class="' . $input_class . '">'
514
- . $return_html . '</p>'
515
- . $containers;
516
- }
517
- }
518
-
519
- /**
520
- * Generate HTML form
521
- *
522
- * @see Constructor
523
- */
524
- function generate_html_form()
525
- {
526
- $return_str = '<div class="wrap" style="padding-bottom: 20px;">' . "\n";
527
-
528
- if (sizeof($this->form_tabs) >= 2)
529
- $return_str .= apply_filters('bwp-admin-form-icon', '<div class="icon32" id="icon-options-general"><br></div>' . "\n");
530
- else
531
- $return_str .= '<div class="icon32" id="icon-options-general"><br></div>';
532
-
533
- if (sizeof($this->form_tabs) >= 2)
534
- {
535
- $count = 0;
536
-
537
- $return_str .= '<h2 class="bwp-option-page-tabs">' . "\n";
538
- $return_str .= apply_filters('bwp-admin-plugin-version', '') . "\n";
539
-
540
- foreach ($this->form_tabs as $title => $link)
541
- {
542
- $count++;
543
-
544
- $active = $count == $this->current_tab ? ' nav-tab-active' : '';
545
- $return_str .= '<a class="nav-tab' . $active . '" href="' . $link . '">' . $title . '</a>' . "\n";
546
- }
547
-
548
- $return_str .= '</h2>' . "\n";
549
- }
550
- else if (!isset($this->form_tabs[0]))
551
- {
552
- $title = array_keys($this->form_tabs);
553
- $return_str .= '<h2>' . $title[0] . '</h2>' . "\n";
554
- }
555
- else
556
- $return_str .= '<h2>' . $this->form_tabs[0] . '</h2>' . "\n";
557
-
558
- $return_str .= apply_filters('bwp_option_before_form', '');
559
- echo $return_str;
560
-
561
- do_action('bwp_option_action_before_form');
562
-
563
- $return_str = '';
564
- $return_str .= '<form class="bwp-option-page" name="' . $this->form_name . '" method="post" action="">' . "\n";
565
-
566
- if (function_exists('wp_nonce_field'))
567
- {
568
- echo $return_str;
569
-
570
- wp_nonce_field($this->form_name);
571
-
572
- $return_str = '';
573
- }
574
-
575
- $return_str .= '<ul>' . "\n";
576
-
577
- // generate filled form
578
- if (isset($this->form_items) && is_array($this->form_items))
579
- {
580
- foreach ($this->form_items as $key => $type)
581
- {
582
- $name = !empty($this->form_item_names[$key])
583
- ? $this->form_item_names[$key]
584
- : '';
585
-
586
- if (isset($this->form['env'])
587
- && !BWP_FRAMEWORK_IMPROVED::is_multisite()
588
- && array_key_exists($name, $this->form['env'])
589
- && $this->form['env'][$name] == 'multisite')
590
- {
591
- // hide multisite field if not in multisite environment
592
- continue;
593
- }
594
-
595
- if (isset($this->form['role'])
596
- && BWP_FRAMEWORK_IMPROVED::is_normal_admin()
597
- && array_key_exists($name, $this->form['role'])
598
- && $this->form['role'][$name] == 'superadmin')
599
- {
600
- // hide superadmin-only fields if user is normal admin
601
- continue;
602
- }
603
-
604
- if (!empty($name) && !empty($this->form_item_labels[$key])
605
- ) {
606
- $return_str .= '<li class="bwp-clear">'
607
- . $this->generate_html_fields($type, $name)
608
- . '</li>'
609
- . "\n";
610
- }
611
- }
612
- }
613
-
614
- $return_str .= '</ul>' . "\n";
615
- $return_str .= apply_filters('bwp_option_before_submit_button', '');
616
-
617
- echo $return_str;
618
- do_action('bwp_option_action_before_submit_button');
619
-
620
- $return_str = '';
621
- $return_str .= apply_filters('bwp_option_submit_button',
622
- '<p class="submit"><input type="submit" class="button-primary" name="submit_'
623
- . $this->form_name . '" value="' . __('Save Changes') . '" /></p>') . "\n";
624
-
625
- $return_str .= '</form>' . "\n";
626
- $return_str .= '</div>' . "\n";
627
-
628
- echo $return_str;
629
- }
630
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/bwp-option-page/includes/index.php DELETED
@@ -1,3 +0,0 @@
1
- <?php
2
- // White page
3
- ?>
 
 
 
includes/bwp-option-page/index.php DELETED
@@ -1,3 +0,0 @@
1
- <?php
2
- // White page
3
- ?>
 
 
 
includes/bwp-option-page/js/paypal.js DELETED
@@ -1,11 +0,0 @@
1
- jQuery(document).ready(function(){
2
- /* Paypal form */
3
- jQuery('.paypal-form select[name="amount"]').change(function() {
4
- if (jQuery(this).val() == '100.00')
5
- {
6
- jQuery(this).hide();
7
- jQuery('.paypal-alternate-input').append('<input type="text" style="padding: 3px; width: 70px; text-align: right; line-height: 1;" name="amount" value="15.00" /> <code>$</code>');
8
- jQuery('.paypal-alternate-input').show();
9
- }
10
- });
11
- });
 
 
 
 
 
 
 
 
 
 
 
includes/class-bwp-framework-improved.php DELETED
@@ -1,733 +0,0 @@
1
- <?php
2
- /**
3
- * Copyright (c) 2014 Khang Minh <betterwp.net>
4
- * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
5
- */
6
-
7
- class BWP_FRAMEWORK_IMPROVED
8
- {
9
- /**
10
- * Database related data
11
- */
12
- var $options = array();
13
-
14
- /**
15
- * Default data
16
- */
17
- var $options_default = array(), $site_options = array();
18
-
19
- /**
20
- * Hold db option keys
21
- */
22
- var $option_keys = array();
23
-
24
- /**
25
- * Hold extra option keys
26
- */
27
- var $extra_option_keys = array();
28
-
29
- /**
30
- * Hold old option pages
31
- */
32
- var $option_pages = array();
33
-
34
- /**
35
- * Key to identify plugin
36
- */
37
- var $plugin_key;
38
-
39
- /**
40
- * Constant Key to identify plugin
41
- */
42
- var $plugin_ckey;
43
-
44
- /**
45
- * Domain Key to identify plugin
46
- */
47
- var $plugin_dkey;
48
-
49
- /**
50
- * Title of the plugin
51
- */
52
- var $plugin_title;
53
-
54
- /**
55
- * Homepage of the plugin
56
- */
57
- var $plugin_url;
58
-
59
- /**
60
- * Urls to various parts of homepage or other places
61
- *
62
- * Expect to have a format of array('relative' => bool, 'url' => url)
63
- */
64
- var $urls = array();
65
-
66
- /**
67
- * Plugin file
68
- */
69
- var $plugin_file;
70
-
71
- /**
72
- * Plugin folder
73
- */
74
- var $plugin_folder;
75
-
76
- /**
77
- * Plugin WP url
78
- */
79
- var $plugin_wp_url;
80
-
81
- /**
82
- * Version of the plugin
83
- */
84
- var $plugin_ver = '';
85
-
86
- /**
87
- * Message shown to user (Warning, Notes, etc.)
88
- */
89
- var $notices = array(), $notice_shown = false;
90
-
91
- /**
92
- * Error shown to user
93
- */
94
- var $errors = array(), $error_shown = false;
95
-
96
- /**
97
- * Capabilities to manage this plugin
98
- */
99
- var $plugin_cap = 'manage_options';
100
-
101
- /**
102
- * Whether or not to create filter for media paths
103
- */
104
- var $need_media_filters;
105
-
106
- /**
107
- * Form tabs to build
108
- */
109
- var $form_tabs = array();
110
-
111
- /**
112
- * Other things
113
- */
114
- var $wp_ver = '3.0';
115
- var $php_ver = '5';
116
- var $domain = '';
117
-
118
- /**
119
- * Other special variables
120
- */
121
- protected $_menu_under_settings = false;
122
- protected $_simple_menu = false;
123
-
124
- /**
125
- * Build base properties
126
- */
127
- protected function build_properties($key, $dkey, $options, $plugin_title = '',
128
- $plugin_file = '', $plugin_url = '', $need_media_filters = true)
129
- {
130
- $this->plugin_key = strtolower($key);
131
- $this->plugin_ckey = strtoupper($key);
132
- $this->plugin_dkey = $dkey;
133
- $this->plugin_title = $plugin_title;
134
- $this->plugin_url = $plugin_url;
135
-
136
- $this->options_default = $options;
137
- $this->need_media_filters = (boolean) $need_media_filters;
138
-
139
- $this->plugin_file = $plugin_file;
140
- $this->plugin_folder = basename(dirname($plugin_file));
141
-
142
- $this->pre_init_actions();
143
- $this->init_actions();
144
-
145
- // Load locale
146
- load_plugin_textdomain($dkey, false, $this->plugin_folder . '/languages');
147
- }
148
-
149
- protected function add_option_key($key, $option, $title)
150
- {
151
- $this->option_keys[$key] = $option;
152
- $this->option_pages[$key] = $title;
153
- }
154
-
155
- protected function add_extra_option_key($key, $option, $title)
156
- {
157
- $this->extra_option_keys[$key] = $option;
158
- $this->option_pages[$key] = $title;
159
- }
160
-
161
- public function add_icon()
162
- {
163
- return '<div class="icon32" id="icon-bwp-plugin" '
164
- . 'style=\'background-image: url("'
165
- . constant($this->plugin_ckey . '_IMAGES')
166
- . '/icon_menu_32.png");\'><br></div>' . "\n";
167
- }
168
-
169
- protected function set_version($ver = '', $type = '')
170
- {
171
- switch ($type)
172
- {
173
- case '': $this->plugin_ver = $ver;
174
- break;
175
- case 'php': $this->php_ver = $ver;
176
- break;
177
- case 'wp': $this->wp_ver = $ver;
178
- break;
179
- }
180
- }
181
-
182
- protected function get_version($type = '')
183
- {
184
- switch ($type)
185
- {
186
- case '': return $this->plugin_ver;
187
- break;
188
- case 'php': return $this->php_ver;
189
- break;
190
- case 'wp': return $this->wp_ver;
191
- break;
192
- }
193
- }
194
-
195
- protected function check_required_versions()
196
- {
197
- if (version_compare(PHP_VERSION, $this->php_ver, '<')
198
- || version_compare(get_bloginfo('version'), $this->wp_ver, '<')
199
- ) {
200
- add_action('admin_notices', array($this, 'warn_required_versions'));
201
- add_action('network_admin_notices', array($this, 'warn_required_versions'));
202
- return false;
203
- }
204
- else
205
- return true;
206
- }
207
-
208
- public function warn_required_versions()
209
- {
210
- echo '<div class="error"><p>' . sprintf(
211
- __('%s requires WordPress <strong>%s</strong> or higher '
212
- . 'and PHP <strong>%s</strong> or higher. '
213
- . 'The plugin will not protected function until you update your software. '
214
- . 'Please deactivate this plugin.', $this->plugin_dkey),
215
- $this->plugin_title, $this->wp_ver, $this->php_ver)
216
- . '</p></div>';
217
- }
218
-
219
- public function show_donation()
220
- {
221
- $info_showable = apply_filters('bwp_info_showable', true);
222
- $donation_showable = apply_filters('bwp_donation_showable', true);
223
- $ad_showable = apply_filters('bwp_ad_showable', true);
224
-
225
- if (true == $info_showable || (self::is_multisite() && is_super_admin()))
226
- {
227
- ?>
228
- <div id="bwp-info-place">
229
- <div id="bwp-donation" style="margin-bottom: 0px;">
230
- <a href="<?php echo $this->plugin_url; ?>"><?php echo $this->plugin_title; ?></a> <small>v<?php echo $this->plugin_ver; ?></small><br />
231
- <small>
232
- <a href="<?php echo str_replace('/wordpress-plugins/', '/topic/', $this->plugin_url); ?>"><?php _e('Development Log', $this->plugin_dkey); ?></a> &ndash; <a href="<?php echo $this->plugin_url . 'faq/'; ?>" title="<?php _e('Frequently Asked Questions', $this->plugin_dkey) ?>"><?php _e('FAQ', $this->plugin_dkey); ?></a> &ndash; <a href="http://betterwp.net/contact/" title="<?php _e('Got a problem? Send me a feedback!', $this->plugin_dkey) ?>"><?php _e('Contact', $this->plugin_dkey); ?></a>
233
- </small>
234
- <br />
235
- <?php
236
- if (true == $donation_showable || (self::is_multisite() && is_super_admin()))
237
- {
238
- ?>
239
- <small><?php _e('You can buy me some special coffees if you appreciate my work, thank you!', $this->plugin_dkey); ?></small>
240
- <form class="paypal-form" action="https://www.paypal.com/cgi-bin/webscr" method="post">
241
- <p>
242
- <input type="hidden" name="cmd" value="_xclick">
243
- <input type="hidden" name="business" value="NWBB8JUDW5VSY">
244
- <input type="hidden" name="lc" value="VN">
245
- <input type="hidden" name="button_subtype" value="services">
246
- <input type="hidden" name="no_note" value="0">
247
- <input type="hidden" name="cn" value="Would you like to say anything to me?">
248
- <input type="hidden" name="no_shipping" value="1">
249
- <input type="hidden" name="rm" value="1">
250
- <input type="hidden" name="return" value="http://betterwp.net">
251
- <input type="hidden" name="currency_code" value="USD">
252
- <input type="hidden" name="bn" value="PP-BuyNowBF:icon-paypal.gif:NonHosted">
253
- <input type="hidden" name="item_name" value="<?php printf(__('Donate to %s', $this->plugin_dkey), $this->plugin_title); ?>" />
254
- <select name="amount">
255
- <option value="5.00"><?php _e('One cup $5.00', $this->plugin_dkey); ?></option>
256
- <option value="10.00"><?php _e('Two cups $10.00', $this->plugin_dkey); ?></option>
257
- <option value="25.00"><?php _e('Five cups! $25.00', $this->plugin_dkey); ?></option>
258
- <option value="50.00"><?php _e('One LL-cup!!! $50.00', $this->plugin_dkey); ?></option>
259
- <option value="100.00"><?php _e('... or any amount!', $this->plugin_dkey); ?></option>
260
- </select>
261
- <span class="paypal-alternate-input" style="display: none;"><!-- --></span>
262
- <input class="paypal-submit" type="image" src="<?php echo $this->plugin_wp_url . 'includes/bwp-option-page/images/icon-paypal.gif'; ?>" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!" />
263
- <img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
264
- </p>
265
- </form>
266
- <?php
267
- }
268
- ?>
269
- </div>
270
- <div class="bwp-separator">
271
- <div style="height: 10px; width: 5px; background-color: #cccccc; margin: 0 auto;"><!-- --></div>
272
- </div>
273
- <div id="bwp-contact">
274
- <a class="bwp-rss" href="http://feeds.feedburner.com/BetterWPnet"><?php _e('Latest updates from BetterWP.net!', $this->plugin_dkey); ?></a>
275
- <a class="bwp-twitter" href="http://twitter.com/0dd0ne0ut"><?php _e('Follow me on Twitter!', $this->plugin_dkey); ?></a>
276
- </div>
277
- <?php
278
- if (true == $ad_showable)
279
- {
280
- ?>
281
- <div class="bwp-separator">
282
- <div style="height: 10px; width: 5px; background-color: #cccccc; margin: 0 auto;"><!-- --></div>
283
- </div>
284
- <div id="bwp-ads">
285
- <p><strong><?php _e('This Plugin is Proudly Sponsored By', $this->plugin_dkey); ?></strong></p>
286
- <div style="width: 250px; margin: 0 auto;">
287
- <a href="http://bit.ly/<?php echo $this->plugin_dkey; ?>-mwp" target="_blank">
288
- <img src="<?php echo $this->plugin_wp_url . 'includes/bwp-option-page/images/ad_250x250.png'; ?>" />
289
- </a>
290
- </div>
291
- </div>
292
- <?php
293
- }
294
- ?>
295
- </div>
296
- <?php
297
- }
298
- }
299
-
300
- public function show_version()
301
- {
302
- if (empty($this->plugin_ver)) return '';
303
-
304
- return '<a class="nav-tab version" title="'
305
- . sprintf(esc_attr(__('You are using version %s!', $this->plugin_dkey)), $this->plugin_ver)
306
- . '">' . $this->plugin_ver . '</a>';
307
- }
308
-
309
- protected function pre_init_actions()
310
- {
311
- $this->pre_init_build_constants();
312
- $this->pre_init_build_options();
313
- $this->pre_init_properties();
314
- $this->load_libraries();
315
- $this->pre_init_hooks();
316
- $this->pre_init_update_plugin();
317
-
318
- // Support installation and uninstallation
319
- register_activation_hook($this->plugin_file, array($this, 'install'));
320
- register_deactivation_hook($this->plugin_file, array($this, 'uninstall'));
321
- }
322
-
323
- protected function init_actions()
324
- {
325
- add_action('init', array($this, 'build_wp_properties'));
326
- add_action('init', array($this, 'init'));
327
-
328
- // register backend hooks
329
- add_action('admin_menu', array($this, 'init_admin'), 1);
330
- }
331
-
332
- public function init()
333
- {
334
- do_action($this->plugin_key . '_pre_init');
335
-
336
- $this->init_update_plugin();
337
- $this->build_constants();
338
- $this->build_options();
339
- $this->init_properties();
340
- $this->init_hooks();
341
- $this->enqueue_media();
342
-
343
- do_action($this->plugin_key . '_loaded');
344
-
345
- // icon 32px
346
- if ($this->is_admin_page())
347
- {
348
- add_filter('bwp-admin-form-icon', array($this, 'add_icon'));
349
- add_filter('bwp-admin-plugin-version', array($this, 'show_version'));
350
- add_action('bwp_option_action_before_form', array($this, 'show_donation'), 12);
351
- }
352
- }
353
-
354
- protected function add_cap($cap)
355
- {
356
- $this->plugin_cap = $cap;
357
- }
358
-
359
- public function build_wp_properties()
360
- {
361
- // set the plugin WP url here so it can be filtered
362
- if (defined('BWP_USE_SYMLINKS'))
363
- // make use of symlinks on development environment
364
- $this->plugin_wp_url = trailingslashit(plugins_url($this->plugin_folder));
365
- else
366
- // this should allow other package to include BWP plugins while
367
- // retaining correct URLs pointing to assets
368
- $this->plugin_wp_url = trailingslashit(plugin_dir_url($this->plugin_file));
369
- }
370
-
371
- protected function pre_init_build_constants()
372
- {
373
- // url to plugin bwp website
374
- define($this->plugin_ckey . '_PLUGIN_URL', $this->plugin_url);
375
- // the capability needed to configure this plugin
376
- define($this->plugin_ckey . '_CAPABILITY', $this->plugin_cap);
377
-
378
- // define registered option keys, to be used when building option pages
379
- // and build options
380
- foreach ($this->option_keys as $key => $option)
381
- {
382
- define(strtoupper($key), $option);
383
- }
384
- foreach ($this->extra_option_keys as $key => $option)
385
- {
386
- define(strtoupper($key), $option);
387
- }
388
- }
389
-
390
- protected function build_constants()
391
- {
392
- // these constants are only available once plugin_wp_url is available
393
- if (true == $this->need_media_filters)
394
- {
395
- define($this->plugin_ckey . '_IMAGES',
396
- apply_filters($this->plugin_key . '_image_path',
397
- $this->plugin_wp_url . 'images'));
398
- define($this->plugin_ckey . '_CSS',
399
- apply_filters($this->plugin_key . '_css_path',
400
- $this->plugin_wp_url . 'css'));
401
- define($this->plugin_ckey . '_JS',
402
- apply_filters($this->plugin_key . '_js_path',
403
- $this->plugin_wp_url . 'js'));
404
- }
405
- else
406
- {
407
- define($this->plugin_ckey . '_IMAGES', $this->plugin_wp_url . 'images');
408
- define($this->plugin_ckey . '_CSS', $this->plugin_wp_url . 'css');
409
- define($this->plugin_ckey . '_JS', $this->plugin_wp_url . 'js');
410
- }
411
- }
412
-
413
- protected function pre_init_build_options()
414
- {
415
- $this->build_options();
416
- }
417
-
418
- protected function build_options()
419
- {
420
- // Get all options and merge them
421
- $options = $this->options_default;
422
- foreach ($this->option_keys as $option)
423
- {
424
- $db_option = get_option($option);
425
- if ($db_option && is_array($db_option))
426
- $options = array_merge($options, $db_option);
427
- unset($db_option);
428
- // Also check for global options if in Multi-site
429
- if (self::is_multisite())
430
- {
431
- $db_option = get_site_option($option);
432
- if ($db_option && is_array($db_option))
433
- {
434
- $temp = array();
435
- foreach ($db_option as $k => $o)
436
- {
437
- if (in_array($k, $this->site_options))
438
- $temp[$k] = $o;
439
- }
440
- $options = array_merge($options, $temp);
441
- }
442
- }
443
- }
444
- $this->options = $options;
445
- }
446
-
447
- protected function pre_init_properties()
448
- {
449
- /* intentionally left blank */
450
- }
451
-
452
- protected function init_properties()
453
- {
454
- /* intentionally left blank */
455
- }
456
-
457
- protected function load_libraries()
458
- {
459
- /* intentionally left blank */
460
- }
461
-
462
- protected function update_plugin($when = '')
463
- {
464
- if (!is_admin())
465
- return;
466
-
467
- $current_version = $this->plugin_ver;
468
- $db_version = get_option($this->plugin_key . '_version');
469
-
470
- $action_hook = 'pre_init' == $when
471
- ? $this->plugin_key . '_upgrade'
472
- : $this->plugin_key . '_init_upgrade';
473
-
474
- if (!$db_version || version_compare($db_version, $current_version, '<'))
475
- {
476
- do_action($action_hook, $db_version, $current_version);
477
- // only mark as upgraded when this is init update
478
- if ('init' == $when)
479
- update_option($this->plugin_key . '_version', $current_version);
480
- }
481
- }
482
-
483
- protected function pre_init_update_plugin()
484
- {
485
- $this->update_plugin('pre_init');
486
- }
487
-
488
- protected function init_update_plugin()
489
- {
490
- $this->update_plugin('init');
491
- }
492
-
493
- protected function pre_init_hooks()
494
- {
495
- /* intentionally left blank */
496
- }
497
-
498
- protected function init_hooks()
499
- {
500
- /* intentionally left blank */
501
- }
502
-
503
- protected function enqueue_media()
504
- {
505
- /* intentionally left blank */
506
- }
507
-
508
- public function install()
509
- {
510
- /* intentionally left blank */
511
- }
512
-
513
- public function uninstall()
514
- {
515
- /* intentionally left blank */
516
- }
517
-
518
- protected function is_admin_page($page = '')
519
- {
520
- if (is_admin() && !empty($_GET['page'])
521
- && (in_array($_GET['page'], $this->option_keys)
522
- || in_array($_GET['page'], $this->extra_option_keys))
523
- && (empty($page)
524
- || (!empty($page) && $page == $_GET['page']))
525
- ) {
526
- return true;
527
- }
528
- }
529
-
530
- public function get_admin_page($page)
531
- {
532
- $option_script = !$this->_menu_under_settings && !$this->_simple_menu
533
- ? 'admin.php'
534
- : 'options-general.php';
535
-
536
- return add_query_arg(array('page' => $page), admin_url($option_script));
537
- }
538
-
539
- public function plugin_action_links($links, $file)
540
- {
541
- $option_keys = array_values($this->option_keys);
542
-
543
- if (false !== strpos(plugin_basename($this->plugin_file), $file))
544
- {
545
- $links[] = '<a href="' . $this->get_admin_page($option_keys[0]) . '">'
546
- . __('Settings') . '</a>';
547
- }
548
-
549
- return $links;
550
- }
551
-
552
- public function init_admin()
553
- {
554
- $this->_menu_under_settings = apply_filters('bwp_menus_under_settings', false);
555
-
556
- add_filter('plugin_action_links', array($this, 'plugin_action_links'), 10, 2);
557
-
558
- if ($this->is_admin_page())
559
- {
560
- // Build tabs
561
- $this->build_tabs();
562
-
563
- // Load option page builder
564
- if (!class_exists('BWP_OPTION_PAGE'))
565
- require_once dirname(__FILE__) . '/bwp-option-page/bwp-option-page.php';
566
-
567
- // Enqueue style sheets and scripts for the option page
568
- wp_enqueue_style(
569
- 'bwp-option-page',
570
- $this->plugin_wp_url . 'includes/bwp-option-page/css/bwp-option-page.css',
571
- self::is_multisite() || class_exists('JCP_UseGoogleLibraries') ? array('wp-admin') : array(),
572
- '1.1.0'
573
- );
574
-
575
- wp_enqueue_script(
576
- 'bwp-paypal-js',
577
- $this->plugin_wp_url . 'includes/bwp-option-page/js/paypal.js',
578
- array('jquery')
579
- );
580
- }
581
-
582
- $this->build_menus();
583
- }
584
-
585
- /**
586
- * Build the Menus
587
- */
588
- protected function build_menus()
589
- {
590
- /* intentionally left blank */
591
- }
592
-
593
- protected function build_tabs()
594
- {
595
- $option_script = !$this->_menu_under_settings
596
- ? 'admin.php'
597
- : 'options-general.php';
598
-
599
- foreach ($this->option_pages as $key => $page)
600
- {
601
- $pagelink = !empty($this->option_keys[$key])
602
- ? $this->option_keys[$key]
603
- : $this->extra_option_keys[$key];
604
-
605
- $this->form_tabs[$page] = admin_url($option_script)
606
- . '?page=' . $pagelink;
607
- }
608
- }
609
-
610
- /**
611
- * Build the option pages
612
- *
613
- * Utilizes BWP Option Page Builder (@see BWP_OPTION_PAGE)
614
- */
615
- protected function build_option_pages()
616
- {
617
- /* intentionally left blank */
618
- }
619
-
620
- protected function add_notice($notice)
621
- {
622
- if (!in_array($notice, $this->notices))
623
- {
624
- $this->notices[] = $notice;
625
- add_action('bwp_option_action_before_form', array($this, 'show_notices'));
626
- }
627
- }
628
-
629
- public function show_notices()
630
- {
631
- if (false == $this->notice_shown)
632
- {
633
- foreach ($this->notices as $notice)
634
- {
635
- echo '<div class="updated fade"><p>' . $notice . '</p></div>';
636
- }
637
- $this->notice_shown = true;
638
- }
639
- }
640
-
641
- protected function add_error($error)
642
- {
643
- if (!in_array($error, $this->errors))
644
- {
645
- $this->errors[] = $error;
646
- add_action('bwp_option_action_before_form', array($this, 'show_errors'));
647
- }
648
- }
649
-
650
- public function show_errors()
651
- {
652
- if (false == $this->error_shown)
653
- {
654
- foreach ($this->errors as $error)
655
- {
656
- echo '<div class="error"><p>' . $error . '</p></div>';
657
- }
658
- $this->error_shown = true;
659
- }
660
- }
661
-
662
- public function add_url($key, $url, $relative = true)
663
- {
664
- $this->urls[$key] = array(
665
- 'relative' => $relative,
666
- 'url' => $url
667
- );
668
- }
669
-
670
- public function get_url($key)
671
- {
672
- if (isset($this->urls[$key]))
673
- {
674
- $url = $this->urls[$key];
675
- if ($url['relative'])
676
- return trailingslashit($this->plugin_url) . $url['url'];
677
-
678
- return $url['url'];
679
- }
680
-
681
- return '';
682
- }
683
-
684
- public static function is_multisite()
685
- {
686
- if (function_exists('is_multisite') && is_multisite())
687
- return true;
688
-
689
- if (defined('MULTISITE'))
690
- return MULTISITE;
691
-
692
- if (defined('SUBDOMAIN_INSTALL') || defined('VHOST') || defined('SUNRISE'))
693
- return true;
694
-
695
- return false;
696
- }
697
-
698
- public static function is_subdomain_install()
699
- {
700
- if (defined('SUBDOMAIN_INSTALL') && SUBDOMAIN_INSTALL)
701
- return true;
702
-
703
- return false;
704
- }
705
-
706
- public static function is_normal_admin()
707
- {
708
- if (self::is_multisite() && !is_super_admin())
709
- return true;
710
- return false;
711
- }
712
-
713
- protected static function is_apache()
714
- {
715
- if (isset($_SERVER['SERVER_SOFTWARE'])
716
- && false !== stripos($_SERVER['SERVER_SOFTWARE'], 'apache')
717
- ) {
718
- return true;
719
- }
720
- return false;
721
- }
722
-
723
- protected static function is_nginx()
724
- {
725
- if (isset($_SERVER['SERVER_SOFTWARE'])
726
- && false !== stripos($_SERVER['SERVER_SOFTWARE'], 'nginx')
727
- ) {
728
- return true;
729
- }
730
-
731
- return false;
732
- }
733
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-bwp-simple-gxs.php DELETED
@@ -1,3547 +0,0 @@
1
- <?php
2
- /**
3
- * Main Sitemap class that provides all logics.
4
- *
5
- * Copyright (c) 2014 Khang Minh <betterwp.net>
6
- *
7
- * This program is free software: you can redistribute it and/or modify
8
- * it under the terms of the GNU General Public License as published by
9
- * the Free Software Foundation, either version 3 of the License, or
10
- * (at your option) any later version.
11
- *
12
- * This program is distributed in the hope that it will be useful,
13
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
- * GNU General Public License for more details.
16
- *
17
- * You should have received a copy of the GNU General Public License
18
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
19
- *
20
- * @author Khang Minh <contact@betterwp.net>
21
- * @link http://betterwp.net/wordpress-plugins/google-xml-sitemaps/
22
- * @link https://github.com/OddOneOut/Better-WordPress-Google-XML-Sitemaps
23
- */
24
-
25
- if (!class_exists('BWP_FRAMEWORK_IMPROVED'))
26
- require_once(dirname(__FILE__) . '/class-bwp-framework-improved.php');
27
-
28
- class BWP_SIMPLE_GXS extends BWP_FRAMEWORK_IMPROVED
29
- {
30
- /**
31
- * Sitemap generation log
32
- *
33
- * @var array
34
- */
35
- public $logs = array(
36
- 'log' => array(),
37
- 'sitemap' => array()
38
- );
39
-
40
- /**
41
- * Maximum number of log entries for Sitemap generation log
42
- *
43
- * @var integer
44
- */
45
- private $_log_limit = 25;
46
-
47
- /**
48
- * Whether generator log is empty
49
- *
50
- * @var bool
51
- */
52
- private $_is_log_empty = false;
53
-
54
- /**
55
- * Modules to load when generating sitemapindex
56
- *
57
- * @var array
58
- */
59
- public $modules = array(), $requested_modules = array();
60
-
61
- /**
62
- * Directories to load modules from
63
- *
64
- * @var string
65
- */
66
- public $module_directory = '', $custom_module_directory = '';
67
-
68
- /**
69
- * Whether sitemap is generated using a custom module file
70
- *
71
- * @var bool
72
- */
73
- private $_is_using_custom_module = false;
74
-
75
- /**
76
- * Mapping data for a module/sub-module
77
- *
78
- * @var array
79
- */
80
- public $module_map = array();
81
-
82
- /**
83
- * Url updating frequencies
84
- *
85
- * @var array
86
- */
87
- public $frequencies = array(
88
- 'always',
89
- 'hourly',
90
- 'daily',
91
- 'weekly',
92
- 'monthly',
93
- 'yearly',
94
- 'never'
95
- );
96
-
97
- /**
98
- * Url crawling priorties
99
- *
100
- * @var array
101
- */
102
- public $priorities = array(
103
- '0.1' => 0.1,
104
- '0.2' => 0.2,
105
- '0.3' => 0.3,
106
- '0.4' => 0.4,
107
- '0.5' => 0.5,
108
- '0.6' => 0.6,
109
- '0.7' => 0.7,
110
- '0.8' => 0.8,
111
- '0.9' => 0.9,
112
- '1.0' => 1.0
113
- );
114
-
115
- /**
116
- * Urls to ping
117
- *
118
- * @var array
119
- * @since 1.3.0
120
- */
121
- private $_ping_urls = array(
122
- 'google' => 'http://www.google.com/webmasters/sitemaps/ping?sitemap=%s',
123
- 'bing' => 'http://www.bing.com/webmaster/ping.aspx?siteMap=%s',
124
- //'ask' => 'http://submissions.ask.com/ping?sitemap=%s'),
125
- );
126
-
127
- /**
128
- * Name of the sitemap to ping with
129
- *
130
- * @var string
131
- */
132
- private $_ping_sitemap = 'sitemapindex';
133
-
134
- /**
135
- * Whether debug mode/debug extra mode is enabled
136
- *
137
- * @var bool
138
- * @since 1.3.0
139
- */
140
- private $_debug = false, $_debug_extra = false;
141
-
142
- /**
143
- * The maximum number of times to ping per day for each SE
144
- *
145
- * @var int
146
- */
147
- public $pings_per_day = 100;
148
-
149
- /**
150
- * Timeout for ping request
151
- *
152
- * @var int
153
- */
154
- public $ping_timeout = 3;
155
-
156
- /**
157
- * A list of post type objects
158
- *
159
- * @var array
160
- */
161
- public $post_types;
162
-
163
- /**
164
- * A list of taxonomy objects
165
- *
166
- * @var array
167
- */
168
- public $taxonomies;
169
-
170
- /**
171
- * A list of term objects
172
- *
173
- * @var array
174
- */
175
- public $terms;
176
-
177
- /**
178
- * Sitemap templates
179
- *
180
- * @var array
181
- */
182
- public $templates = array();
183
-
184
- /**
185
- * Module data for a specific sitemap
186
- *
187
- * @var array
188
- */
189
- public $module_data = array();
190
-
191
- /**
192
- * Sitemap generation stats
193
- *
194
- * @var array
195
- */
196
- public $build_data = array(
197
- 'time',
198
- 'mem',
199
- 'query'
200
- );
201
-
202
- /**
203
- * Stylesheets for XML sitemaps
204
- *
205
- * @var string
206
- */
207
- public $xslt = '', $xslt_index = '';
208
-
209
- /**
210
- * Holds a sitemap's output
211
- *
212
- * @var string
213
- */
214
- public $output = '';
215
-
216
- /**
217
- * The number of urls found in a sitemap
218
- *
219
- * @var int
220
- */
221
- public $output_num = 0;
222
-
223
- /**
224
- * Holds the GXS cache class
225
- *
226
- * @var BWP_GXS_CACHE
227
- */
228
- public $cache = false;
229
-
230
- /**
231
- * Directory to store cached sitemap
232
- *
233
- * @var string
234
- * @since 1.3.0
235
- */
236
- public $cache_directory = '';
237
-
238
- /**
239
- * Time to keep cached sitemap files
240
- *
241
- * @var integer
242
- */
243
- public $cache_time;
244
-
245
- /**
246
- * Whether to use friendly url for sitemap links
247
- *
248
- * @var bool
249
- */
250
- public $use_permalink = true;
251
-
252
- /**
253
- * Query variable to use when not using friendly urls
254
- *
255
- * @var string
256
- */
257
- public $query_var_non_perma = '';
258
-
259
- /**
260
- * Url to the sitemapindex file
261
- *
262
- * @var string
263
- */
264
- public $sitemap_url;
265
-
266
- /**
267
- * Sitemap url structure used to construct other sitemap files
268
- *
269
- * @var string
270
- */
271
- public $sitemap_url_struct;
272
-
273
- /**
274
- * Constructor
275
- */
276
- public function __construct($version = '1.3.0')
277
- {
278
- // Plugin's title
279
- $this->plugin_title = 'Better WordPress Google XML Sitemaps';
280
- // Plugin's version
281
- $this->set_version($version);
282
- // Plugin's language domain
283
- $this->domain = 'bwp-simple-gxs';
284
-
285
- // Basic version checking
286
- if (!$this->check_required_versions())
287
- return;
288
-
289
- // Default options
290
- $options = array(
291
- 'enable_cache' => '', // @since 1.3.0 off by default
292
- 'enable_cache_auto_gen' => 'yes',
293
- 'enable_gzip' => '',
294
- 'enable_xslt' => 'yes',
295
- 'enable_sitemap_date' => '',
296
- 'enable_sitemap_taxonomy' => 'yes',
297
- 'enable_sitemap_external' => '',
298
- 'enable_sitemap_split_post' => 'yes',
299
- 'enable_sitemap_author' => '',
300
- 'enable_sitemap_site' => 'yes',
301
- 'enable_stats' => 'yes',
302
- 'enable_credit' => 'yes',
303
- 'enable_ping' => 'yes',
304
- 'enable_ping_google' => 'yes',
305
- 'enable_ping_bing' => 'yes',
306
- //'enable_ping_ask' => '',
307
- 'enable_log' => 'yes',
308
- 'enable_debug' => '',
309
- 'enable_debug_extra' => '', // @since 1.3.0
310
- 'enable_robots' => 'yes',
311
- 'enable_global_robots' => '',
312
- 'enable_gmt' => 'yes',
313
- // Google news options
314
- 'enable_news_sitemap' => '',
315
- 'enable_news_keywords' => '',
316
- 'enable_news_ping' => '',
317
- 'enable_news_multicat' => '',
318
- 'select_news_lang' => 'en',
319
- 'select_news_keyword_type' => 'cat',
320
- 'select_news_cat_action' => 'inc',
321
- 'select_news_cats' => '',
322
- 'input_news_genres' => array(),
323
- // End of Google news options
324
- 'input_exclude_post_type' => '',
325
- 'input_exclude_post_type_ping' => '', // @since 1.3.0
326
- 'input_exclude_taxonomy' => 'post_tag',
327
- 'input_cache_age' => 1,
328
- 'input_item_limit' => 5000,
329
- 'input_split_limit_post' => 0,
330
- 'input_alt_module_dir' => '', // @since 1.3.0 default to empty
331
- 'input_oldest' => 7,
332
- 'input_sql_limit' => 1000,
333
- 'input_custom_xslt' => '',
334
- 'input_ping_limit' => 100, // @since 1.3.0 per day ping limit for each SE
335
- 'select_output_type' => 'concise',
336
- 'select_time_type' => 3600,
337
- 'select_oldest_type' => 16400,
338
- 'select_default_freq' => 'daily',
339
- 'select_default_pri' => 1.0,
340
- 'select_min_pri' => 0.1,
341
- 'input_cache_dir' => '', // @since 1.3.0 make this editable and allow overriden using constant or filters
342
- );
343
-
344
- // super admin only options
345
- $this->site_options = array(
346
- 'enable_global_robots',
347
- 'enable_log',
348
- 'enable_debug',
349
- 'enable_debug_extra',
350
- 'enable_gzip',
351
- 'enable_cache',
352
- 'enable_cache_auto_gen',
353
- 'input_cache_age',
354
- 'input_alt_module_dir',
355
- 'input_sql_limit',
356
- 'input_cache_dir',
357
- 'select_time_type'
358
- );
359
-
360
- $this->add_option_key('BWP_GXS_OPTION_GENERATOR', 'bwp_gxs_generator',
361
- __('XML Sitemaps', $this->domain));
362
- $this->add_option_key('BWP_GXS_GOOGLE_NEWS', 'bwp_gxs_google_news',
363
- __('Google News Sitemap', $this->domain));
364
- $this->add_option_key('BWP_GXS_STATS', 'bwp_gxs_stats',
365
- __('Sitemap Log', $this->domain));
366
-
367
- define('BWP_GXS_LOG', 'bwp_gxs_log');
368
- define('BWP_GXS_PING', 'bwp_gxs_ping_data');
369
-
370
- $this->build_properties('BWP_GXS', $this->domain, $options,
371
- 'Better WordPress Google XML Sitemaps', dirname(dirname(__FILE__)) . '/bwp-simple-gxs.php',
372
- 'http://betterwp.net/wordpress-plugins/google-xml-sitemaps/', false
373
- );
374
- }
375
-
376
- protected function pre_init_properties()
377
- {
378
- $this->templates = array(
379
- // Sitemap index
380
- 'sitemap' => "\n\t" . '<sitemap>' . "\n\t\t" . '<loc>%s</loc>%s' . "\n\t" . '</sitemap>',
381
- // Normal sitemap
382
- 'url' => "\n\t" . '<url>' . "\n\t\t" . '<loc>%1$s</loc>%2$s%3$s%4$s' . "\n\t" . '</url>',
383
- 'lastmod' => "\n\t\t" . '<lastmod>%s</lastmod>',
384
- 'changefreq' => "\n\t\t" . '<changefreq>%s</changefreq>',
385
- 'priority' => "\n\t\t" . '<priority>%.1f</priority>',
386
- // Google News Sitemap
387
- 'news' => "\n\t" . '<url>' . "\n\t\t" . '<loc>%1$s</loc>' . "\n\t\t" . '<news:news>%2$s%3$s%4$s%5$s%6$s' . "\n\t\t" . '</news:news>' . "\n\t" . '</url>',
388
- 'news_publication' => "\n\t\t\t" . '<news:publication>%1$s%2$s</news:publication>',
389
- 'news_name' => "\n\t\t\t\t" . '<news:name>%s</news:name>',
390
- 'news_language' => "\n\t\t\t\t" . '<news:language>%s</news:language>',
391
- 'news_genres' => "\n\t\t\t" . '<news:genres>%s</news:genres>',
392
- 'news_pub_date' => "\n\t\t\t" . '<news:publication_date>%s</news:publication_date>',
393
- 'news_title' => "\n\t\t\t" . '<news:title>%s</news:title>',
394
- 'news_keywords' => "\n\t\t\t" . '<news:keywords>%s</news:keywords>',
395
- // Misc
396
- 'xslt_style' => '',
397
- 'stats' => "\n" . '<!-- ' . __('This sitemap was originally generated in %s second(s) (Memory usage: %s) - %s queries - %s URL(s) listed', $this->domain) . ' -->'
398
- /*'stats_cached' => "\n" . '<!-- ' . __('Served from cache in %s second(s) (Memory usage: %s) - %s queries - %s URL(s) listed', $this->domain) . ' -->'*/
399
- );
400
-
401
- $this->pings_per_day = (int) $this->options['input_ping_limit'];
402
-
403
- // init debug and debug extra mode
404
- $this->_init_debug();
405
-
406
- // init sitemap log
407
- $this->_init_logs();
408
-
409
- // init xslt stylesheet
410
- $this->_init_xslt_stylesheet();
411
-
412
- // Some stats
413
- $this->build_stats['mem'] = memory_get_usage();
414
- }
415
-
416
- protected function load_libraries()
417
- {
418
- require_once dirname(__FILE__) . '/common-functions.php';
419
- require_once dirname(__FILE__) . '/class-bwp-gxs-cache.php';
420
-
421
- $this->cache = new BWP_GXS_CACHE($this);
422
- }
423
-
424
- protected function pre_init_hooks()
425
- {
426
- add_filter('rewrite_rules_array', array($this, 'insert_rewrite_rules'), 9);
427
- add_filter('query_vars', array($this, 'insert_query_vars'));
428
- add_action('parse_request', array($this, 'request_sitemap'));
429
-
430
- // check and update plugin db if needed, this is fired after init
431
- add_action('bwp_gxs_init_upgrade', array($this, 'upgrade_plugin'), 10, 2);
432
-
433
- if ('yes' == $this->options['enable_ping'])
434
- {
435
- // ping search engines with sitemapindex
436
- // @see `wp_transition_post_status` in wp-includes/post.php
437
- add_action('auto-draft_to_publish', array($this, 'ping'), 1000);
438
- add_action('draft_to_publish', array($this, 'ping'), 1000);
439
- add_action('new_to_publish', array($this, 'ping'), 1000);
440
- add_action('pending_to_publish', array($this, 'ping'), 1000);
441
- add_action('future_to_publish', array($this, 'ping'), 1000);
442
- }
443
-
444
- if ('yes' == $this->options['enable_news_ping'])
445
- {
446
- // enable ping for news sitemap
447
- add_action('auto-draft_to_publish', array($this, 'ping_google_news'), 1000);
448
- add_action('draft_to_publish', array($this, 'ping_google_news'), 1000);
449
- add_action('new_to_publish', array($this, 'ping_google_news'), 1000);
450
- add_action('pending_to_publish', array($this, 'ping_google_news'), 1000);
451
- add_action('future_to_publish', array($this, 'ping_google_news'), 1000);
452
- }
453
-
454
- if ('yes' == $this->options['enable_robots'])
455
- add_filter('robots_txt', array($this, 'do_robots'), 1000, 2);
456
- }
457
-
458
- protected function init_properties()
459
- {
460
- $this->cache_directory = $this->_get_cache_directory();
461
- $this->cache_time = (int) $this->options['input_cache_age'] * (int) $this->options['select_time_type'];
462
-
463
- // init directories where modules live
464
- $this->_init_module_directories();
465
-
466
- // certain modules can use other modules to build data
467
- $module_map = apply_filters('bwp_gxs_module_mapping', array());
468
- $this->module_map = wp_parse_args($module_map, array(
469
- 'post_format' => 'post_tag'
470
- ));
471
-
472
- // init urls structure used for xml sitemap files
473
- $this->_init_sitemap_urls();
474
-
475
- // @since 1.3.0 allow the use of dynamic xslt stylesheet
476
- $this->xslt = apply_filters('bwp_gxs_xslt', $this->xslt);
477
- $this->xslt_index = empty($this->xslt) ? '' : substr_replace($this->xslt, 'index', -4, 0);
478
- }
479
-
480
- protected function enqueue_media()
481
- {
482
- if ($this->is_admin_page())
483
- wp_enqueue_style('bwp-gxs-admin', BWP_GXS_CSS . '/bwp-simple-gxs.css');
484
-
485
- if ($this->is_admin_page(BWP_GXS_OPTION_GENERATOR))
486
- wp_enqueue_script('bwp-gxs-setting', BWP_GXS_JS . '/bwp-gxs.js');
487
- }
488
-
489
- public function insert_query_vars($vars)
490
- {
491
- if (!$this->use_permalink)
492
- {
493
- array_push($vars, $this->query_var_non_perma);
494
- }
495
- else
496
- {
497
- array_push($vars, 'gxs_module');
498
- array_push($vars, 'gxs_sub_module');
499
- }
500
-
501
- return $vars;
502
- }
503
-
504
- public function insert_rewrite_rules($rules)
505
- {
506
- $rewrite_rules = array(
507
- 'sitemap\.xml$' => 'index.php?gxs_module=sitemapindex',
508
- 'sitemapindex\.xml$' => 'index.php?gxs_module=sitemapindex',
509
- 'site\.xml$' => 'index.php?gxs_module=site',
510
- 'page\.xml$' => 'index.php?gxs_module=page',
511
- 'post\.xml$' => 'index.php?gxs_module=post',
512
- 'author\.xml$' => 'index.php?gxs_module=author',
513
- '([a-z0-9]+)_([a-z0-9_-]+)\.xml$' => 'index.php?gxs_module=$matches[1]&gxs_sub_module=$matches[2]'
514
- );
515
-
516
- // @since 1.0.3
517
- $custom_rules = apply_filters('bwp_gxs_rewrite_rules', array());
518
- $rules = array_merge($custom_rules, $rewrite_rules, $rules);
519
-
520
- return $rules;
521
- }
522
-
523
- private function _get_cache_directory_from_constant()
524
- {
525
- return defined('BWP_GXS_CACHE_DIR') && BWP_GXS_CACHE_DIR != ''
526
- ? trim(BWP_GXS_CACHE_DIR) : '';
527
- }
528
-
529
- private function _get_default_cache_directory()
530
- {
531
- return plugin_dir_path($this->plugin_file) . 'cache/';
532
- }
533
-
534
- /**
535
- * Gets cache directory from constant, setting or filters (in that
536
- * particular order)
537
- *
538
- * @since 1.3.0
539
- * @access private
540
- */
541
- private function _get_cache_directory()
542
- {
543
- // get cache dir from constant
544
- $cache_dir = $this->_get_cache_directory_from_constant();
545
-
546
- // get cache dir from setting
547
- $cache_dir = empty($cache_dir) ? trim($this->options['input_cache_dir']) : $cache_dir;
548
-
549
- // get default cache dir
550
- $cache_dir = empty($cache_dir) ? $this->_get_default_cache_directory() : $cache_dir;
551
-
552
- // allow custom cache dirs using filters
553
- return apply_filters('bwp_gxs_cache_dir', $cache_dir);
554
- }
555
-
556
- /**
557
- * Set up the default module directory and a custom module directory if applicable
558
- *
559
- * @return void
560
- * @since 1.3.0
561
- * @access private
562
- */
563
- private function _init_module_directories()
564
- {
565
- $this->module_directory = plugin_dir_path($this->plugin_file) . 'includes/modules/';
566
-
567
- $this->custom_module_directory = !empty($this->options['input_alt_module_dir'])
568
- ? $this->options['input_alt_module_dir']
569
- : false;
570
-
571
- $this->custom_module_directory = trailingslashit(apply_filters('bwp_gxs_module_dir', $this->custom_module_directory));
572
- }
573
-
574
- /**
575
- * Constructs a sitemap url (friendly or normal) based on provided slug
576
- *
577
- * @since 1.3.0
578
- * @access public
579
- * @return string
580
- */
581
- public function get_sitemap_url($slug)
582
- {
583
- if ($slug == 'sitemapindex')
584
- {
585
- return $this->sitemap_url;
586
- }
587
- else
588
- {
589
- return sprintf($this->sitemap_url_struct, $slug);
590
- }
591
- }
592
-
593
- /**
594
- * Inits sitemapindex url and sitemap structure
595
- *
596
- * @return void
597
- * @since 1.3.0
598
- * @access private
599
- **/
600
- private function _init_sitemap_urls()
601
- {
602
- $permalink = get_option('permalink_structure');
603
-
604
- if (!$permalink)
605
- {
606
- // do not use friendly sitemap urls
607
- $this->use_permalink = false;
608
-
609
- $this->query_var_non_perma = apply_filters('bwp_gxs_query_var_non_perma', 'bwpsitemap');
610
-
611
- // @todo recheck https
612
- $this->sitemap_url = home_url() . '/?' . $this->query_var_non_perma . '=sitemapindex';
613
- $this->sitemap_url_struct = home_url() . '/?' . $this->query_var_non_perma . '=%s';
614
- }
615
- else
616
- {
617
- // use friendly sitemap urls such as http://example.com/sitemapindex.xml
618
- // If user is using index.php in their permalink structure, we will
619
- // have to include it also
620
- $indexphp = strpos($permalink, 'index.php') === false ? '' : '/index.php';
621
-
622
- $this->sitemap_url = home_url() . $indexphp . '/sitemapindex.xml';
623
- $this->sitemap_url_struct = home_url() . $indexphp . '/%s.xml';
624
- }
625
- }
626
-
627
- /**
628
- * Inits XSLT stylesheets used for sitemap's look and feel
629
- *
630
- * @return void
631
- * @since 1.3.0
632
- * @access private
633
- **/
634
- private function _init_xslt_stylesheet()
635
- {
636
- if ('yes' == $this->options['enable_xslt'])
637
- {
638
- // if the host the user is using is different from what we get from
639
- // 'home' option, we need to use the host so user won't see a style
640
- // sheet error, which is most of the time mistaken as broken
641
- // sitemaps - @since 1.1.0
642
- $user_host = strtolower($_SERVER['HTTP_HOST']);
643
-
644
- $blog_home = @parse_url(home_url());
645
- $blog_host = strtolower($blog_home['host']);
646
-
647
- $this->xslt = !empty($this->options['input_custom_xslt'])
648
- ? $this->options['input_custom_xslt']
649
- : plugin_dir_url($this->plugin_file) . 'xsl/bwp-sitemap.xsl';
650
-
651
- $this->xslt = strcmp($user_host, $blog_host) == 0
652
- ? $this->xslt
653
- : str_replace($blog_host, $user_host, $this->xslt);
654
- }
655
- }
656
-
657
- /**
658
- * Inits debug and debug extra mode
659
- *
660
- * @return void
661
- * @since 1.3.0
662
- * @access private
663
- **/
664
- private function _init_debug()
665
- {
666
- $this->_debug = $this->options['enable_debug'] == 'yes'
667
- || $this->options['enable_debug_extra'] == 'yes' ? true : false;
668
- $this->_debug_extra = $this->options['enable_debug_extra'] == 'yes' ? true : false;
669
- }
670
-
671
- /**
672
- * Inits sitemap log property
673
- *
674
- * @since 1.3.0
675
- * @access private
676
- */
677
- private function _init_logs()
678
- {
679
- $this->logs = get_option(BWP_GXS_LOG);
680
-
681
- if (!$this->logs)
682
- {
683
- $this->logs = array(
684
- 'log' => array(),
685
- 'sitemap' => array()
686
- );
687
- }
688
-
689
- if (sizeof($this->logs['log']) == 0)
690
- $this->_is_log_empty = true;
691
-
692
- foreach ($this->logs as $key => $log)
693
- {
694
- if ($key == 'sitemap')
695
- // don't use log limit for sitemap log
696
- continue;
697
-
698
- if (is_array($log) && $this->_log_limit < sizeof($log))
699
- {
700
- // only keep latest log entries
701
- $log = array_slice($log, (-1) * $this->_log_limit);
702
- $this->logs[$key] = $log;
703
- }
704
- }
705
- }
706
-
707
- private static function _flush_rewrite_rules()
708
- {
709
- global $wp_rewrite;
710
-
711
- $wp_rewrite->flush_rules();
712
- }
713
-
714
- public function install()
715
- {
716
- self::_flush_rewrite_rules();
717
- }
718
-
719
- public function uninstall()
720
- {
721
- $this->logs = array(
722
- 'log' => array(),
723
- 'sitemap' => array()
724
- );
725
-
726
- $this->commit_logs();
727
-
728
- /* self::_flush_rewrite_rules(); */
729
- }
730
-
731
- public function upgrade_plugin($from, $to)
732
- {
733
- if (!$from || version_compare($from, '1.3.0', '<'))
734
- {
735
- // @since 1.3.0 default values of cache directory is empty
736
- $options = get_option(BWP_GXS_OPTION_GENERATOR);
737
- $options['input_cache_dir'] = '';
738
- update_option(BWP_GXS_OPTION_GENERATOR, $options);
739
- }
740
- }
741
-
742
- /**
743
- * Build the Menus
744
- */
745
- protected function build_menus()
746
- {
747
- if (!empty($this->_menu_under_settings))
748
- {
749
- // use simple menu if instructed to
750
- add_options_page(
751
- __('BWP Google XML Sitemaps Statistics', $this->domain),
752
- __('BWP XML Sitemaps', $this->domain),
753
- BWP_GXS_CAPABILITY,
754
- BWP_GXS_OPTION_GENERATOR,
755
- array($this, 'build_option_pages')
756
- );
757
- add_options_page(
758
- __('BWP Google News XML Sitemap', $this->domain),
759
- __('BWP Google News Sitemap', $this->domain),
760
- BWP_GXS_CAPABILITY,
761
- BWP_GXS_GOOGLE_NEWS,
762
- array($this, 'build_option_pages')
763
- );
764
- add_options_page(
765
- __('BWP Google XML Sitemaps Generator', $this->domain),
766
- __('BWP Sitemap Log', $this->domain),
767
- BWP_GXS_CAPABILITY,
768
- BWP_GXS_STATS,
769
- array($this, 'build_option_pages')
770
- );
771
- }
772
- else
773
- {
774
- add_menu_page(
775
- __('Better WordPress Google XML Sitemaps', $this->domain),
776
- 'BWP Sitemaps',
777
- BWP_GXS_CAPABILITY,
778
- BWP_GXS_OPTION_GENERATOR,
779
- array($this, 'build_option_pages'),
780
- BWP_GXS_IMAGES . '/icon_menu.png'
781
- );
782
- add_submenu_page(
783
- BWP_GXS_OPTION_GENERATOR,
784
- __('Better WordPress Google XML Sitemaps Statistics', $this->domain),
785
- __('XML Sitemaps', $this->domain),
786
- BWP_GXS_CAPABILITY,
787
- BWP_GXS_OPTION_GENERATOR,
788
- array($this, 'build_option_pages')
789
- );
790
- add_submenu_page(
791
- BWP_GXS_OPTION_GENERATOR,
792
- __('Better WordPress Google News XML Sitemap', $this->domain),
793
- __('Google News Sitemap', $this->domain),
794
- BWP_GXS_CAPABILITY,
795
- BWP_GXS_GOOGLE_NEWS,
796
- array($this, 'build_option_pages')
797
- );
798
- add_submenu_page(
799
- BWP_GXS_OPTION_GENERATOR,
800
- __('Better WordPress Google XML Sitemaps Generator', $this->domain),
801
- __('Sitemap Log', $this->domain),
802
- BWP_GXS_CAPABILITY,
803
- BWP_GXS_STATS,
804
- array($this, 'build_option_pages')
805
- );
806
- }
807
- }
808
-
809
- private function _add_checkboxes_to_form($for, $key_prefix, &$form, &$dynamic_options)
810
- {
811
- $options = $this->options;
812
-
813
- $exclude_options = array(
814
- 'post_types' => explode(',', $options['input_exclude_post_type']),
815
- 'post_types_ping' => explode(',', $options['input_exclude_post_type_ping']),
816
- 'taxonomies' => explode(',', $options['input_exclude_taxonomy'])
817
- );
818
-
819
- $excluded_post_types = $for == 'sec_post'
820
- ? $exclude_options['post_types']
821
- : $exclude_options['post_types_ping'];
822
-
823
- switch ($for)
824
- {
825
- case 'sec_post':
826
- case 'sec_post_ping':
827
- $post_types = get_post_types(array('public' => true), 'objects');
828
-
829
- foreach ($post_types as $post_type)
830
- {
831
- if ('attachment' == $post_type->name)
832
- continue;
833
-
834
- $key = $key_prefix . $post_type->name;
835
-
836
- $form[$for][] = array('checkbox', 'name' => $key);
837
- $form['checkbox'][$key] = array(__($post_type->label) => $key);
838
-
839
- if (in_array($post_type->name, $excluded_post_types))
840
- $dynamic_options[$key] = 'yes';
841
- else
842
- $dynamic_options[$key] = '';
843
- }
844
-
845
- break;
846
-
847
- case 'sec_tax':
848
- $taxonomies = get_taxonomies(array('public' => true), '');
849
-
850
- foreach ($taxonomies as $taxonomy)
851
- {
852
- if ('post_format' == $taxonomy->name)
853
- continue;
854
-
855
- $key = $key_prefix . $taxonomy->name;
856
-
857
- $form[$for][] = array('checkbox', 'name' => $key);
858
- $form['checkbox'][$key] = array(__($taxonomy->label) => $key);
859
-
860
- if (in_array($taxonomy->name, $exclude_options['taxonomies']))
861
- $dynamic_options[$key] = 'yes';
862
- else
863
- $dynamic_options[$key] = '';
864
- }
865
-
866
- break;
867
- }
868
- }
869
-
870
- /**
871
- * Build the option pages
872
- *
873
- * Utilizes BWP Option Page Builder (@see BWP_OPTION_PAGE)
874
- */
875
- public function build_option_pages()
876
- {
877
- if (!current_user_can(BWP_GXS_CAPABILITY))
878
- wp_die(__('You do not have sufficient permissions to access this page.'));
879
-
880
- // Init the class
881
- $page = $_GET['page'];
882
- $bwp_option_page = new BWP_OPTION_PAGE($page, $this->site_options);
883
-
884
- $options = array();
885
- $dynamic_options = array();
886
-
887
- if (!empty($page))
888
- {
889
- if ($page == BWP_GXS_OPTION_GENERATOR)
890
- {
891
- $bwp_option_page->set_current_tab(1);
892
-
893
- if (!self::is_normal_admin())
894
- {
895
- // add flush cache buttons for super admins
896
- // @todo allow normal admins to flush the cache as well,
897
- // but only for sitemaps on their sites
898
- add_filter('bwp_option_submit_button', array($this, 'add_flush_cache_buttons'));
899
-
900
- if (isset($_POST['flush_cache']))
901
- {
902
- check_admin_referer($page);
903
-
904
- $this->_admin_flush_cache();
905
- }
906
- }
907
-
908
- // add a clear log button
909
- add_filter('bwp_option_submit_button', array($this, 'add_clear_log_button'));
910
-
911
- if (isset($_POST['clear_log']))
912
- {
913
- // clear all sitemap logs including sitemap generation log
914
- // and sitemap item log
915
- check_admin_referer($page);
916
-
917
- $this->logs = array(
918
- 'log' => array(),
919
- 'sitemap' => array()
920
- );
921
-
922
- $this->commit_logs();
923
-
924
- $this->add_notice(
925
- '<strong>' . __('Notice', $this->domain) . ':</strong> '
926
- . __('All logs have been cleared successfully!', $this->domain)
927
- );
928
- }
929
-
930
- $form = array(
931
- 'items' => array(
932
- 'heading',
933
- 'heading',
934
- 'section',
935
- 'section',
936
- 'section',
937
- 'heading',
938
- 'input',
939
- 'checkbox',
940
- 'input',
941
- 'heading',
942
- 'select',
943
- 'select',
944
- 'select',
945
- 'checkbox',
946
- 'checkbox',
947
- 'heading',
948
- 'checkbox',
949
- 'input',
950
- 'checkbox',
951
- 'checkbox',
952
- 'heading',
953
- 'checkbox',
954
- 'checkbox',
955
- 'heading',
956
- 'checkbox',
957
- 'section',
958
- 'section',
959
- 'input',
960
- 'heading',
961
- 'checkbox',
962
- 'checkbox',
963
- 'input',
964
- 'input',
965
- 'heading',
966
- 'input',
967
- 'input',
968
- 'heading',
969
- 'checkbox',
970
- 'checkbox',
971
- 'checkbox'
972
- ),
973
- 'item_labels' => array(
974
- __('Your sitemaps', $this->domain),
975
- __('Sitemaps to generate', $this->domain),
976
- __('<strong>Enable</strong> following sitemaps', $this->domain),
977
- __('For post-based sitemaps, <strong>disable</strong> following post types:', $this->domain),
978
- __('For taxonomy-based sitemaps, <strong>disable</strong> following taxonomies:', $this->domain),
979
- __('Item limits', $this->domain),
980
- __('Global limit', $this->domain),
981
- __('Split <strong>post-based</strong> sitemaps', $this->domain),
982
- __('Split limit', $this->domain),
983
- __('Default values & Formatting', $this->domain),
984
- __('Default change frequency', $this->domain),
985
- __('Default priority', $this->domain),
986
- __('Minimum priority', $this->domain),
987
- __('Use GMT for Last Modified date', $this->domain),
988
- __('Compress sitemaps', $this->domain),
989
- __('Look and Feel', $this->domain),
990
- __('Make sitemaps look pretty', $this->domain),
991
- __('Custom XSLT stylesheet URL', $this->domain),
992
- __('Enable build stats', $this->domain),
993
- __('Enable credit', $this->domain),
994
- __('Virtual robots.txt', $this->domain),
995
- __('Add a sitemapindex entry to blog\'s robots.txt', $this->domain),
996
- __('Add sitemapindex entries from all blogs to primary blog\'s robots.txt', $this->domain),
997
- __('Ping search engines', $this->domain),
998
- __('Enable pinging', $this->domain),
999
- __('Search engines to ping', $this->domain),
1000
- __('<strong>Disable pinging</strong> for following post types:', $this->domain),
1001
- __('Ping limit for each search engine', $this->domain),
1002
- __('Caching', $this->domain),
1003
- __('Enable caching', $this->domain),
1004
- __('Enable auto cache re-generation', $this->domain),
1005
- __('Cache expiry time', $this->domain),
1006
- __('Cache directory', $this->domain),
1007
- __('Sitemap modules', $this->domain),
1008
- __('Database query limit', $this->domain),
1009
- __('Custom module directory', $this->domain),
1010
- htmlspecialchars(__('Sitemap log & debug', $this->domain)),
1011
- __('Enable sitemap log', $this->domain),
1012
- __('Enable debug mode', $this->domain),
1013
- __('Enable debug extra mode', $this->domain)
1014
- ),
1015
- 'item_names' => array(
1016
- 'heading_submit',
1017
- 'heading_contents',
1018
- 'sec_index',
1019
- 'sec_post',
1020
- 'sec_tax',
1021
- 'heading_limit',
1022
- 'input_item_limit',
1023
- 'cb_enable_split',
1024
- 'input_split_limit_post',
1025
- 'heading_format',
1026
- 'select_default_freq',
1027
- 'select_default_pri',
1028
- 'select_min_pri',
1029
- 'cb14',
1030
- 'cb_enable_gzip',
1031
- 'heading_look',
1032
- 'cb10',
1033
- 'input_custom_xslt',
1034
- 'cb3',
1035
- 'cb6',
1036
- 'heading_robot',
1037
- 'cb_index_to_blog',
1038
- 'cb_index_to_primary',
1039
- 'heading_ping',
1040
- 'cb_ping',
1041
- 'cb_ping_list',
1042
- 'sec_post_ping',
1043
- 'input_ping_limit',
1044
- 'heading_cache',
1045
- 'cb_enable_cache',
1046
- 'cb_enable_autogen',
1047
- 'input_cache_age',
1048
- 'input_cache_dir',
1049
- 'heading_module',
1050
- 'input_sql_limit',
1051
- 'input_alt_module_dir',
1052
- 'heading_debug',
1053
- 'cb_log',
1054
- 'cb_debug',
1055
- 'cb_debug_extra'
1056
- ),
1057
- 'heading' => array(
1058
- 'heading_submit' => '',
1059
- 'heading_contents' => '<em>'
1060
- . sprintf(
1061
- __('Choose appropriate sitemaps to generate. '
1062
- . 'For each sitemap, you can use filters to further '
1063
- . '<a href="%s#exclude_items" target="_blank">exclude items</a> '
1064
- . 'you do not need.', $this->domain),
1065
- $this->plugin_url
1066
- ) . '</em>',
1067
- 'heading_limit' => '<em>'
1068
- . __('Limit the number of items to output in one sitemap. ', $this->domain)
1069
- . sprintf(__('Avoid setting too high limits, i.e. ones that your server '
1070
- . 'can not handle. In such case, you might encounter white page error '
1071
- . 'due to timeout or memory issue. '
1072
- . 'Refer to this plugin\'s <a target="_blank" href="%s">FAQ section</a> for more info.', $this->domain),
1073
- $this->plugin_url . 'faq/')
1074
- . '</em>',
1075
- 'heading_format' => '<em>'
1076
- . __('Customize default values and some formating for your sitemaps. '
1077
- . 'Default values are only used when valid ones can not '
1078
- . 'be calculated.', $this->domain)
1079
- . '</em>',
1080
- 'heading_look' => '<em>'
1081
- . __('Customize the look and feel of your sitemaps. '
1082
- . 'Note that an XSLT stylesheet will NOT be used '
1083
- . 'for the Google News Sitemap module '
1084
- . 'regardless of any setting in this section.', $this->domain)
1085
- . '</em>',
1086
- 'heading_robot' => '<em>'
1087
- . sprintf(__('WordPress generates a %svirtual robots.txt%s '
1088
- . 'file for your blog by default. '
1089
- . 'You can add links to sitemapindex files generated by this plugin '
1090
- . 'to that robots.txt file using settings below.', $this->domain),
1091
- !self::is_multisite() || self::is_subdomain_install()
1092
- ? '<a href="' . home_url('robots.txt') . '" target="_blank">'
1093
- : '',
1094
- !self::is_multisite() || self::is_subdomain_install()
1095
- ? '</a>'
1096
- : '')
1097
- . '</em>',
1098
- 'heading_ping' => '<em>'
1099
- . __('Whenever you post something new to your blog, '
1100
- . 'you can <em>ping</em> search engines with your sitemapindex '
1101
- . 'to tell them your blog just got updated.', $this->domain)
1102
- . '</em>',
1103
- 'heading_cache' => '<em>'
1104
- . __('Cache your sitemaps for better performance. '
1105
- . 'If you are still configuring the plugin it\'s best to '
1106
- . 'disable caching or you might have to manually flush the cache '
1107
- . 'for any changes to show up.', $this->domain)
1108
- . '</em>',
1109
- 'heading_module' => '<em>'
1110
- . sprintf(__('Extend this plugin using customizable modules. '
1111
- . 'More info <a href="%s#module_api">here</a>.', $this->domain),
1112
- $this->plugin_url)
1113
- . '</em>',
1114
- 'heading_debug' => ''
1115
- ),
1116
- 'sec_index' => array(
1117
- array('checkbox', 'name' => 'cb17'),
1118
- array('checkbox', 'name' => 'cb7'),
1119
- array('checkbox', 'name' => 'cb9'),
1120
- array('checkbox', 'name' => 'cb16'),
1121
- array('checkbox', 'name' => 'cb13')
1122
- ),
1123
- 'sec_post' => array(),
1124
- 'sec_post_ping' => array(),
1125
- 'sec_tax' => array(),
1126
- 'cb_ping_list' => array(
1127
- array('checkbox', 'name' => 'cb_ping_google'),
1128
- array('checkbox', 'name' => 'cb_ping_bing')
1129
- ),
1130
- 'select' => array(
1131
- 'select_time_type' => array(
1132
- __('second(s)', $this->domain) => 1,
1133
- __('minute(s)', $this->domain) => 60,
1134
- __('hour(s)', $this->domain) => 3600,
1135
- __('day(s)', $this->domain) => 86400
1136
- ),
1137
- 'select_oldest_type' => array(
1138
- __('second(s)', $this->domain) => 1,
1139
- __('minute(s)', $this->domain) => 60,
1140
- __('hour(s)', $this->domain) => 3600,
1141
- __('day(s)', $this->domain) => 86400
1142
- ),
1143
- 'select_default_freq' => array(),
1144
- 'select_default_pri' => $this->priorities,
1145
- 'select_min_pri' => $this->priorities
1146
- ),
1147
- 'post' => array(
1148
- 'select_default_freq' => sprintf('<a href="%s" target="_blank">'
1149
- . __('read more', $this->domain)
1150
- . '</a>', 'http://sitemaps.org/protocol.php#xmlTagDefinitions'),
1151
- 'select_default_pri' => sprintf('<a href="%s" target="_blank">'
1152
- . __('read more', $this->domain)
1153
- . '</a>', 'http://sitemaps.org/protocol.php#xmlTagDefinitions'),
1154
- 'select_min_pri' => sprintf('<a href="%s" target="_blank">'
1155
- . __('read more', $this->domain)
1156
- . '</a>', 'http://sitemaps.org/protocol.php#xmlTagDefinitions')
1157
- ),
1158
- 'checkbox' => array(
1159
- 'cb_enable_cache' => array(__('Your sitemaps are generated and then cached to reduce unnecessary work.', $this->domain) => 'enable_cache'),
1160
- 'cb_enable_autogen' => array(__('Re-generate sitemap cache when expired. If you disable this, remember to manually flush the cache once in a while.', $this->domain) => 'enable_cache_auto_gen'),
1161
- 'cb3' => array(__('print useful information such as build time, memory usage, SQL queries, etc.', $this->domain) => 'enable_stats'),
1162
- 'cb_enable_gzip' => array(__('Use gzip to make sitemaps ~70% smaller. If you see an error after enabling this, it\'s very likely that you have gzip active on your server already.', $this->domain) => 'enable_gzip'),
1163
- 'cb_index_to_primary' => array(sprintf(__('If you have for example 50 blogs, 50 sitemapindex entries will be added to your primary blog\'s <a href="%s" target="_blank">robots.txt</a>.', $this->domain), get_site_option('home') . '/robots.txt') => 'enable_global_robots'),
1164
- 'cb7' => array(__('Taxonomy (including custom taxonomies).', $this->domain) => 'enable_sitemap_taxonomy'),
1165
- 'cb9' => array(__('Date archives.', $this->domain) => 'enable_sitemap_date'),
1166
- 'cb16' => array(__('Author archives.', $this->domain) => 'enable_sitemap_author'),
1167
- 'cb13' => array(sprintf(__('External pages. More info <a href="%s#external_sitemap" target="_blank">here</a>.', $this->domain), $this->plugin_url) => 'enable_sitemap_external'),
1168
- 'cb6' => array(__('some copyrighted info is also added to your sitemaps. Thanks!', $this->domain) => 'enable_credit'),
1169
- 'cb10' => array(__('Default XSLT stylesheets will be used. Set your custom stylesheets below or filter the <code>bwp_gxs_xslt</code> hook.', $this->domain) => 'enable_xslt'),
1170
- 'cb_index_to_blog' => array(sprintf(__('If you\'re on a Multi-site installation with <strong>Sub-domain</strong> enabled, each blog will have its own robots.txt. Blogs in <strong>sub-directory</strong> will not, however. Please read the <a href="%s#robots.txt" target="_blank">documentation</a> for more info.', $this->domain), $this->plugin_url) => 'enable_robots'),
1171
- 'cb_enable_split' => array(__('Sitemaps like <code>post.xml</code> are split into <code>post_part1.xml</code>, <code>post_part2.xml</code>, etc. when limit reached.', $this->domain) => 'enable_sitemap_split_post'),
1172
- 'cb14' => array(__('Disable this to use the local timezone setting in <em>Settings >> General</em>.', $this->domain) => 'enable_gmt'),
1173
- 'cb17' => array(__('Site Address. For a multi-site installation of WordPress, this sitemap will list all appropriate blogs\' addresses within your network, not just the main blog\'s.', $this->domain) => 'enable_sitemap_site'),
1174
- 'cb_ping' => array(__('Ping search engines when you publish new posts. By default all public posts are considered, unless explicitly disabled below.', $this->domain) => 'enable_ping'),
1175
- 'cb_ping_google' => array(__('Google', $this->domain) => 'enable_ping_google'),
1176
- 'cb_ping_bing' => array(__('Bing', $this->domain) => 'enable_ping_bing'),
1177
- 'cb_log' => array(sprintf(__('No additional load is needed so enabling this is highly recommended. You can check the log <a href="%s">here</a>.', $this->domain), $this->get_admin_page(BWP_GXS_STATS)) => 'enable_log'),
1178
- 'cb_debug' => array(__('When this is on, NO caching is used and <code>WP_DEBUG</code> is respected, useful when developing new modules.', $this->domain) => 'enable_debug'),
1179
- 'cb_debug_extra' => array(sprintf(__('When this is on, NO headers are sent and sitemaps are NOT compressed, useful when debugging <em>Content Encoding Error</em>. More info <a href="%s#sitemap_log_debug" target="_blank">here</a>.', $this->domain), $this->plugin_url) => 'enable_debug_extra'),
1180
- ),
1181
- 'input' => array(
1182
- 'input_item_limit' => array(
1183
- 'size' => 5,
1184
- 'label' => __('Maximum is <strong>50,000</strong>. '
1185
- . 'This setting is applied to all sitemaps.', $this->domain)
1186
- ),
1187
- 'input_split_limit_post' => array(
1188
- 'size' => 5,
1189
- 'label' => __('Maximum is <strong>50,000</strong>. '
1190
- . 'Set to 0 to use the Global limit.', $this->domain)
1191
- ),
1192
- 'input_custom_xslt' => array(
1193
- 'size' => 91,
1194
- 'label' => '<br />'
1195
- . __('Expect an absolute URL, '
1196
- . 'e.g. <code>http://example.com/my-stylesheet.xsl</code>. '
1197
- . 'You must also have a stylesheet for the sitemapindex '
1198
- . 'that can be accessed through the above URL, '
1199
- . 'e.g. <code>my-stylesheet.xsl</code> and '
1200
- . '<code>my-stylesheetindex.xsl</code>. '
1201
- . 'Leave blank to use provided stylesheets.', $this->domain)
1202
- ),
1203
- 'input_alt_module_dir' => array(
1204
- 'size' => 91,
1205
- 'label' => '<br />'
1206
- . __('Expect an absolute path to the directory '
1207
- . 'where you put your custom modules '
1208
- . '(e.g. <code>/home/mysite/public_html/gxs-modules/</code>). ', $this->domain)
1209
- . '<br />'
1210
- . __('Override a built-in module by having a module '
1211
- . 'with the same filename in specified directory.', $this->domain)
1212
- ),
1213
- 'input_cache_dir' => array(
1214
- 'size' => 91,
1215
- 'disabled' => $this->_get_cache_directory_from_constant() ? ' disabled="disabled" ' : '',
1216
- 'value' => $this->_get_cache_directory_from_constant() ? strtoupper(__('set via constant (BWP_GXS_CACHE_DIR)', $this->domain)) : null,
1217
- 'label' => '<br />'
1218
- . __('Expect an absolute path to a writable directory '
1219
- . '(i.e. CHMOD to 755 or 777). ', $this->domain)
1220
- . '<br />'
1221
- . sprintf(__('Leave empty to use <code>%s</code>.', $this->domain),
1222
- $this->_get_default_cache_directory())
1223
- ),
1224
- 'input_sql_limit' => array(
1225
- 'size' => 5,
1226
- 'label' => __('Only get this many items when querying from Database. '
1227
- . 'This is to make sure we are not running too heavy queries.', $this->domain)
1228
- ),
1229
- 'input_oldest' => array(
1230
- 'size' => 3,
1231
- 'label' => '&mdash;'
1232
- ),
1233
- 'input_cache_age' => array(
1234
- 'size' => 5,
1235
- 'label' => '&mdash;'
1236
- ),
1237
- 'input_ping_limit' => array(
1238
- 'size' => 5,
1239
- 'label' => __('time(s) per day. Increase this limit if '
1240
- . 'you publish a lot of posts in a single day.', $this->domain)
1241
- ),
1242
- ),
1243
- 'inline_fields' => array(
1244
- 'input_cache_age' => array('select_time_type' => 'select')
1245
- ),
1246
- 'inline' => array(
1247
- 'cb_enable_autogen' => '<br /><br />'
1248
- ),
1249
- 'container' => array(
1250
- 'heading_submit' => array(
1251
- '<em>'
1252
- . sprintf(__('Submit your <a href="%s" target="_blank">sitemapindex</a> '
1253
- . 'to major search engines like <a href="%s" target="_blank">Google</a>, '
1254
- . '<a href="%s" target="_blank">Bing</a>.', $this->domain),
1255
- $this->sitemap_url,
1256
- 'https://www.google.com/webmasters/tools/home?hl=en',
1257
- 'http://www.bing.com/toolbox/webmasters/')
1258
- . ' '
1259
- . sprintf(__('Only the sitemapindex needs to be submitted '
1260
- . 'as search engines will automatically recognize other included sitemaps. '
1261
- . 'More info can be found <a href="%s">here</a>.', $this->domain),
1262
- 'https://support.google.com/webmasters/answer/75712?hl=en&ref_topic=4581190')
1263
- . '</em>',
1264
- $this->get_logs(true)
1265
- )
1266
- ),
1267
- 'role' => array(
1268
- 'cb_enable_gzip' => 'superadmin',
1269
- 'heading_cache' => 'superadmin',
1270
- 'cb_enable_cache' => 'superadmin',
1271
- 'cb_enable_autogen' => 'superadmin',
1272
- 'cb_index_to_primary' => 'superadmin',
1273
- 'input_cache_age' => 'superadmin',
1274
- 'input_cache_dir' => 'superadmin',
1275
- 'heading_module' => 'superadmin',
1276
- 'input_sql_limit' => 'superadmin',
1277
- 'input_alt_module_dir' => 'superadmin',
1278
- 'heading_debug' => 'superadmin',
1279
- 'cb_log' => 'superadmin',
1280
- 'cb_debug' => 'superadmin',
1281
- 'cb_debug_extra' => 'superadmin'
1282
- ),
1283
- 'env' => array(
1284
- 'cb_index_to_primary' => 'multisite'
1285
- )
1286
- );
1287
-
1288
- foreach ($this->frequencies as $freq)
1289
- $changefreq[ucfirst($freq)] = $freq;
1290
-
1291
- $form['select']['select_default_freq'] = $changefreq;
1292
-
1293
- $options = $bwp_option_page->get_options(array(
1294
- 'input_item_limit',
1295
- 'input_split_limit_post',
1296
- 'input_alt_module_dir',
1297
- 'input_cache_dir',
1298
- 'input_sql_limit',
1299
- 'input_cache_age',
1300
- 'input_custom_xslt',
1301
- 'input_exclude_post_type',
1302
- 'input_exclude_post_type_ping',
1303
- 'input_exclude_taxonomy',
1304
- 'input_ping_limit',
1305
- 'enable_gmt',
1306
- 'enable_xslt',
1307
- 'enable_cache',
1308
- 'enable_cache_auto_gen',
1309
- 'enable_stats',
1310
- 'enable_credit',
1311
- 'enable_sitemap_split_post',
1312
- 'enable_robots',
1313
- 'enable_global_robots',
1314
- 'enable_sitemap_date',
1315
- 'enable_sitemap_taxonomy',
1316
- 'enable_sitemap_external',
1317
- 'enable_sitemap_author',
1318
- 'enable_sitemap_site',
1319
- 'enable_gzip',
1320
- 'enable_ping',
1321
- 'enable_ping_google',
1322
- 'enable_ping_bing',
1323
- 'enable_log',
1324
- 'enable_debug',
1325
- 'enable_debug_extra',
1326
- 'select_time_type',
1327
- 'select_default_freq',
1328
- 'select_default_pri',
1329
- 'select_min_pri'
1330
- ), $this->options);
1331
-
1332
- // get option from the database
1333
- $options = $bwp_option_page->get_db_options($page, $options);
1334
-
1335
- $option_formats = array(
1336
- 'input_item_limit' => 'int',
1337
- 'input_split_limit_post' => 'int',
1338
- 'input_sql_limit' => 'int',
1339
- 'input_cache_age' => 'int',
1340
- 'input_ping_limit' => 'int',
1341
- 'select_time_type' => 'int'
1342
- );
1343
-
1344
- $option_ignore = array(
1345
- 'input_exclude_post_type',
1346
- 'input_exclude_post_type_ping',
1347
- 'input_exclude_taxonomy'
1348
- );
1349
-
1350
- $option_super_admin = $this->site_options;
1351
- }
1352
- elseif ($page == BWP_GXS_GOOGLE_NEWS)
1353
- {
1354
- $bwp_option_page->set_current_tab(2);
1355
-
1356
- $form = array(
1357
- 'items' => array(
1358
- 'heading',
1359
- 'checkbox',
1360
- 'checkbox',
1361
- 'select',
1362
- 'checkbox',
1363
- 'checkbox',
1364
- 'select',
1365
- 'heading',
1366
- 'select'
1367
- ),
1368
- 'item_labels' => array
1369
- (
1370
- __('Add Google News Sitemap to your sitemapindex', $this->domain),
1371
- __('Enable news sitemap', $this->domain),
1372
- __('Enable keywords support', $this->domain),
1373
- __('Get keywords from', $this->domain),
1374
- __('Enable multi-category support', $this->domain),
1375
- __('Ping search engines when a news article is published', $this->domain),
1376
- __('News sitemap\'s language', $this->domain),
1377
- __('News categories', $this->domain),
1378
- __('The Google News sitemap will', $this->domain)
1379
- ),
1380
- 'item_names' => array(
1381
- 'h1',
1382
- 'cb1',
1383
- 'cb2',
1384
- 'select_news_keyword_type',
1385
- 'cb4',
1386
- 'cb3',
1387
- 'select_news_lang',
1388
- 'h2',
1389
- 'select_news_cat_action'
1390
- ),
1391
- 'heading' => array(
1392
- 'h1' => '<em>'
1393
- . __('A Google News Sitemap is a file that '
1394
- . 'allows you to control which content '
1395
- . 'you submit to Google News. By creating and '
1396
- . 'submitting a Google News Sitemap, you\'re able '
1397
- . 'to help Google News discover and crawl your site\'s news articles '
1398
- . '&mdash; http://support.google.com/', $this->domain)
1399
- . '</em>',
1400
- 'h2' => '<em>'
1401
- . __('Below you will be able to choose what categories '
1402
- . 'to use (or not use) in the news sitemap. '
1403
- . 'You can also assign genres to a specific category.', $this->domain)
1404
- . '</em>'
1405
- ),
1406
- 'post' => array(
1407
- 'select_news_cat_action' => __('below selected categories in the news sitemap.', $this->domain)
1408
- ),
1409
- 'select' => array(
1410
- 'select_news_lang' => array(
1411
- /* http://www.loc.gov/standards/iso639-2/php/code_list.php */
1412
- __('English', $this->domain) => 'en',
1413
- __('Arabic', $this->domain) => 'ar',
1414
- __('Chinese (simplified)', $this->domain) => 'zh-cn',
1415
- __('Chinese (traditional)', $this->domain) => 'zh-tw',
1416
- __('Dutch', $this->domain) => 'nl',
1417
- __('French', $this->domain) => 'fr',
1418
- __('German', $this->domain) => 'de',
1419
- __('Hebrew', $this->domain) => 'he',
1420
- __('Hindi', $this->domain) => 'hi',
1421
- __('Italian', $this->domain) => 'it',
1422
- __('Japanese', $this->domain) => 'ja',
1423
- __('Norwegian', $this->domain) => 'no',
1424
- __('Portuguese', $this->domain) => 'pt',
1425
- __('Polish', $this->domain) => 'pl',
1426
- __('Russian', $this->domain) => 'ru',
1427
- __('Spanish', $this->domain) => 'es',
1428
- __('Turkish', $this->domain) => 'tr',
1429
- __('Vietnamese', $this->domain) => 'vi'
1430
- ),
1431
- 'select_news_cat_action' => array(
1432
- __('include', $this->domain) => 'inc',
1433
- __('exclude', $this->domain) => 'exc'
1434
- ),
1435
- 'select_news_keyword_type' => array(
1436
- __('News categories', $this->domain) => 'cat',
1437
- __('News tags', $this->domain) => 'tag'
1438
- )
1439
- ),
1440
- 'input' => array(
1441
- ),
1442
- 'checkbox' => array(
1443
- 'cb1' => array(sprintf(__('A <code>post_google_news.xml</code> sitemap will be added to the main <a href="%s" target="_blank">sitemapindex.xml</a>. It is strongly recommended that you take a look at <a href="%s" target="_blank">Google\'s guidelines</a> before enabling this feature.', $this->domain), $this->sitemap_url, 'https://support.google.com/news/publisher/answer/74288?hl=en#sitemapguidelines') => 'enable_news_sitemap'),
1444
- 'cb2' => array(sprintf(__('More info <a href="%s" target="_blank">here</a>.', $this->domain), 'https://support.google.com/news/publisher/answer/116037?hl=en&ref_topic=4359874') => 'enable_news_keywords'),
1445
- 'cb3' => array(__('This ping works separately from the sitemapindex ping, and only occurs when you publish an article in one of the news categories set below.', $this->domain) => 'enable_news_ping'),
1446
- 'cb4' => array(__('Enable this if you have posts assigned to more than one categories.', $this->domain) => 'enable_news_multicat')
1447
- ),
1448
- 'inline_fields' => array(
1449
- ),
1450
- 'post' => array(
1451
- ),
1452
- 'container' => array(
1453
- 'select_news_cat_action' => '',
1454
- 'cb1' => '<em><strong>' . __('Note', $this->domain) . ':</strong> '
1455
- . __('The Google News sitemap is an extension (or sub-module) of '
1456
- . 'the <code>post.xml</code> sitemap, which means it also uses posts from '
1457
- . 'the <strong>Post</strong> post type, but only from categories that are selected.', $this->domain)
1458
- . '</em>'
1459
- )
1460
- );
1461
-
1462
- // Get the options
1463
- $options = $bwp_option_page->get_options(array(
1464
- 'enable_news_sitemap',
1465
- 'enable_news_ping',
1466
- 'enable_news_keywords',
1467
- 'enable_news_multicat',
1468
- 'select_news_lang',
1469
- 'select_news_keyword_type',
1470
- 'select_news_cat_action',
1471
- 'select_news_cats',
1472
- 'input_news_genres'
1473
- ), $this->options);
1474
-
1475
- // Get option from the database
1476
- $options = $bwp_option_page->get_db_options($page, $options);
1477
-
1478
- $option_ignore = array(
1479
- 'select_news_cats',
1480
- 'input_news_genres'
1481
- );
1482
-
1483
- $option_formats = array();
1484
-
1485
- $option_super_admin = $this->site_options;
1486
- }
1487
- elseif ($page == BWP_GXS_STATS)
1488
- {
1489
- $bwp_option_page->set_current_tab(3);
1490
-
1491
- // no save changes button
1492
- add_filter('bwp_option_submit_button', create_function('', 'return "";'));
1493
-
1494
- if ($this->_is_log_empty || 'yes' != $this->options['enable_log'])
1495
- {
1496
- // no log is found, or logging is disabled, hide sidebar to save space
1497
- add_filter('bwp_info_showable', create_function('', 'return "";'));
1498
- }
1499
-
1500
- $form = array(
1501
- 'items' => array(
1502
- 'heading',
1503
- ),
1504
- 'item_labels' => array
1505
- (
1506
- __('Sitemap Generator\'s Log', $this->domain),
1507
- ),
1508
- 'item_names' => array(
1509
- 'h3',
1510
- ),
1511
- 'heading' => array(
1512
- 'h3' => 'yes' == $this->options['enable_log']
1513
- ? '<em>'
1514
- . __('Below are details on how your sitemaps are generated '
1515
- . 'including <span style="color: #999999;">notices</span>, '
1516
- . '<span style="color: #FF0000;">errors</span> and '
1517
- . '<span style="color: #009900;">success messages</span>.', $this->domain)
1518
- . '</em>'
1519
- : '<em>'
1520
- . __('Logging is not currently enabled. '
1521
- . 'You can enable this feature by checking '
1522
- . '"Enable sitemap log" in <strong>XML Sitemaps >> Sitemap log & debug</strong>.', $this->domain)
1523
- . '</em>',
1524
- ),
1525
- 'container' => array(
1526
- 'h3' => 'yes' == $this->options['enable_log'] ? $this->get_logs() : '',
1527
- )
1528
- );
1529
-
1530
- // get the options
1531
- $options = array();
1532
-
1533
- // get option from the database
1534
- $options = $bwp_option_page->get_db_options($page, $options);
1535
-
1536
- $option_ignore = array();
1537
- $option_formats = array();
1538
-
1539
- $option_super_admin = $this->site_options;
1540
- }
1541
- }
1542
-
1543
- if ((isset($_POST['submit_' . $bwp_option_page->get_form_name()])
1544
- || isset($_POST['save_flush_cache']))
1545
- && isset($options) && is_array($options)
1546
- ) {
1547
- // basic security check
1548
- check_admin_referer($page);
1549
-
1550
- foreach ($options as $key => &$option)
1551
- {
1552
- if (in_array($key, $option_ignore)
1553
- || (self::is_normal_admin() && in_array($key, $option_super_admin))
1554
- ) {
1555
- // this option should not be handled here
1556
- // OR not a super admin, and this is a super-admin only setting
1557
- continue;
1558
- }
1559
- else
1560
- {
1561
- if (isset($_POST[$key]))
1562
- {
1563
- // make sure inputs are in expected format
1564
- $bwp_option_page->format_field($key, $option_formats);
1565
- $option = trim(stripslashes($_POST[$key]));
1566
- }
1567
-
1568
- if (!isset($_POST[$key])
1569
- && !isset($form['input'][$key]['disabled'])
1570
- ) {
1571
- // checkbox, exclude disabled input
1572
- $option = '';
1573
- }
1574
- else if (isset($option_formats[$key])
1575
- && 'int' == $option_formats[$key]
1576
- && ('' === $_POST[$key] || 0 > $_POST[$key])
1577
- ) {
1578
- // expect integer but received empty string or negative integer
1579
- $option = $this->options_default[$key];
1580
- }
1581
- }
1582
- }
1583
-
1584
- if ($page == BWP_GXS_OPTION_GENERATOR)
1585
- {
1586
- // handle dynamic options based on public post types and taxonomies
1587
- $ept = array(); // exclude post types from sitemap
1588
- $eppt = array(); // exclude post types from pinging
1589
- $etax = array(); // exclude taxonomies from sitemap
1590
-
1591
- foreach ($_POST as $o => $v)
1592
- {
1593
- if (strpos($o, 'ept_') === 0)
1594
- $ept[] = trim(str_replace('ept_', '', $o));
1595
- elseif (strpos($o, 'eppt_') === 0)
1596
- $eppt[] = trim(str_replace('eppt_', '', $o));
1597
- else if (strpos($o, 'etax_') === 0)
1598
- $etax[] = trim(str_replace('etax_', '', $o));
1599
- }
1600
-
1601
- $options['input_exclude_post_type'] = implode(',', $ept);
1602
- $options['input_exclude_post_type_ping'] = implode(',', $eppt);
1603
- $options['input_exclude_taxonomy'] = implode(',', $etax);
1604
-
1605
- // no more than 50000 URLs per sitemap
1606
- $options['input_item_limit'] = 50000 < $options['input_item_limit']
1607
- ? 50000 : $options['input_item_limit'];
1608
-
1609
- $options['input_split_limit_post'] = 50000 < $options['input_split_limit_post']
1610
- ? 50000 : $options['input_split_limit_post'];
1611
- }
1612
- elseif ($page == BWP_GXS_GOOGLE_NEWS)
1613
- {
1614
- // save google news categories and genres
1615
- $news_cats = array();
1616
- $news_genres = array();
1617
-
1618
- $categories = get_categories(array('hide_empty' => 0));
1619
-
1620
- foreach ($categories as $category)
1621
- {
1622
- if (!empty($_POST[$category->slug]))
1623
- $news_cats[] = $category->term_id;
1624
-
1625
- if (isset($_POST[$category->slug . '_genres'])
1626
- && is_array($_POST[$category->slug . '_genres'])
1627
- ) {
1628
- $genres = $_POST[$category->slug . '_genres'];
1629
- $genres_string = array();
1630
-
1631
- foreach ($genres as $genre)
1632
- $genres_string[] = trim($genre);
1633
-
1634
- $news_genres['cat_' . $category->term_id] = implode(', ', $genres_string);
1635
- }
1636
- }
1637
-
1638
- $options['select_news_cats'] = implode(',', $news_cats);
1639
- $options['input_news_genres'] = $news_genres;
1640
- }
1641
-
1642
- // update per-blog options
1643
- update_option($page, $options);
1644
-
1645
- // if current user is super admin, allow him to update site-only
1646
- // options - this is WPMS compatible
1647
- if (!self::is_normal_admin())
1648
- update_site_option($page, $options);
1649
-
1650
- // refresh the options property to include updated options
1651
- $this->options = array_merge($this->options, $options);
1652
-
1653
- // show success messages when settings are saved
1654
- $this->add_notice(__('All options have been saved.', $this->domain));
1655
-
1656
- // flush cache if needed
1657
- if (isset($_POST['save_flush_cache']))
1658
- $this->_admin_flush_cache();
1659
- }
1660
-
1661
- if ($page == BWP_GXS_OPTION_GENERATOR)
1662
- {
1663
- // handle other non-POST actions for XML Sitemap setting page
1664
-
1665
- // add dynamic checkboxes to the current form
1666
- $this->_add_checkboxes_to_form('sec_post', 'ept_', $form, $dynamic_options);
1667
- $this->_add_checkboxes_to_form('sec_post_ping', 'eppt_', $form, $dynamic_options);
1668
- $this->_add_checkboxes_to_form('sec_tax', 'etax_', $form, $dynamic_options);
1669
-
1670
- if ($this->options['enable_cache'] == 'yes')
1671
- {
1672
- // show a warning if caching is enabled but cache directory is
1673
- // not writable
1674
- $this->cache_directory = $this->_get_cache_directory();
1675
-
1676
- if (!@file_exists($this->cache_directory) || !@is_writable($this->cache_directory))
1677
- {
1678
- $this->add_notice(
1679
- '<strong>' . __('Warning') . ':</strong> '
1680
- . sprintf(__('Cache directory (<code>%s</code>) does not exist or is not writable. '
1681
- . 'Please try CHMODing it to either 755 or 777, or disable caching to hide '
1682
- . 'this warning (not recommended).', $this->domain), $this->cache_directory)
1683
- );
1684
- }
1685
- }
1686
- }
1687
- elseif ($page == BWP_GXS_GOOGLE_NEWS)
1688
- {
1689
- $form['container']['select_news_cat_action'] = $this->get_news_cats();
1690
- }
1691
-
1692
- // assign the form and option array
1693
- $bwp_option_page->init($form, $options + $dynamic_options, $this->form_tabs);
1694
-
1695
- // build the option page
1696
- echo $bwp_option_page->generate_html_form();
1697
- }
1698
-
1699
- public function add_flush_cache_buttons($button)
1700
- {
1701
- $button = str_replace(
1702
- '</p>',
1703
- '&nbsp; <input type="submit" class="button-secondary action" name="save_flush_cache" '
1704
- . 'value="' . __('Save Changes and Flush Cache', $this->domain) . '" />'
1705
- . '&nbsp; <input type="submit" class="button-secondary action" name="flush_cache" '
1706
- . 'value="' . __('Flush Cache', $this->domain) . '" /></p>',
1707
- $button
1708
- );
1709
-
1710
- return $button;
1711
- }
1712
-
1713
- public function add_clear_log_button($button)
1714
- {
1715
- $button = str_replace(
1716
- '</p>',
1717
- '&nbsp; <input type="submit" class="button-secondary action" name="clear_log" value="'
1718
- . __('Clear All Logs', $this->domain) . '" /></p>',
1719
- $button
1720
- );
1721
-
1722
- return $button;
1723
- }
1724
-
1725
- public function flush_cache()
1726
- {
1727
- $deleted = 0;
1728
- $dir = trailingslashit($this->options['input_cache_dir']);
1729
-
1730
- if (is_dir($dir))
1731
- {
1732
- if ($dh = opendir($dir))
1733
- {
1734
- while (($file = readdir($dh)) !== false)
1735
- {
1736
- if (preg_match('/^gxs_[a-z0-9]+\.(xml|xml\.gz)$/i', $file))
1737
- {
1738
- @unlink($dir . $file);
1739
- $deleted++;
1740
- }
1741
- }
1742
-
1743
- closedir($dh);
1744
- }
1745
- }
1746
-
1747
- return $deleted;
1748
- }
1749
-
1750
- public function get_options()
1751
- {
1752
- return $this->options;
1753
- }
1754
-
1755
- private static function _format_header_time($time)
1756
- {
1757
- return bwp_gxs_format_header_time($time);
1758
- }
1759
-
1760
- private static function _get_current_time()
1761
- {
1762
- return current_time('timestamp');
1763
- }
1764
-
1765
- /**
1766
- * Flushes sitemap cache inside admin area
1767
- *
1768
- * @since 1.3.0
1769
- * @access private
1770
- */
1771
- private function _admin_flush_cache()
1772
- {
1773
- if ($deleted = $this->flush_cache())
1774
- {
1775
- $this->add_notice(
1776
- '<strong>' . __('Notice', $this->domain) . ':</strong> '
1777
- . sprintf(
1778
- __('<strong>%d</strong> cached sitemaps have '
1779
- . 'been flushed successfully!', $this->domain),
1780
- $deleted)
1781
- );
1782
-
1783
- return true;
1784
- }
1785
- else
1786
- {
1787
- $this->add_notice(
1788
- '<strong>' . __('Notice', $this->domain) . ':</strong> '
1789
- . __('Could not delete any cached sitemaps. '
1790
- . 'Please manually check the cache directory.', $this->domain)
1791
- );
1792
-
1793
- return false;
1794
- }
1795
- }
1796
-
1797
- /**
1798
- * Normalize path separator in different environments
1799
- *
1800
- * @access private
1801
- */
1802
- private function _normalize_path_separator($path = '')
1803
- {
1804
- return str_replace('\\', '/', $path);
1805
- }
1806
-
1807
- /**
1808
- * Displays sitemap generation error with an error code
1809
- *
1810
- * @since 1.3.0
1811
- * @access private
1812
- */
1813
- private function _die($message, $error_code)
1814
- {
1815
- wp_die(__('<strong>BWP Google XML Sitemaps Error:</strong> ', $this->domain)
1816
- . $message, __('BWP Google XML Sitemaps Error', $this->domain),
1817
- array('response' => $error_code)
1818
- );
1819
- }
1820
-
1821
- public function commit_logs()
1822
- {
1823
- update_option(BWP_GXS_LOG, $this->logs);
1824
- }
1825
-
1826
- public function do_log($message, $error = true, $sitemap = false)
1827
- {
1828
- /* _deprecated_function(__FUNCTION__, '1.3.0', 'BWP_SIMPLE_GXS::log_message'); */
1829
- $this->log_message($message, $error, $sitemap);
1830
- }
1831
-
1832
- public function log_message($message, $error = true, $sitemap = false)
1833
- {
1834
- $time = self::_get_current_time();
1835
-
1836
- $debug_message = $this->_debug_extra
1837
- ? __('Debug extra was on', $this->domain)
1838
- : __('Debug was on', $this->domain);
1839
-
1840
- $debug = $this->_debug ? ' (' . $debug_message . ')' : '';
1841
-
1842
- if (!$sitemap && 'yes' == $this->options['enable_log']
1843
- && !empty($message)
1844
- ) {
1845
- $this->logs['log'][] = array(
1846
- 'log' => $message . $debug,
1847
- 'time' => $time,
1848
- 'error' => $error
1849
- );
1850
- }
1851
- elseif (!is_bool($sitemap))
1852
- {
1853
- $this->logs['sitemap'][$sitemap] = array(
1854
- 'time' => $time,
1855
- 'url' => $sitemap
1856
- );
1857
- }
1858
- }
1859
-
1860
- public function elog($message, $die = false, $error_code = 404)
1861
- {
1862
- $this->log_error($message, $die, $error_code);
1863
- }
1864
-
1865
- public function log_error($message, $die = false, $error_code = 404)
1866
- {
1867
- $this->log_message($message);
1868
-
1869
- if (true == $die)
1870
- {
1871
- $this->commit_logs();
1872
- $this->_die($message, $error_code);
1873
- }
1874
- }
1875
-
1876
- public function slog($message)
1877
- {
1878
- $this->log_success($message);
1879
- }
1880
-
1881
- public function log_success($message)
1882
- {
1883
- $this->log_message($message, false);
1884
- }
1885
-
1886
- public function nlog($message)
1887
- {
1888
- $this->log_notice($message);
1889
- }
1890
-
1891
- public function log_notice($message)
1892
- {
1893
- $this->log_message($message, 'notice');
1894
- }
1895
-
1896
- public function smlog($url)
1897
- {
1898
- $this->log_sitemap($url);
1899
- }
1900
-
1901
- public function log_sitemap($url)
1902
- {
1903
- $this->log_message('', false, $url);
1904
- }
1905
-
1906
- public function get_sitemap_logs()
1907
- {
1908
- $logs = $this->logs['sitemap'];
1909
-
1910
- if (!$logs || !is_array($logs) || 0 == sizeof($logs))
1911
- return false;
1912
-
1913
- $return = array();
1914
-
1915
- foreach ($logs as $log)
1916
- $return[$log['url']] = $log['time'];
1917
-
1918
- return $return;
1919
- }
1920
-
1921
- public function get_logs($sitemap = false)
1922
- {
1923
- $logs = !$sitemap ? $this->logs['log'] : $this->logs['sitemap'];
1924
-
1925
- if (!$logs || !is_array($logs) || 0 == sizeof($logs))
1926
- {
1927
- return $sitemap
1928
- ? '<em>' . __('It appears that no sitemap has been generated yet, '
1929
- . 'or you have recently cleared the sitemap log.', $this->domain)
1930
- . '</em>'
1931
- : strtoupper(__('No log yet!', $this->domain)) . "\n";
1932
- }
1933
-
1934
- $log_class = !$sitemap ? 'bwp-gxs-log bwp-gxs-log-big' : 'bwp-gxs-log bwp-gxs-log-small';
1935
- $log_str = !$sitemap
1936
- ? '<li class="bwp-clear" style="margin-top: 5px; line-height: 1.7;">'
1937
- . '<span style="float: left; margin-right: 5px;">%s &mdash;</span> '
1938
- . '<span style="color: #%s;">%s</span></li>'
1939
- : '<span style="margin-top: 5px; display: inline-block;">'
1940
- . __('<a href="%s" target="_blank">%s</a> was generated on <strong>%s</strong>.', $this->domain)
1941
- . '</span><br />';
1942
-
1943
- $output = $sitemap
1944
- ? '<span style="display:inline-block; margin-bottom: 7px;"><em>'
1945
- . __('Below you can find a list of generated sitemaps:', $this->domain)
1946
- . '</em></span>'
1947
- . '<br />'
1948
- : '';
1949
-
1950
- $output .= '<ul class="' . $log_class . '">' . "\n";
1951
-
1952
- if (!$sitemap)
1953
- {
1954
- krsort($logs);
1955
- }
1956
- else
1957
- {
1958
- $log_time = array();
1959
-
1960
- foreach ($logs as $key => $row)
1961
- $log_time[$key] = $row['time'];
1962
-
1963
- array_multisort($log_time, SORT_DESC, $logs);
1964
- }
1965
-
1966
- foreach ($logs as $log)
1967
- {
1968
- if (isset($log['error']))
1969
- {
1970
- $color = !is_bool($log['error']) && 'notice' == $log['error'] ? '999999' : '';
1971
-
1972
- if ('' == $color)
1973
- $color = (!$log['error']) ? '009900' : 'FF0000';
1974
-
1975
- /* translators: date format, see http://php.net/date */
1976
- $output .= sprintf($log_str,
1977
- date(__('M j, Y : H:i:s', $this->domain), $log['time']),
1978
- $color, $log['log']) . "\n";
1979
- }
1980
- else
1981
- {
1982
- // @since 1.1.5 - check for mapped domain
1983
- global $wpdb, $blog_id;
1984
-
1985
- if (!empty($wpdb->dmtable) && !empty($wpdb->blogs) && self::is_multisite())
1986
- {
1987
- // @todo 1.3.0 recheck whether this is needed
1988
- $mapped_domain = $wpdb->get_var($wpdb->prepare('
1989
- SELECT wpdm.domain as mapped_domain
1990
- FROM ' . $wpdb->blogs . ' wpblogs
1991
- LEFT JOIN ' . $wpdb->dmtable . ' wpdm
1992
- ON wpblogs.blog_id = wpdm.blog_id AND wpdm.active = 1
1993
- WHERE wpblogs.public = 1 AND wpblogs.spam = 0
1994
- AND wpblogs.deleted = 0 AND wpblogs.blog_id = %d', $blog_id
1995
- ));
1996
- }
1997
-
1998
- // @todo default to the main site's scheme
1999
- $home = @parse_url(home_url());
2000
-
2001
- $sitemap_struct = !empty($mapped_domain)
2002
- ? str_replace($home['host'],
2003
- str_replace(array('http', 'https'), '', $mapped_domain),
2004
- $this->sitemap_url_struct)
2005
- : $this->sitemap_url_struct;
2006
-
2007
- $sitemap_struct = sprintf($sitemap_struct, $log['url']);
2008
-
2009
- $output .= sprintf($log_str,
2010
- $sitemap_struct,
2011
- $log['url'],
2012
- date(__('M j, Y : H:i:s', $this->domain),
2013
- $log['time'])) . "\n";
2014
- }
2015
- }
2016
-
2017
- return $output . '</ul>' . "\n";
2018
- }
2019
-
2020
- public function do_robots($output, $public)
2021
- {
2022
- global $blog_id, $wpdb;
2023
-
2024
- if ('0' == $public)
2025
- return $output;
2026
-
2027
- if (self::is_subdomain_install() || (isset($blog_id) && 1 == $blog_id))
2028
- {
2029
- $output .= "\n";
2030
- $output .= 'Sitemap: ' . $this->sitemap_url;
2031
- $output .= "\n";
2032
- }
2033
-
2034
- // add all other sitemapindex within the network into the primary
2035
- // blog's robots.txt, including mapped domains
2036
- if (self::is_multisite() && 'yes' == $this->options['enable_global_robots']
2037
- && isset($blog_id) && 1 == $blog_id
2038
- ) {
2039
- $blogs = empty($wpdb->dmtable)
2040
- ? $wpdb->get_results("
2041
- SELECT *
2042
- FROM $wpdb->blogs
2043
- WHERE public = 1
2044
- AND spam = 0
2045
- AND deleted = 0")
2046
- : $wpdb->get_results('
2047
- SELECT
2048
- wpdm.domain as mapped_domain,
2049
- wpblogs.*
2050
- FROM ' . $wpdb->blogs . ' wpblogs
2051
- LEFT JOIN ' . $wpdb->dmtable . ' wpdm
2052
- ON wpblogs.blog_id = wpdm.blog_id
2053
- AND wpdm.active = 1
2054
- WHERE wpblogs.public = 1
2055
- AND wpblogs.spam = 0
2056
- AND wpblogs.deleted = 0');
2057
-
2058
- $num_sites = 0;
2059
-
2060
- foreach ($blogs as $blog)
2061
- {
2062
- if (1 == $blog->blog_id)
2063
- continue;
2064
-
2065
- $scheme = is_ssl() ? 'https://' : 'http://';
2066
- $path = rtrim($blog->path, '/');
2067
-
2068
- // @since 1.3.0 allow mapped domains
2069
- // @see https://support.google.com/webmasters/answer/75712?hl=en&ref_topic=4581190
2070
- $blog_domain = empty($blog->mapped_domain)
2071
- ? $blog->domain . $path
2072
- : $blog->mapped_domain;
2073
-
2074
- if (!empty($blog_domain))
2075
- {
2076
- $output .= 'Sitemap: ' . str_replace(home_url(),
2077
- $scheme . $blog_domain,
2078
- $this->sitemap_url) . "\n";
2079
-
2080
- $num_sites++;
2081
- }
2082
- }
2083
-
2084
- if (!empty($num_sites))
2085
- $output .= "\n";
2086
- }
2087
-
2088
- return $output;
2089
- }
2090
-
2091
- private function get_news_cats()
2092
- {
2093
- // News categories
2094
- $news_cats = explode(',', $this->options['select_news_cats']);
2095
- $categories = get_categories(array('hide_empty' => 0));
2096
-
2097
- // News genres
2098
- $news_genres = $this->options['input_news_genres'];
2099
-
2100
- // Genres taken from here: http://support.google.com/news/publisher/bin/answer.py?hl=en&answer=93992
2101
- $genres = array(
2102
- 'PressRelease',
2103
- 'Satire',
2104
- 'Blog',
2105
- 'OpEd',
2106
- 'Opinion',
2107
- 'UserGenerated'
2108
- );
2109
-
2110
- $return = '<table class="bwp-table">' . "\n";
2111
- $return .= '<thead>' . "\n"
2112
- . '<tr><th><span>#</span></th><th><span>'
2113
- . __('Category\'s name', $this->domain) . '</span></th><th>'
2114
- . sprintf(__('<span>Genres used for this category</span>'
2115
- . ' (more info <a href="%s" target="_blank">here</a>)', $this->domain),
2116
- 'http://support.google.com/news/publisher/bin/answer.py?hl=en&answer=93992')
2117
- . '</th></tr>' . "\n"
2118
- . '</thead>';
2119
- $return .= '<tbody>' . "\n";
2120
-
2121
- foreach ($categories as $category)
2122
- {
2123
- $return .= '<tr>' . "\n";
2124
-
2125
- $genres_cbs = '';
2126
-
2127
- foreach ($genres as $genre)
2128
- {
2129
- $checked = '';
2130
-
2131
- if (isset($news_genres['cat_' . $category->term_id]))
2132
- {
2133
- $genres_ary = explode(', ', $news_genres['cat_' . $category->term_id]);
2134
- $checked = in_array($genre, $genres_ary) ? ' checked="checked" ' : '';
2135
- }
2136
-
2137
- $genres_cbs .= '<input type="checkbox" '
2138
- . 'name="' . esc_attr($category->slug) . '_genres[]" '
2139
- . 'value="' . $genre . '"' . $checked . '/> '
2140
- . $genre . ' &nbsp;&nbsp;&nbsp;&nbsp;';
2141
- }
2142
-
2143
- $checked = in_array($category->term_id, $news_cats) ? ' checked="checked" ' : '';
2144
-
2145
- $return .= '<td><input type="checkbox" name="' . esc_attr($category->slug) . '" '
2146
- . 'value="' . esc_attr($category->slug) . '"' . $checked . ' /></td>' . "\n"
2147
- . '<td class="bwp_gxs_news_cat_td">' . esc_html($category->name) . '</td>' . "\n"
2148
- . '<td>' . $genres_cbs . '</td>' . "\n";
2149
-
2150
- $return .= '</tr>' . "\n";
2151
- }
2152
-
2153
- $return .= '</tbody>' . "\n";
2154
- $return .= '</table>' . "\n";
2155
-
2156
- return $return;
2157
-
2158
- }
2159
-
2160
- /**
2161
- * Redirect to correct domain
2162
- *
2163
- * This plugin generates sitemaps dynamically and exits before WordPress
2164
- * does any canonical redirection. This function makes sure non-www domain
2165
- * is redirected and vice versa.
2166
- *
2167
- * @since 1.0.1
2168
- * @access private
2169
- */
2170
- private function _canonical_redirect($sitemap_name)
2171
- {
2172
- $requested_url = is_ssl() ? 'https://' : 'http://';
2173
- $requested_url .= $_SERVER['HTTP_HOST'];
2174
- $requested_url .= $_SERVER['REQUEST_URI'];
2175
-
2176
- $original = @parse_url($requested_url);
2177
- if (false === $original)
2178
- return;
2179
-
2180
- // www.example.com vs example.com
2181
- $user_home = @parse_url(home_url());
2182
- if (!empty($user_home['host']))
2183
- $host = $user_home['host'];
2184
- else
2185
- return;
2186
-
2187
- if (strtolower($original['host']) == strtolower($host)
2188
- || (strtolower($original['host']) != 'www.' . strtolower($host)
2189
- && 'www.' . strtolower($original['host']) != strtolower($host))
2190
- ) {
2191
- $host = $original['host'];
2192
- }
2193
- else
2194
- {
2195
- wp_redirect(sprintf($this->sitemap_url_struct, $sitemap_name), 301);
2196
- exit;
2197
- }
2198
- }
2199
-
2200
- /**
2201
- * A convenient function to add wanted modules or sub modules
2202
- *
2203
- * When you filter the 'bwp_gxs_modules' hook it is recommended that you
2204
- * use this function.
2205
- *
2206
- * @access public
2207
- */
2208
- public function add_module($module, $sub_module = '')
2209
- {
2210
- // Make sure the names are well-formed
2211
- $module = preg_replace('/[^a-z0-9-_\s]/ui', '', $module);
2212
- $module = trim(str_replace(' ', '_', $module));
2213
-
2214
- $sub_module = preg_replace('/[^a-z0-9-_\s]/ui', '', $sub_module);
2215
- $sub_module = trim(str_replace(' ', '_', $sub_module));
2216
-
2217
- if (empty($sub_module))
2218
- {
2219
- if (!isset($this->modules[$module]))
2220
- {
2221
- $this->modules[$module] = array();
2222
- }
2223
-
2224
- return;
2225
- }
2226
-
2227
- if (!isset($this->modules[$module])
2228
- || !is_array($this->modules[$module])
2229
- ) {
2230
- $this->modules[$module] = array($sub_module);
2231
- }
2232
- else if (!in_array($sub_module, $this->modules[$module]))
2233
- {
2234
- $this->modules[$module][] = $sub_module;
2235
- }
2236
- }
2237
-
2238
- /**
2239
- * A convenient function to remove unwanted modules or sub modules
2240
- *
2241
- * When you filter the 'bwp_gxs_modules' hook it is recommended that you use this function.
2242
- *
2243
- * @access public
2244
- */
2245
- public function remove_module($module = '', $sub_module = '')
2246
- {
2247
- if (empty($module) || !isset($this->modules[$module]))
2248
- return false;
2249
-
2250
- if (empty($sub_module))
2251
- {
2252
- unset($this->modules[$module]);
2253
- }
2254
- else
2255
- {
2256
- $module = trim($module);
2257
- $sub_module = trim($sub_module);
2258
- $temp = $this->modules[$module];
2259
-
2260
- foreach ($temp as $key => $subm)
2261
- {
2262
- if ($sub_module == $subm)
2263
- {
2264
- unset($this->modules[$module][$key]);
2265
- return false;
2266
- }
2267
- }
2268
- }
2269
- }
2270
-
2271
- /**
2272
- * Builds a list of sitemap modules that can be generated
2273
- *
2274
- * @access private
2275
- */
2276
- private function _build_sitemap_modules()
2277
- {
2278
- $modules = array();
2279
- $this->modules = &$modules;
2280
-
2281
- // site home URL sitemap - @since 1.1.5
2282
- if ('yes' == $this->options['enable_sitemap_site'])
2283
- $this->add_module('site');
2284
-
2285
- // module exclusion list
2286
- $excluded_post_types = explode(',', $this->options['input_exclude_post_type']);
2287
- $excluded_taxonomies = explode(',', $this->options['input_exclude_taxonomy']);
2288
-
2289
- // add public post types to module list
2290
- $this->post_types = get_post_types(
2291
- array('public' => true), 'objects'
2292
- );
2293
-
2294
- foreach ($this->post_types as $post_type)
2295
- {
2296
- // Page will have its own
2297
- if ('page' != $post_type->name && !in_array($post_type->name, $excluded_post_types))
2298
- $modules['post'][] = $post_type->name;
2299
- }
2300
-
2301
- // google News module, @since 1.2.0
2302
- if ('yes' == $this->options['enable_news_sitemap'])
2303
- $this->add_module('post', 'google_news');
2304
-
2305
- // add pages to module list
2306
- if (!in_array('page', $excluded_post_types))
2307
- $modules['page'] = array('page');
2308
-
2309
- // add archive pages to module list
2310
- if ('yes' == $this->options['enable_sitemap_date'])
2311
- $modules['archive'] = array('monthly', 'yearly');
2312
-
2313
- // add taxonomies to module list
2314
- $this->taxonomies = get_taxonomies(array('public' => true), '');
2315
- if ('yes' == $this->options['enable_sitemap_taxonomy'])
2316
- {
2317
- foreach ($this->taxonomies as $taxonomy)
2318
- {
2319
- if (!in_array($taxonomy->name, $excluded_taxonomies))
2320
- $modules['taxonomy'][] = $taxonomy->name;
2321
- }
2322
- }
2323
-
2324
- // remove some unnecessary sitemaps
2325
- $this->remove_module('post', 'attachment');
2326
- $this->remove_module('taxonomy', 'post_format');
2327
- $this->remove_module('taxonomy', 'nav_menu');
2328
-
2329
- // add / Remove modules based on users' preferences
2330
- if ('yes' == $this->options['enable_sitemap_author'])
2331
- $this->add_module('author');
2332
-
2333
- if ('yes' == $this->options['enable_sitemap_external'])
2334
- $this->add_module('page', 'external');
2335
-
2336
- // hook for a custom module list
2337
- do_action('bwp_gxs_modules_built', $this->modules, $this->post_types, $this->taxonomies);
2338
-
2339
- return $this->modules;
2340
- }
2341
-
2342
- private function _prepare_sitemap_modules()
2343
- {
2344
- $modules = $this->modules;
2345
- $this->requested_modules = array();
2346
-
2347
- foreach ($modules as $module => $sub_modules)
2348
- {
2349
- if (sizeof($sub_modules) == 0)
2350
- {
2351
- $this->requested_modules[] = array(
2352
- 'module' => $module,
2353
- 'sub_module' => '',
2354
- 'module_name' => $module
2355
- );
2356
-
2357
- continue;
2358
- }
2359
-
2360
- foreach ($sub_modules as $sub_module)
2361
- {
2362
- $module_name = $module . '_' . $sub_module;
2363
-
2364
- if (isset($this->post_types[$sub_module]))
2365
- {
2366
- // this is a post type module
2367
- if ('post' == $sub_module || 'page' == $sub_module || 'attachment' == $sub_module)
2368
- $module_name = $module;
2369
- }
2370
- else if ('google_news' == $sub_module)
2371
- {
2372
- // this is the google news sitemap module
2373
- }
2374
- else if ('yes' == $this->options['enable_sitemap_taxonomy']
2375
- && isset($this->taxonomies[$sub_module])
2376
- ) {
2377
- // this is a taxonomy sitemap module
2378
- }
2379
- else if (!empty($sub_module))
2380
- {
2381
- // any sitemap module that has a sub-module
2382
- }
2383
-
2384
- $this->requested_modules[] = array(
2385
- 'module' => $module,
2386
- 'sub_module' => $sub_module,
2387
- 'module_name' => $module_name
2388
- );
2389
- }
2390
- }
2391
- }
2392
-
2393
- /**
2394
- * Gets module label to display in friendly log message
2395
- *
2396
- * This function needs updating whenever a new sitemap type (new module) is
2397
- * registered.
2398
- *
2399
- * @since 1.3.0
2400
- * @access private
2401
- */
2402
- private function _get_module_label($module, $sub_module)
2403
- {
2404
- if ($module == 'post')
2405
- {
2406
- if ($sub_module == 'google_news')
2407
- {
2408
- return sprintf(
2409
- __('Google news posts that are published within last 48 hours '
2410
- . '(as per <a href="%s" target="_blank">Google\'s guidelines</a>)', $this->domain),
2411
- 'https://support.google.com/news/publisher/answer/74288?hl=en#sitemapguidelines'
2412
- );
2413
- }
2414
-
2415
- if (empty($sub_module))
2416
- return __('Post');
2417
-
2418
- return $this->post_types[$sub_module]->labels->singular_name;
2419
- }
2420
- elseif ($module == 'page')
2421
- {
2422
- if ($sub_module == 'external')
2423
- return __('External page', $this->domain);
2424
-
2425
- return __('Page');
2426
- }
2427
- elseif ($module == 'taxonomy')
2428
- {
2429
- return $this->taxonomies[$sub_module]->labels->singular_name;
2430
- }
2431
- elseif ($module == 'archive')
2432
- {
2433
- return __('Date archive', $this->domain);
2434
- }
2435
- elseif ($module == 'author')
2436
- {
2437
- return __('Author archive', $this->domain);
2438
- }
2439
-
2440
- return false;
2441
- }
2442
-
2443
- private static function _get_modules_from_query_var($module)
2444
- {
2445
- preg_match('/([a-z0-9]+)_([a-z0-9_-]+)$/iu', $module, $matches);
2446
-
2447
- if (0 == sizeof($matches))
2448
- return false;
2449
- else
2450
- return $matches;
2451
- }
2452
-
2453
- /**
2454
- * Serves sitemap when needed using correct sitemap module
2455
- *
2456
- * @access public
2457
- */
2458
- public function request_sitemap($wp_query)
2459
- {
2460
- if (isset($wp_query->query_vars['gxs_module']))
2461
- {
2462
- // friendly sitemap url is used
2463
- // sitemap module and sub-module are separated into two different
2464
- // query variables
2465
- $module = $wp_query->query_vars['gxs_module'];
2466
- $sub_module = isset($wp_query->query_vars['gxs_sub_module'])
2467
- ? $wp_query->query_vars['gxs_sub_module'] : '';
2468
-
2469
- if (!empty($module))
2470
- $this->_load_sitemap_module($module, $sub_module);
2471
- }
2472
- else if (isset($wp_query->query_vars[$this->query_var_non_perma]))
2473
- {
2474
- // non-friendly sitemap url is used, i.e. http://example.com/?bwpsitemap=xxx
2475
- $sitemap_name = $wp_query->query_vars[$this->query_var_non_perma];
2476
- $modules = self::_get_modules_from_query_var($sitemap_name);
2477
-
2478
- if ($modules && is_array($modules))
2479
- $this->_load_sitemap_module($modules[1], $modules[2]);
2480
- else
2481
- $this->_load_sitemap_module($sitemap_name);
2482
- }
2483
- }
2484
-
2485
- /**
2486
- * Checks whether requested sitemap is a BWP sitemap
2487
- *
2488
- * @since 1.3.0
2489
- * @access private
2490
- */
2491
- private static function _is_bwp_sitemap($sitemap_name)
2492
- {
2493
- $third_party_sitemaps = array(
2494
- 'sitemap_index',
2495
- 'post_tag-sitemap'
2496
- );
2497
-
2498
- if (in_array($sitemap_name, $third_party_sitemaps))
2499
- return false;
2500
-
2501
- return true;
2502
- }
2503
-
2504
- /**
2505
- * Inits building some sitemap generation stats
2506
- *
2507
- * @since 1.3.0
2508
- * @access private
2509
- */
2510
- private function _init_stats()
2511
- {
2512
- // track sitemap generation time
2513
- timer_start();
2514
-
2515
- // number of queries used to generate a sitemap
2516
- $this->build_stats['query'] = get_num_queries();
2517
- }
2518
-
2519
- /**
2520
- * Inits the sitemap generation process
2521
- *
2522
- * @since 1.3.0
2523
- * @access private
2524
- */
2525
- private function _init_sitemap_generation()
2526
- {
2527
- if (!$this->_debug)
2528
- {
2529
- // don't let error reporting messes up sitemap generation when
2530
- // debug is off
2531
- error_reporting(0);
2532
- }
2533
-
2534
- $this->_init_stats();
2535
-
2536
- // don't let other instrusive plugins mess up our permalnks - @since 1.1.4
2537
- remove_filter('post_link', 'syndication_permalink', 1, 3);
2538
- remove_filter('page_link', 'suffusion_unlink_page', 10, 2);
2539
- }
2540
-
2541
- private function _load_sitemap_from_cache($module_name, $sitemap_name)
2542
- {
2543
- if ('yes' != $this->options['enable_cache'] || $this->_debug)
2544
- {
2545
- // cache is not enabled or debug is enabled
2546
- return false;
2547
- }
2548
-
2549
- $cache_status = $this->cache->get_cache_status($module_name, $sitemap_name);
2550
-
2551
- if (!$cache_status)
2552
- {
2553
- // cache is invalid
2554
- return false;
2555
- }
2556
- else if ($cache_status == '304')
2557
- {
2558
- // http cache can be used, we don't need to output anything except
2559
- // for some headers
2560
- $this->_send_headers(array_merge(
2561
- array('status' => 304), $this->cache->get_headers()
2562
- ));
2563
- }
2564
- else if ($cache_status == '200')
2565
- {
2566
- // file cache is ok, output the cached sitemap
2567
- $this->_send_headers($this->cache->get_headers());
2568
-
2569
- $cache_file = $this->cache->get_cache_file();
2570
-
2571
- if ($this->_is_gzip_ok() && !self::is_gzipped())
2572
- {
2573
- // when server or script is not already gzipping, and gzip is
2574
- // allowed, we simply read the cached file without any
2575
- // additional compression because cached sitemap files are
2576
- // stored as gzipped files.
2577
- readfile($cache_file);
2578
- }
2579
- else
2580
- {
2581
- // if we can't use a gzipped file, decompress before reading it
2582
- readgzfile($cache_file);
2583
- }
2584
- }
2585
-
2586
- if (in_array($cache_status, array('200', '304')))
2587
- {
2588
- $this->log_success(sprintf(
2589
- __('Successfully served a cached version of <em>%s.xml</em>.', $this->domain)
2590
- , $sitemap_name));
2591
-
2592
- $this->commit_logs();
2593
-
2594
- return true;
2595
- }
2596
- }
2597
-
2598
- /**
2599
- * Puts the current sitemap output in cache
2600
- *
2601
- * @return bool|string bool cache file could not be written or read
2602
- * string cache file's modification timestamp
2603
- * @since 1.3.0
2604
- * @access private
2605
- */
2606
- private function _cache_sitemap()
2607
- {
2608
- if ('yes' != $this->options['enable_cache'] || $this->_debug)
2609
- {
2610
- // cache is not enabled or debug is enabled
2611
- return false;
2612
- }
2613
-
2614
- if (!@is_writable($this->cache_directory))
2615
- {
2616
- $this->log_error(sprintf(
2617
- __('Cache directory <strong>%s</strong> is not writable, '
2618
- . 'no cache file was created.' , $this->domain),
2619
- $this->cache_directory
2620
- ));
2621
-
2622
- return false;
2623
- }
2624
-
2625
- $lastmod = $this->cache->write_cache($this->output);
2626
-
2627
- if (!$lastmod)
2628
- {
2629
- $this->log_error(sprintf(
2630
- __('Could not write sitemap file to cache directory <strong>%s</strong>' , $this->domain),
2631
- $this->cache_directory));
2632
-
2633
- return false;
2634
- }
2635
-
2636
- return $lastmod;
2637
- }
2638
-
2639
- /**
2640
- * Gets correct module file to generate a sitemap
2641
- *
2642
- * @access private
2643
- */
2644
- private function _get_module_file($module_name, $sitemap_name, $is_submodule = false)
2645
- {
2646
- $module_dir = trailingslashit($this->module_directory);
2647
- $custom_module_dir = $this->custom_module_directory
2648
- ? trailingslashit($this->custom_module_directory)
2649
- : '';
2650
-
2651
- $module_file = ''; // path to module file
2652
- $module_filename = $module_name . '.php'; // filename of the module
2653
-
2654
- if (!empty($custom_module_dir)
2655
- && @file_exists($custom_module_dir . $module_filename)
2656
- ) {
2657
- // a module file exists at custom module directory
2658
- $module_file = $custom_module_dir . $module_filename;
2659
-
2660
- $this->log_notice(sprintf(
2661
- __('<em>%s.xml</em> will be served using module file <em>%s</em> '
2662
- . 'in the custom module directory.', $this->domain)
2663
- , $sitemap_name, $module_filename));
2664
-
2665
- $this->_is_using_custom_module = true;
2666
- }
2667
- else if (@file_exists($module_dir . $module_filename))
2668
- {
2669
- // use module at default module directory
2670
- $module_file = $module_dir . $module_filename;
2671
- }
2672
- else
2673
- {
2674
- if ($is_submodule)
2675
- {
2676
- // sub-module file is missing, use parent module file instead
2677
- $this->log_notice(sprintf(
2678
- __('<em>%s.xml</em> will be served using module file <em>%s</em>.', $this->domain)
2679
- , $sitemap_name, preg_replace('/_.*(\.[a-z]+)/ui', '$1', $module_filename)));
2680
- }
2681
- else
2682
- {
2683
- // no module available, log an error
2684
- $error_log = sprintf(
2685
- __('<strong>%s</strong> can not be served because of '
2686
- . 'a missing module file: <strong>%s</strong>.', $this->domain)
2687
- , $sitemap_name, $module_filename);
2688
-
2689
- // issue a WP die with a 500 internal server error response code
2690
- $this->log_error($error_log, true, 500);
2691
- }
2692
- }
2693
-
2694
- return $module_file;
2695
- }
2696
-
2697
- /**
2698
- * Locates correct sitemap module to serve requested sitemap
2699
- *
2700
- * @access private
2701
- */
2702
- private function _load_sitemap_module($module, $sub_module = '')
2703
- {
2704
- $success = false; // can we successfully serve the sitemap?
2705
- $module_found = false; // do we have a sitemap module as requested
2706
- $module_loaded = false;
2707
-
2708
- $module = stripslashes($module);
2709
- $sub_module = stripslashes($sub_module);
2710
- $part = 0;
2711
- $module_name = ''; // the final module name used to generate requested sitemap
2712
-
2713
- // a full sitemap name consists of a module and a sub-module including
2714
- // any split part (`_part1`, `_part2`, etc.) if any
2715
- $sitemap_name = !empty($sub_module) ? $module . '_' . $sub_module : $module;
2716
-
2717
- if (!self::_is_bwp_sitemap($sitemap_name))
2718
- {
2719
- // not a BWP sitemap, return this handle to WordPress
2720
- return false;
2721
- }
2722
-
2723
- // make sure we're on the canonical domain to avoid styling issue
2724
- $this->_canonical_redirect($sitemap_name);
2725
-
2726
- if ('yes' == $this->options['enable_sitemap_split_post']
2727
- && (preg_match('/_part([0-9]+)$/i', $sub_module, $matches)
2728
- || preg_match('/part([0-9]+)$/i', $sub_module, $matches))
2729
- ) {
2730
- // Check whether or not splitting is enabled and the sub_module has a
2731
- // 'part' part, if so we strip the part from sub-module name
2732
- $sub_module = str_replace($matches[0], '', $sub_module);
2733
-
2734
- // save the requested part for later use
2735
- $part = (int) $matches[1];
2736
- }
2737
-
2738
- $modules = $this->_build_sitemap_modules();
2739
-
2740
- if ('sitemapindex' != $sitemap_name && isset($modules[$module]))
2741
- {
2742
- // the currently requested sitemap is not the sitemapindex, and a
2743
- // sitemap module is available
2744
- $module_found = true;
2745
-
2746
- if (!empty($sub_module))
2747
- {
2748
- // a sub-module is being requested, and found
2749
- if (in_array($sub_module, $modules[$module]))
2750
- $module_name = $module . '_' . $sub_module;
2751
- else
2752
- $module_found = false;
2753
- }
2754
- else
2755
- {
2756
- $module_name = $module;
2757
- }
2758
- }
2759
- else if ('sitemapindex' == $sitemap_name)
2760
- {
2761
- // this is the sitemapindex, use sitemapindex sitemap module
2762
- $module_found = true;
2763
- $module_name = 'sitemapindex';
2764
- }
2765
-
2766
- if (!$module_found)
2767
- {
2768
- // no module is available to handle requested sitemap
2769
- $message = sprintf(
2770
- __('Requested sitemap (<em>%s.xml</em>) '
2771
- . 'was not found or not enabled.', $this->domain),
2772
- $sitemap_name
2773
- );
2774
-
2775
- // @since 1.3.0 log a notice instead of an error
2776
- $this->log_notice($message);
2777
- $this->commit_logs();
2778
-
2779
- // @since 1.3.0 return this handle to WordPress
2780
- return false;
2781
- }
2782
-
2783
- $this->_init_sitemap_generation();
2784
-
2785
- if ($this->_load_sitemap_from_cache($module_name, $sitemap_name))
2786
- {
2787
- // if sitemap can be loaded from cache, no need to do anything else
2788
- exit;
2789
- }
2790
-
2791
- // load the base module so other modules can extend it
2792
- require_once dirname(__FILE__) . '/class-bwp-gxs-module.php';
2793
-
2794
- // global module data for later use
2795
- $this->module_data = array(
2796
- 'module' => $module,
2797
- 'sub_module' => $sub_module,
2798
- 'module_key' => $module_name, // leave this for back-compat
2799
- 'module_name' => $module_name, // @since 1.3.0 this is the same as module_key
2800
- 'module_part' => $part, // leave this for back-compat
2801
- 'part' => $part,
2802
- 'sitemap_name' => $sitemap_name // @since 1.3.0 this is the actual sitemap name
2803
- );
2804
-
2805
- if ('sitemapindex' != $sitemap_name)
2806
- {
2807
- // generating a regular sitemap
2808
- $module_file = ''; // path to module file
2809
-
2810
- if (!empty($sub_module))
2811
- {
2812
- // try generating the sitemap using a sub-module
2813
- if (!empty($this->module_map[$sub_module]))
2814
- {
2815
- // this module is mapped to use another module, no need to
2816
- // update global module data
2817
- $module_name = $module . '_' . $this->module_map[$sub_module];
2818
- }
2819
-
2820
- $module_file = $this->_get_module_file($module_name, $sitemap_name, true);
2821
- }
2822
-
2823
- if (empty($module_file))
2824
- {
2825
- // try again with parent module, no need to update global module data
2826
- $module_name = $module;
2827
- $module_file = $this->_get_module_file($module_name, $sitemap_name);
2828
- }
2829
-
2830
- if (empty($module_file))
2831
- {
2832
- // no luck, let WordPress handles this page
2833
- // reach here if gxs debug is off
2834
- return false;
2835
- }
2836
-
2837
- include_once $module_file;
2838
-
2839
- $class_name = 'BWP_GXS_MODULE_' . str_replace('-', '_', $module_name);
2840
-
2841
- if (class_exists($class_name))
2842
- {
2843
- $module_object = new $class_name();
2844
-
2845
- $module_object->set_module_data($this->module_data);
2846
- $module_object->set_current_time();
2847
- $module_object->build_sitemap_data();
2848
-
2849
- $module_data = $module_object->get_data();
2850
-
2851
- switch ($module_object->get_type())
2852
- {
2853
- case 'url':
2854
- $success = $this->_generate_sitemap($module_data);
2855
- break;
2856
- case 'news':
2857
- $success = $this->_generate_news_sitemap($module_data);
2858
- break;
2859
- case 'index':
2860
- $success = $this->_generate_sitemap_index($module_data);
2861
- break;
2862
- }
2863
-
2864
- $module_loaded = true;
2865
- }
2866
- }
2867
- else if ('sitemapindex' == $sitemap_name)
2868
- {
2869
- $module_file = $this->_get_module_file($module_name, $sitemap_name);
2870
-
2871
- include_once $module_file;
2872
-
2873
- $class_name = 'BWP_GXS_MODULE_INDEX';
2874
-
2875
- if (class_exists($class_name))
2876
- {
2877
- $this->_prepare_sitemap_modules(); // this should fill $this->requested_modules
2878
-
2879
- $module_object = new $class_name($this->requested_modules);
2880
-
2881
- $module_object->set_module_data($this->module_data);
2882
- $module_object->set_current_time();
2883
- $module_object->build_sitemap_data();
2884
-
2885
- $success = $this->_generate_sitemap_index($module_object->get_data());
2886
-
2887
- $module_loaded = true;
2888
- }
2889
- }
2890
-
2891
- $module_filename = $module_name . '.php';
2892
-
2893
- if (!$module_loaded)
2894
- {
2895
- // required module class can not be found so not loaded, this
2896
- // should issue a WP die with 500 internal server error response code
2897
- $this->log_error(
2898
- sprintf(__('There is no class named <strong>%s</strong> '
2899
- . 'in the module file <strong>%s</strong>.', $this->domain),
2900
- $class_name,
2901
- $module_filename),
2902
- true, 500
2903
- );
2904
- }
2905
-
2906
- if ($success == true)
2907
- {
2908
- // sitemap has been generated and is valid
2909
- $this->_append_sitemap_stats();
2910
-
2911
- $lastmod = $this->_cache_sitemap();
2912
- $lastmod = $lastmod ? $lastmod : time();
2913
- $expires = self::_format_header_time($lastmod + $this->cache_time);
2914
-
2915
- // send proper headers
2916
- $this->_send_headers(array(
2917
- 'lastmod' => self::_format_header_time($lastmod),
2918
- 'expires' => $expires,
2919
- 'etag' => md5($expires . bwp_gxs_get_filename($sitemap_name))
2920
- ));
2921
-
2922
- // display the requested sitemap
2923
- $this->_display_sitemap();
2924
-
2925
- $success_message = $this->_is_using_custom_module
2926
- ? __('Successfully generated <em>%s.xml</em> using custom module file <em>%s</em>.', $this->domain)
2927
- : __('Successfully generated <em>%s.xml</em> using module file <em>%s</em>.', $this->domain);
2928
-
2929
- $this->log_success(sprintf($success_message, $sitemap_name, $module_filename));
2930
-
2931
- $this->log_sitemap($sitemap_name);
2932
-
2933
- $this->commit_logs();
2934
-
2935
- exit;
2936
- }
2937
- else
2938
- {
2939
- // @since 1.3.0 commit logs and issue a WP die with 500 internal
2940
- // server response code
2941
- $this->commit_logs();
2942
-
2943
- $this->log_error(sprintf(
2944
- __('An unknown error occurred when generating <em>%s</em> '
2945
- . 'using module file <em>%s</em>. Try again later.', $this->domain),
2946
- $sitemap_name, $module_filename), true, 500);
2947
-
2948
- exit;
2949
- }
2950
- }
2951
-
2952
- private function _send_headers($headers = array())
2953
- {
2954
- if (headers_sent($filename, $linenum))
2955
- {
2956
- // @since 1.3.0 if headers have already been sent, we can't send
2957
- // these headers anymore so stop here but log an error
2958
- $this->log_error(sprintf(
2959
- __('<em>%s.xml</em> was successfully generated but '
2960
- . 'could not be served properly because some '
2961
- . 'headers have already been sent '
2962
- . '(something was printed on line <strong>%s</strong> '
2963
- . 'in file <strong>%s</strong>).', $this->domain),
2964
- $this->module_data['sitemap_name'],
2965
- $linenum,
2966
- $filename
2967
- ));
2968
-
2969
- return false;
2970
- }
2971
-
2972
- if ($this->_debug_extra)
2973
- {
2974
- // @since 1.3.0 when debug extra is turned on no headers should
2975
- // be sent. Sitemap will be displayed as raw text output to avoid
2976
- // Content Encoding Error. The raw text output can then be used to
2977
- // find the cause of the encoding error.
2978
- return false;
2979
- }
2980
-
2981
- $content_types = array(
2982
- 'google' => 'text/xml',
2983
- 'yahoo' => 'text/plain'
2984
- );
2985
-
2986
- $default_headers = array(
2987
- 'status' => 200,
2988
- 'vary' => 'Accept-Encoding'
2989
- );
2990
-
2991
- $headers = wp_parse_args($headers, $default_headers);
2992
-
2993
- if ($this->_debug || $this->options['enable_cache'] != 'yes')
2994
- {
2995
- // if debug is on, or caching is not enabled, send no cache headers
2996
- nocache_headers();
2997
- }
2998
- else
2999
- {
3000
- // otherwise send proper cache headers
3001
- header('Cache-Control: max-age=' . (int) $this->cache_time);
3002
- header('Expires: ' . $headers['expires']);
3003
-
3004
- if (!empty($headers['etag']))
3005
- header('Etag: ' . $headers['etag']);
3006
- }
3007
-
3008
- if ($headers['status'] == 200)
3009
- {
3010
- // some headers are only needed when sending a 200 OK response
3011
- if (!$this->_debug && $this->options['enable_cache'] == 'yes')
3012
- {
3013
- // only send a last modified header if debug is NOT on, and
3014
- // caching is enabled
3015
- header('Last-Modified: ' . $headers['lastmod']);
3016
- }
3017
-
3018
- header('Accept-Ranges: bytes');
3019
- header('Content-Type: ' . $content_types['google'] . '; charset=UTF-8');
3020
-
3021
- if ($this->_is_gzip_ok())
3022
- header('Content-Encoding: ' . self::_get_gzip_type());
3023
- }
3024
-
3025
- header('Vary: ' . $headers['vary']);
3026
-
3027
- status_header($headers['status']);
3028
-
3029
- return true;
3030
- }
3031
-
3032
- private function _display_sitemap()
3033
- {
3034
- // compress the output using gzip if needed, but only if no active
3035
- // compressor is active
3036
- if ($this->_is_gzip_ok() && !self::is_gzipped())
3037
- echo gzencode($this->output, 6);
3038
- else
3039
- echo $this->output;
3040
- }
3041
-
3042
- public static function is_gzipped()
3043
- {
3044
- if (ini_get('zlib.output_compression')
3045
- || ini_get('output_handler') == 'ob_gzhandler'
3046
- || in_array('ob_gzhandler', @ob_list_handlers()))
3047
- {
3048
- return true;
3049
- }
3050
-
3051
- return false;
3052
- }
3053
-
3054
- private function _is_gzip_ok()
3055
- {
3056
- if ($this->options['enable_gzip'] != 'yes')
3057
- return false;
3058
-
3059
- if (headers_sent() || $this->_debug_extra)
3060
- // headers sent or debug extra is on, which means we could not send
3061
- // the encoding header, so gzip is not allowed
3062
- return false;
3063
-
3064
- if (!empty($_SERVER['HTTP_ACCEPT_ENCODING'])
3065
- && (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false
3066
- || strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'x-gzip') !== false)
3067
- ) {
3068
- return true;
3069
- }
3070
- else
3071
- {
3072
- return false;
3073
- }
3074
- }
3075
-
3076
- private static function _get_gzip_type()
3077
- {
3078
- if (strpos($_SERVER['HTTP_ACCEPT_ENCODING'],'gzip') !== false)
3079
- return 'gzip';
3080
- else if (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'x-gzip') !== false)
3081
- return 'x-gzip';
3082
-
3083
- return 'gzip';
3084
- }
3085
-
3086
- private function _append_sitemap_stats()
3087
- {
3088
- if ('yes' != $this->options['enable_stats'])
3089
- return false;
3090
-
3091
- $this->output .= $this->_get_sitemap_stats();
3092
- }
3093
-
3094
- private function _get_sitemap_stats($type = '')
3095
- {
3096
- $time = timer_stop(0, 3);
3097
- $sql = get_num_queries() - $this->build_stats['query'];
3098
- $memory = size_format(memory_get_usage() - $this->build_stats['mem'], 2);
3099
-
3100
- if (empty($type))
3101
- return "\n" . sprintf($this->templates['stats'], $time, $memory, $sql, $this->output_num);
3102
- else
3103
- echo "\n" . sprintf($this->templates['stats_cached'], $time, $memory, $sql);
3104
- }
3105
-
3106
- private static function _is_local($url)
3107
- {
3108
- static $blog_url;
3109
-
3110
- if (empty($blog_url))
3111
- {
3112
- $home_url = home_url();
3113
- $blog_url = @parse_url($home_url);
3114
- }
3115
-
3116
- $url = @parse_url($url);
3117
- if (false === $url)
3118
- return false;
3119
-
3120
- if (isset($url['scheme']))
3121
- {
3122
- // if scheme is set for the url being checked, the url should be
3123
- // local only when it shares the same host with blog's url
3124
-
3125
- // normalize all the hosts before comparing
3126
- $url_host = str_replace('https://', 'http://', $url['host']);
3127
- $blog_host = str_replace('https://', 'http://', $blog_url['host']);
3128
-
3129
- // according to sitemap protocol the host must be exactly the same
3130
- // @see http://www.sitemaps.org/protocol.html#location
3131
- if (0 <> strcmp($url_host, $blog_host))
3132
- return false;
3133
-
3134
- return true;
3135
- }
3136
- else
3137
- return true;
3138
- }
3139
-
3140
- private static function _is_url_valid($url)
3141
- {
3142
- $url = trim($url);
3143
-
3144
- if ('#' == $url || 0 !== strpos($url, 'http') || !self::_is_local($url))
3145
- return false;
3146
-
3147
- return true;
3148
- }
3149
-
3150
- private function _check_output($output)
3151
- {
3152
- if (empty($output) || 0 == sizeof($output))
3153
- {
3154
- // If output is empty we log it so the user knows what's going on,
3155
- // and should die accordingly
3156
- $error_message = sprintf(
3157
- __('<em>%s.xml</em> does not have any item.', $this->domain),
3158
- $this->module_data['sitemap_name']
3159
- );
3160
-
3161
- $module_label = $this->_get_module_label($this->module_data['module'], $this->module_data['sub_module']);
3162
- $module_guide = 'google_news' != $this->module_data['sub_module']
3163
- ? __('Enable/disable sitemaps via <em>BWP Sitemaps >> XML Sitemaps >> Sitemaps to generate</em>.', $this->domain)
3164
- : '';
3165
-
3166
- $error_message_admin_module = $module_label && current_user_can('manage_options')
3167
- ? ' ' . sprintf(
3168
- __('There are no public <em>%s</em>.', $this->domain)
3169
- . " $module_guide",
3170
- $module_label)
3171
- : ' ' . $module_guide;
3172
-
3173
- $error_message_admin = $this->module_data['sitemap_name'] == 'sitemapindex'
3174
- ? ' ' . __('Please make sure that you have at least one sitemap enabled '
3175
- . 'in <em>BWP Sitemaps >> XML Sitemaps >> Sitemaps to generate</em>.', $this->domain)
3176
- : $error_message_admin_module;
3177
-
3178
- // issue a WP die with 404 not found response code
3179
- $this->log_error($error_message . $error_message_admin, true, 404);
3180
- }
3181
- else
3182
- {
3183
- return true;
3184
- }
3185
- }
3186
-
3187
- private function _generate_sitemap_item($url, $priority = 1.0, $freq = 'always', $lastmod = 0)
3188
- {
3189
- $freq = sprintf($this->templates['changefreq'], $freq);
3190
- $priority = str_replace(',', '.', sprintf($this->templates['priority'], $priority));
3191
- $lastmod = !empty($lastmod) ? sprintf($this->templates['lastmod'], $lastmod) : '';
3192
-
3193
- if (!empty($url))
3194
- return sprintf($this->templates['url'], $url, $lastmod, $freq, $priority);
3195
- else
3196
- return '';
3197
- }
3198
-
3199
- private function _generate_sitemapindex_item($url = '', $lastmod = 0)
3200
- {
3201
- $lastmod = !empty($lastmod) ? sprintf($this->templates['lastmod'], $lastmod) : '';
3202
-
3203
- if (!empty($url))
3204
- return sprintf($this->templates['sitemap'], $url, $lastmod);
3205
- else
3206
- return '';
3207
- }
3208
-
3209
- private function _generate_news_sitemap_item($loc = '', $name = '', $lang = 'en',
3210
- $genres = '', $pub_date = '', $title = '', $keywords = '')
3211
- {
3212
- $name = sprintf($this->templates['news_name'], $name);
3213
- $lang = sprintf($this->templates['news_language'], $lang);
3214
- $news_pub = sprintf($this->templates['news_publication'], $name, $lang);
3215
-
3216
- $genres = !empty($genres) ? sprintf($this->templates['news_genres'], $genres) : '';
3217
- $pub_date = sprintf($this->templates['news_pub_date'], $pub_date);
3218
- $title = sprintf($this->templates['news_title'], $title);
3219
-
3220
- $keywords = !empty($keywords) ? sprintf($this->templates['news_keywords'], $keywords) : '';
3221
-
3222
- return sprintf($this->templates['news'], $loc, $news_pub, $genres, $pub_date, $title, $keywords);
3223
- }
3224
-
3225
- private function _get_credit()
3226
- {
3227
- $credit = '<!-- Generated by BWP Google XML Sitemaps ' . $this->get_version()
3228
- . ' (c) 2014 Khang Minh - betterwp.net' . "\n";
3229
-
3230
- $credit .= ' Plugin homepage: ' . $this->plugin_url . ' -->' . "\n";
3231
-
3232
- return $credit;
3233
- }
3234
-
3235
- private function _generate_sitemap($urls)
3236
- {
3237
- if (!$this->_check_output($urls))
3238
- return false;
3239
-
3240
- $xml = '<' . '?xml version="1.0" encoding="UTF-8"?'.'>' . "\n";
3241
- $xml .= !empty($this->xslt)
3242
- ? '<?xml-stylesheet type="text/xsl" href="' . $this->xslt . '"?>' . "\n\n"
3243
- : '';
3244
- $xml .= '<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'
3245
- . "\n\t" . 'xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9'
3246
- . "\n\t" . 'http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"'
3247
- . "\n\t" . 'xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";
3248
-
3249
- if ('yes' != $this->options['enable_xslt'] && 'yes' == $this->options['enable_credit'])
3250
- $xml .= $this->_get_credit();
3251
-
3252
- foreach ($urls as &$url)
3253
- {
3254
- $url['location'] = !empty($url['location']) ? $url['location'] : '';
3255
-
3256
- if (empty($url['location']) || !self::_is_url_valid($url['location']))
3257
- // location is empty or it is not valid for a sitemap
3258
- continue;
3259
-
3260
- $url['lastmod'] = !empty($url['lastmod']) ? $url['lastmod'] : '';
3261
-
3262
- $url['freq'] = isset($url['freq'])
3263
- && in_array($url['freq'], $this->frequencies)
3264
- ? $url['freq']
3265
- : $this->options['select_default_freq'];
3266
-
3267
- $url['priority'] = isset($url['priority'])
3268
- && $url['priority'] <= 1 && $url['priority'] > 0
3269
- ? $url['priority']
3270
- : $this->options['select_default_pri'];
3271
-
3272
- $xml .= $this->_generate_sitemap_item(
3273
- htmlspecialchars($url['location']), $url['priority'],
3274
- $url['freq'], $url['lastmod']
3275
- );
3276
-
3277
- $this->output_num++;
3278
- }
3279
-
3280
- if (!$this->_check_output($this->output_num))
3281
- return false;
3282
-
3283
- $xml .= "\n" . '</urlset>';
3284
-
3285
- $this->output = $xml;
3286
-
3287
- return true;
3288
- }
3289
-
3290
- private function _generate_news_sitemap($urls)
3291
- {
3292
- if (!$this->_check_output($urls))
3293
- return false;
3294
-
3295
- $xml = '<' . '?xml version="1.0" encoding="UTF-8"?'.'>' . "\n";
3296
- $xml .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"'
3297
- . "\n\t" . 'xmlns:news="http://www.google.com/schemas/sitemap-news/0.9"'
3298
- . "\n\t" . 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'
3299
- . "\n\t" . 'xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd'
3300
- . "\n\t" . 'http://www.google.com/schemas/sitemap-news/0.9 http://www.google.com/schemas/sitemap-news/0.9/sitemap-news.xsd">'
3301
- . "\n";
3302
-
3303
- if ('yes' == $this->options['enable_credit'])
3304
- $xml .= $this->_get_credit();
3305
-
3306
- foreach ($urls as &$url)
3307
- {
3308
- $url['location'] = !empty($url['location']) ? $url['location'] : '';
3309
-
3310
- if (empty($url['location']) || !self::_is_url_valid($url['location']))
3311
- // location is empty or it is not valid for a sitemap
3312
- continue;
3313
-
3314
- $url['name'] = !empty($url['name'])
3315
- ? htmlspecialchars($url['name'])
3316
- : apply_filters('bwp_gxs_news_name', htmlspecialchars(get_bloginfo('name')));
3317
-
3318
- $url['language'] = $this->options['select_news_lang'];
3319
- $url['genres'] = !empty($url['genres']) ? $url['genres'] : '';
3320
-
3321
- $url['pub_date'] = !empty($url['pub_date']) ? $url['pub_date'] : '';
3322
- $url['title'] = !empty($url['title']) ? htmlspecialchars($url['title']) : '';
3323
- $url['keywords'] = !empty($url['keywords']) ? htmlspecialchars($url['keywords']) : '';
3324
-
3325
- $xml .= $this->_generate_news_sitemap_item(
3326
- htmlspecialchars($url['location']),
3327
- $url['name'],
3328
- $url['language'],
3329
- $url['genres'],
3330
- $url['pub_date'],
3331
- $url['title'],
3332
- $url['keywords']
3333
- );
3334
-
3335
- $this->output_num++;
3336
- }
3337
-
3338
- if (!$this->_check_output($this->output_num))
3339
- return false;
3340
-
3341
- $xml .= "\n" . '</urlset>';
3342
-
3343
- $this->output = $xml;
3344
-
3345
- return true;
3346
- }
3347
-
3348
- private function _generate_sitemap_index($sitemaps)
3349
- {
3350
- if (!$this->_check_output($sitemaps))
3351
- return false;
3352
-
3353
- $xml = '<' . '?xml version="1.0" encoding="UTF-8"?'.'>' . "\n";
3354
- $xml .= !empty($this->xslt_index)
3355
- ? '<?xml-stylesheet type="text/xsl" href="' . $this->xslt_index . '"?>' . "\n\n"
3356
- : '';
3357
- $xml .= '<sitemapindex xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'
3358
- . "\n\t" . 'xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9'
3359
- . "\n\t" . 'http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd"'
3360
- . "\n\t" . 'xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";
3361
-
3362
- if ('yes' != $this->options['enable_xslt'] && 'yes' == $this->options['enable_credit'])
3363
- $xml .= $this->_get_credit();
3364
-
3365
- foreach ($sitemaps as &$sitemap)
3366
- {
3367
- $sitemap['location'] = !empty($sitemap['location']) ? $sitemap['location'] : '';
3368
- $sitemap['lastmod'] = !empty($sitemap['lastmod']) ? $sitemap['lastmod'] : '';
3369
-
3370
- $xml .= $this->_generate_sitemapindex_item(
3371
- htmlspecialchars($sitemap['location']), $sitemap['lastmod']
3372
- );
3373
-
3374
- $this->output_num++;
3375
- }
3376
-
3377
- $xml .= "\n" . '</sitemapindex>';
3378
-
3379
- $this->output = $xml;
3380
-
3381
- return true;
3382
- }
3383
-
3384
- private function _is_post_pingable($post)
3385
- {
3386
- $post_types = get_post_types(array('public' => true));
3387
-
3388
- if (!in_array($post->post_type, $post_types))
3389
- {
3390
- // not a public post type, no pinging
3391
- return false;
3392
- }
3393
-
3394
- if (!empty($post->post_password))
3395
- {
3396
- // password-protected post, no pinging
3397
- return false;
3398
- }
3399
-
3400
- $excluded_post_types = explode(',', $this->options['input_exclude_post_type']);
3401
-
3402
- if (in_array($post->post_type, $excluded_post_types))
3403
- {
3404
- // sitemap for this post type is not enabled, no pinging
3405
- return false;
3406
- }
3407
-
3408
- $excluded_post_types_from_ping = explode(',', $this->options['input_exclude_post_type_ping']);
3409
-
3410
- if (in_array($post->post_type, $excluded_post_types_from_ping))
3411
- {
3412
- // pinging for this post type is disabled explicitly
3413
- return false;
3414
- }
3415
-
3416
- // otherwise pinging is allowed
3417
- return true;
3418
- }
3419
-
3420
- public function ping_google_news($post)
3421
- {
3422
- if (empty($post->ID))
3423
- return;
3424
-
3425
- // only carry out the ping if this post is in a news category
3426
- $is_news = 'inc' == $this->options['select_news_cat_action'] ? false : true;
3427
- $news_cats = explode(',', $this->options['select_news_cats']);
3428
- $categories = get_the_category($post->ID);
3429
-
3430
- foreach ($categories as $cat)
3431
- {
3432
- if (in_array($cat->term_id, $news_cats))
3433
- {
3434
- $is_news = 'inc' == $this->options['select_news_cat_action']
3435
- ? true : false;
3436
-
3437
- break;
3438
- }
3439
- }
3440
-
3441
- if ($is_news)
3442
- {
3443
- $this->_ping_sitemap = 'post_google_news';
3444
- $this->ping($post);
3445
- }
3446
- }
3447
-
3448
- public function ping($post)
3449
- {
3450
- $time = self::_get_current_time();
3451
- $ping_data = get_option(BWP_GXS_PING);
3452
-
3453
- if (!$ping_data || !is_array($ping_data)
3454
- || isset($ping_data['data_pinged']['yahoo'])
3455
- || isset($ping_data['data_pinged']['ask'])
3456
- ) {
3457
- // remove old data from yahoo and ask, to be removed in 1.4.0
3458
- $ping_data = array(
3459
- 'data_pinged' => array('google' => 0, 'bing' => 0),
3460
- 'data_last_pinged' => array('google' => 0, 'bing' => 0)
3461
- );
3462
- }
3463
-
3464
- if (!$this->_is_post_pingable($post))
3465
- {
3466
- // this post is not suitable for pinging
3467
- return false;
3468
- }
3469
-
3470
- foreach ($this->_ping_urls as $key => $service)
3471
- {
3472
- if ('yes' == $this->options['enable_ping_' . $key])
3473
- {
3474
- if ($time - $ping_data['data_last_pinged'][$key] > 86400)
3475
- {
3476
- // a day has gone, reset the count
3477
- $ping_data['data_pinged'][$key] = 0;
3478
- $ping_data['data_last_pinged'][$key] = $time;
3479
- }
3480
-
3481
- if ($this->pings_per_day > $ping_data['data_pinged'][$key])
3482
- {
3483
- // ping limit has not been reached
3484
- $ping_data['data_pinged'][$key]++;
3485
-
3486
- $url = sprintf($service, urlencode(str_replace('&', '&amp;', sprintf(
3487
- $this->sitemap_url_struct,
3488
- $this->_ping_sitemap)
3489
- )));
3490
-
3491
- $response = wp_remote_post($url,
3492
- array('timeout' => $this->ping_timeout)
3493
- );
3494
-
3495
- if (is_wp_error($response))
3496
- {
3497
- $errno = $response->get_error_code();
3498
- $errorstr = $response->get_error_message();
3499
-
3500
- $this->log_error($errorstr);
3501
- }
3502
- else if (isset($response['response']))
3503
- {
3504
- $the_response = $response['response'];
3505
-
3506
- if (empty($the_response['code']))
3507
- {
3508
- $this->log_error(__('Unknown response code from search engines. Ping failed.', $this->domain));
3509
- }
3510
- else if (200 == $the_response['code'])
3511
- {
3512
- $this->log_success(sprintf(
3513
- __('Pinged <em>%s</em> with <em>%s</em> successfully!', $this->domain), ucfirst($key),
3514
- $this->_ping_sitemap . '.xml')
3515
- );
3516
- }
3517
- else
3518
- {
3519
- $errno = $the_response['code'];
3520
- $errorstr = $the_response['message'];
3521
-
3522
- $this->log_error(sprintf(
3523
- __('<strong>Error %s</strong> from <em>%s</em>.', $this->domain), $errno, ucfirst($key))
3524
- . ': ' . $errorstr
3525
- );
3526
- }
3527
- }
3528
- }
3529
- else
3530
- {
3531
- // ping limit reached for this particular search engine,
3532
- // log an appropriate error message
3533
- $this->log_error(sprintf(
3534
- __('Ping limit for today to <em>%s</em> has been reached, '
3535
- . 'consider increasing the ping limit via '
3536
- . '<em>XML Sitemaps >> Ping search engines >> "Ping limit for each search engine"</em>', $this->domain),
3537
- ucfirst($key))
3538
- );
3539
- }
3540
- }
3541
- }
3542
-
3543
- update_option(BWP_GXS_PING, $ping_data);
3544
-
3545
- $this->commit_logs();
3546
- }
3547
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/index.php DELETED
@@ -1,3 +0,0 @@
1
- <?php
2
- // White page
3
- ?>
 
 
 
includes/modules/page_external.php DELETED
@@ -1,52 +0,0 @@
1
- <?php
2
- /**
3
- * Copyright (c) 2014 Khang Minh <betterwp.net>
4
- * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE
5
- * @package BWP Google XML Sitemaps
6
- */
7
-
8
- class BWP_GXS_MODULE_PAGE_EXTERNAL extends BWP_GXS_MODULE
9
- {
10
- public function __construct()
11
- {
12
- // @since 1.3.0 this method is empty
13
- }
14
-
15
- protected function build_data()
16
- {
17
- global $wpdb, $bwp_gxs;
18
-
19
- // The structure of your external pages should be like the below sample item
20
- // array('location' => '', 'lastmod' => '', 'priority' => '')
21
- // Frequency will be calculated based on lastmod
22
- $sample_pages = array(
23
- array(
24
- 'location' => home_url('a-page-not-belong-to-wordpress.html'),
25
- 'lastmod' => '06/02/2011',
26
- 'priority' => '1.0'
27
- ),
28
- array(
29
- 'location' => home_url('another-page-not-belong-to-wordpress.html'),
30
- 'lastmod' => '05/02/2011',
31
- 'priority' => '0.8'
32
- )
33
- );
34
-
35
- $external_pages = (array) apply_filters('bwp_gxs_external_pages', $sample_pages);
36
-
37
- $data = array();
38
-
39
- for ($i = 0; $i < sizeof($external_pages); $i++)
40
- {
41
- $page = $external_pages[$i];
42
- $data = $this->init_data($data);
43
-
44
- $data['location'] = $page['location'];
45
- $data['lastmod'] = $this->format_lastmod(strtotime($page['lastmod']));
46
- $data['freq'] = $this->cal_frequency(false, $page['lastmod']);
47
- $data['priority'] = $page['priority'];
48
-
49
- $this->data[] = $data;
50
- }
51
- }
52
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/modules/post_google_news.php DELETED
@@ -1,250 +0,0 @@
1
- <?php
2
- /**
3
- * Copyright (c) 2014 Khang Minh <betterwp.net>
4
- * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE
5
- * @package BWP Google XML Sitemaps
6
- */
7
-
8
- class BWP_GXS_MODULE_POST_GOOGLE_NEWS extends BWP_GXS_MODULE
9
- {
10
- public function __construct()
11
- {
12
- $this->type = 'news';
13
- $this->perma_struct = get_option('permalink_structure');
14
- }
15
-
16
- /**
17
- * Process the posts if Multi-cat mode is enabled
18
- */
19
- private static function process_posts($posts, $news_cats, $news_cat_action)
20
- {
21
- // This $post array surely contains duplicate posts (fortunately they
22
- // are already sorted) let's group 'em
23
- $ord_num = 0;
24
-
25
- $excluded_cats = 'inc' == $news_cat_action ? array() : explode(',', $news_cats);
26
-
27
- $processed_posts = array();
28
-
29
- for ($i = 0; $i < sizeof($posts); $i++)
30
- {
31
- $post = $posts[$i];
32
-
33
- if ($ord_num == $post->ID)
34
- {
35
- $cur_position = sizeof($processed_posts) - 1;
36
-
37
- // nothing to do, continue
38
- if ($cur_position < 0)
39
- continue;
40
-
41
- $current_post = $processed_posts[$cur_position];
42
-
43
- // not correct post, continue
44
- if ($current_post->ID != $ord_num)
45
- continue;
46
-
47
- // users choose to exclude cats, and this $post is assigned to
48
- // one of those excluded cats
49
- if (in_array($post->term_id, $excluded_cats)
50
- || in_array($current_post->terms[0], $excluded_cats)
51
- ) {
52
- array_pop($processed_posts);
53
- }
54
- else
55
- {
56
- if (!in_array($post->term_id, $current_post->terms))
57
- $current_post->terms[] = $post->term_id;
58
-
59
- if (!in_array($post->name, $current_post->term_names))
60
- $current_post->term_names[] = $post->name;
61
- }
62
-
63
- }
64
- else
65
- {
66
- $post->terms = array($post->term_id);
67
- $post->term_names = array($post->name);
68
-
69
- $processed_posts[] = $post;
70
-
71
- $ord_num = $post->ID;
72
- }
73
- }
74
-
75
- return $processed_posts;
76
- }
77
-
78
- private static function news_time()
79
- {
80
- return gmdate('Y-m-d H:i:s', time() + get_option('gmt_offset') * 3600 - 48 * 3600);
81
- }
82
-
83
- protected function generate_data()
84
- {
85
- global $wpdb, $post, $bwp_gxs;
86
-
87
- $keywords_map = apply_filters('bwp_gxs_news_keyword_map', array(
88
- // This is an array to map foreign categories to its English counterpart
89
- // Use category title (name) as the key
90
- // Below is an example:
91
- // '電視台' => 'television',
92
- // '名人'=> 'celebrities'
93
- ));
94
-
95
- // @see http://www.google.com/support/news_pub/bin/answer.py?answer=74288
96
- $time = self::news_time();
97
- $lang = $bwp_gxs->options['select_news_lang'];
98
-
99
- $news_genres = $bwp_gxs->options['input_news_genres'];
100
- $news_cats = $bwp_gxs->options['select_news_cats'];
101
- $news_cat_action = $bwp_gxs->options['select_news_cat_action'];
102
-
103
- if ($news_cat_action == 'inc' && empty($news_cats))
104
- {
105
- // if we have to look for news post in certain categories, but
106
- // news category list is empty, nothing to do. This should stop the
107
- // SQL cycling btw.
108
- return false;
109
- }
110
-
111
- $cat_query = ' AND t.term_id NOT IN (' . $news_cats . ')';
112
- $cat_query = $news_cat_action == 'inc'
113
- ? str_replace('NOT IN', 'IN', $cat_query) : $cat_query;
114
- $cat_query = $news_cat_action != 'inc'
115
- && $bwp_gxs->options['enable_news_multicat'] == 'yes'
116
- ? '' : $cat_query;
117
-
118
- $group_by = empty($bwp_gxs->options['enable_news_multicat'])
119
- ? ' GROUP BY p.ID' : '';
120
-
121
- $latest_post_query = '
122
- SELECT *
123
- FROM ' . $wpdb->term_relationships . ' tr
124
- INNER JOIN ' . $wpdb->posts . ' p
125
- ON tr.object_id = p.ID' . "
126
- AND p.post_status = 'publish'
127
- AND p.post_password = ''" . '
128
- INNER JOIN ' . $wpdb->term_taxonomy . ' tt
129
- ON tr.term_taxonomy_id = tt.term_taxonomy_id' . "
130
- AND tt.taxonomy = 'category'" . '
131
- , ' . $wpdb->terms . ' t
132
- WHERE tt.term_id = t.term_id
133
- AND p.post_date > %s' .
134
- $cat_query . $group_by . '
135
- ORDER BY p.post_date DESC';
136
-
137
- $latest_posts = $this->get_results($wpdb->prepare($latest_post_query, $time));
138
-
139
- if ('yes' == $bwp_gxs->options['enable_news_multicat'])
140
- {
141
- // if Multi-cat mode is enabled we will need to process fetched posts
142
- $latest_posts = self::process_posts($latest_posts, $news_cats, $news_cat_action);
143
- }
144
-
145
- if (!isset($latest_posts) || 0 == sizeof($latest_posts))
146
- return false;
147
-
148
- $using_permalinks = $this->using_permalinks();
149
-
150
- $genres_cache = array();
151
-
152
- for ($i = 0; $i < sizeof($latest_posts); $i++)
153
- {
154
- $post = $latest_posts[$i];
155
-
156
- $data = array();
157
-
158
- // @since 1.1.0 - get permalink independently, as we don't need
159
- // caching or some complicated stuff
160
- if ($using_permalinks && empty($post->post_name))
161
- $data['location'] = '';
162
- else
163
- $data['location'] = $this->get_permalink();
164
-
165
- $data['language'] = $lang;
166
-
167
- if (isset($post->terms))
168
- {
169
- // multi-cat support for genres
170
- $genres_cache_key = md5(implode('|', $post->terms));
171
-
172
- if (!isset($genres_cache[$genres_cache_key])
173
- || !is_array($genres_cache[$genres_cache_key])
174
- ) {
175
- $genres_cache[$genres_cache_key] = array();
176
-
177
- foreach ($post->terms as $term_id)
178
- {
179
- $cur_genres = !empty($news_genres['cat_' . $term_id])
180
- ? explode(', ', $news_genres['cat_' . $term_id])
181
- : '';
182
-
183
- if (is_array($cur_genres)) :
184
- foreach ($cur_genres as $cur_genre)
185
- if (!in_array($cur_genre, $genres_cache[$genres_cache_key]))
186
- $genres_cache[$genres_cache_key][] = $cur_genre;
187
- endif;
188
- }
189
- }
190
-
191
- $data['genres'] = implode(', ', $genres_cache[$genres_cache_key]);
192
- }
193
- else
194
- {
195
- $data['genres'] = !empty($news_genres['cat_' . $post->term_id])
196
- ? $news_genres['cat_' . $post->term_id]
197
- : '';
198
- }
199
-
200
- $data['pub_date'] = $bwp_gxs->options['enable_gmt']
201
- ? $this->format_lastmod(strtotime($post->post_date_gmt), false)
202
- : $this->format_lastmod(strtotime($post->post_date));
203
-
204
- $data['title'] = $post->post_title;
205
-
206
- // multi-cat support for news categories as keywords
207
- if ('cat' == $bwp_gxs->options['select_news_keyword_type'] && isset($post->term_names))
208
- {
209
- $keywords = array();
210
-
211
- foreach ($post->term_names as $term_name)
212
- $keywords[] = (!empty($keywords_map[$term_name])) ? trim($keywords_map[$term_name]) : $term_name;
213
-
214
- $keywords = implode(', ', $keywords);
215
- }
216
- else if ('tag' == $bwp_gxs->options['select_news_keyword_type'])
217
- {
218
- // temporary support for news tags as keywords
219
- $keywords = array();
220
- $tags = get_the_tags($post->ID);
221
-
222
- if (is_array($tags)) :
223
- foreach (get_the_tags($post->ID) as $tag)
224
- {
225
- $keywords[] = !empty($keywords_map[$tag->name])
226
- ? trim($keywords_map[$tag->name])
227
- : $tag->name;
228
- }
229
- endif;
230
-
231
- $keywords = implode(', ', $keywords);
232
- }
233
- else
234
- {
235
- $keywords = !empty($keywords_map[$post->name])
236
- ? trim($keywords_map[$post->name])
237
- : $post->name;
238
- }
239
-
240
- $data['keywords'] = 'yes' == $bwp_gxs->options['enable_news_keywords']
241
- ? $keywords : '';
242
-
243
- $this->data[] = $data;
244
- }
245
-
246
- // always return true if we can get here, otherwise you're stuck in a
247
- // SQL cycling loop
248
- return true;
249
- }
250
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
js/bwp-gxs.js DELETED
@@ -1,14 +0,0 @@
1
- jQuery(function($){
2
- function toggle_split_limit() {
3
- var shown = $('#enable_sitemap_split_post').prop('checked') ? true : false;
4
- var $i = $('#input_split_limit_post').parents('.bwp-clear');
5
-
6
- $i.toggle(shown);
7
- }
8
-
9
- toggle_split_limit();
10
-
11
- $('#enable_sitemap_split_post').on('change', function() {
12
- toggle_split_limit();
13
- });
14
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
languages/bwp-google-xml-sitemaps-es_ES.mo ADDED
Binary file
languages/bwp-google-xml-sitemaps-es_ES.po ADDED
@@ -0,0 +1,1918 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: BWP Google XML Sitemaps\n"
4
+ "Report-Msgid-Bugs-To: contact@betterwp.net\n"
5
+ "POT-Creation-Date: 2016-01-14 21:05+0700\n"
6
+ "PO-Revision-Date: 2013-11-04 15:26+0100\n"
7
+ "Last-Translator: ruben <info@usitility.com>\n"
8
+ "Language-Team: \n"
9
+ "Language: ES_es\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n"
14
+ "X-Poedit-Basepath: .\n"
15
+ "X-Poedit-SourceCharset: UTF-8\n"
16
+ "X-Generator: Poedit 1.5.4\n"
17
+ "X-Poedit-SearchPath-0: .\n"
18
+
19
+ #: vendor/kminh/bwp-framework/src/class-bwp-version.php:32
20
+ #, php-format
21
+ msgid ""
22
+ "%s requires WordPress <strong>%s</strong> or higher and PHP <strong>%s</"
23
+ "strong> or higher. The plugin will not function until you update your "
24
+ "software. Please deactivate this plugin."
25
+ msgstr ""
26
+ "%s requiere WordPress <strong>%s</strong> o superior y PHP <strong>%s</"
27
+ "strong> o superior. El plugin no funcionará hasta que no actualices tu "
28
+ "software. Por favor, desactiva el plugin."
29
+
30
+ #: src/templates/provider/admin/exclude-posts.html.php:18
31
+ #: src/templates/provider/admin/external-pages.html.php:13
32
+ #: src/templates/provider/admin/exclude-terms.html.php:18
33
+ #: src/class-bwp-gxs.php:1740
34
+ msgid "... loading"
35
+ msgstr ""
36
+
37
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:411
38
+ msgid "... or any amount!"
39
+ msgstr "... o cualquier cantidad!"
40
+
41
+ #: src/class-bwp-gxs.php:3641
42
+ #, php-format
43
+ msgid "<em>%s.xml</em> does not have any item."
44
+ msgstr ""
45
+
46
+ #: src/class-bwp-gxs.php:3675
47
+ #, php-format
48
+ msgid ""
49
+ "<em>%s.xml</em> was successfully generated but could not be served properly "
50
+ "because some headers have already been sent (something was printed on line "
51
+ "<strong>%s</strong> in file <strong>%s</strong>)."
52
+ msgstr ""
53
+
54
+ #: src/class-bwp-gxs.php:3349
55
+ #, php-format
56
+ msgid ""
57
+ "<em>%s.xml</em> will be served using module file <em>%s</em> in the custom "
58
+ "module directory."
59
+ msgstr ""
60
+
61
+ #: src/class-bwp-gxs.php:3366
62
+ #, fuzzy, php-format
63
+ msgid "<em>%s.xml</em> will be served using module file <em>%s</em>."
64
+ msgstr ""
65
+ "Se ha generado satisfactoriamente <em>%s.xml</em> usando el módulo <em>%s</"
66
+ "em>."
67
+
68
+ #: src/class-bwp-gxs.php:2412
69
+ #, php-format
70
+ msgid "<strong>%d</strong> cached sitemaps have been flushed successfully!"
71
+ msgstr ""
72
+ "<strong>%d</strong> los sitemaps cacheados han sido borrados correctamente!"
73
+
74
+ #: src/class-bwp-gxs.php:3373
75
+ #, fuzzy, php-format
76
+ msgid ""
77
+ "<strong>%s</strong> can not be served because of a missing module file: "
78
+ "<strong>%s</strong>."
79
+ msgstr ""
80
+ "No existe una clase llamada <strong>%s</strong> en el fichero del módulo "
81
+ "<strong>%s</strong>."
82
+
83
+ #: src/class-bwp-gxs.php:2528
84
+ msgid "<strong>BWP Google XML Sitemaps Error:</strong> "
85
+ msgstr "<strong>BWP Google XML Sitemaps Error:</strong> "
86
+
87
+ #: src/class-bwp-gxs.php:3974
88
+ #, php-format
89
+ msgid "<strong>Error %s</strong> from <em>%s</em>."
90
+ msgstr ""
91
+
92
+ #: src/class-bwp-gxs.php:1679
93
+ #, fuzzy
94
+ msgid ""
95
+ "A Google News Sitemap is a file that allows you to control which content you "
96
+ "submit to Google News. By creating and submitting a Google News Sitemap, "
97
+ "you're able to help Google News discover and crawl your site's news articles "
98
+ "&mdash; http://support.google.com/"
99
+ msgstr ""
100
+ "Un Sitemap de Noticias Google es un fichero que te permite controlar que "
101
+ "contenido envías a Goole Noticias. Creando y enviando un Sitemap de Noticias "
102
+ "Google, podrás ayudar a Google Noticias a que descubra y rastree los "
103
+ "artículos de tu sitio &mdash; <em>http://support.google.com/</em>"
104
+
105
+ #: src/templates/provider/admin/external-page-form.html.php:17
106
+ msgid "Absolute URL to page"
107
+ msgstr ""
108
+
109
+ #: src/templates/provider/admin/external-pages.html.php:26
110
+ msgid "Actions"
111
+ msgstr ""
112
+
113
+ #: src/class-bwp-gxs.php:1720
114
+ #, fuzzy, php-format
115
+ msgid ""
116
+ "Add <code>post_google_news.xml</code> to the main <a href=\"%s\" target="
117
+ "\"_blank\">sitemapindex.xml</a>."
118
+ msgstr ""
119
+ "Un nuevo <code>post_google_news.xml</code> sitemap se agregará al fichero "
120
+ "<code>sitemapindex.xml</code>."
121
+
122
+ #: src/class-bwp-gxs.php:1982
123
+ #, fuzzy
124
+ msgid "Add a sitemap index entry to blog's robots.txt"
125
+ msgstr ""
126
+ "¿Añadir sitemapindex al fichero robots.txt de los blog virtuales "
127
+ "individuales?"
128
+
129
+ #: src/class-bwp-gxs.php:1719
130
+ msgid ""
131
+ "Add an <code>&lt;image:image&gt;</code> entry to each sitemap item when "
132
+ "possible."
133
+ msgstr ""
134
+
135
+ #: src/class-bwp-gxs.php:1676
136
+ msgid "Add featured images to existing post-based sitemaps."
137
+ msgstr ""
138
+
139
+ #: src/templates/provider/admin/external-pages.html.php:7
140
+ msgid "Add new page"
141
+ msgstr ""
142
+
143
+ #: src/class-bwp-gxs.php:1394
144
+ #, php-format
145
+ msgid ""
146
+ "Add non-WordPress pages to the %s sitemap. You can also use %s to add "
147
+ "external pages programmatically."
148
+ msgstr ""
149
+
150
+ #: src/class-bwp-gxs.php:1983
151
+ #, fuzzy
152
+ msgid "Add sitemap index entries from all blogs to primary blog's robots.txt"
153
+ msgstr ""
154
+ "¿Añadir sitemapindex de todos los blogs pertenecientes a la red, al fichero "
155
+ "robots.txt del blog virtual primario?"
156
+
157
+ #: src/templates/provider/admin/external-page-modal.html.php:10
158
+ msgid "Add/Update an external page"
159
+ msgstr ""
160
+
161
+ #: src/class-bwp-gxs.php:347 src/class-bwp-gxs.php:998
162
+ #, fuzzy
163
+ msgid "Advanced Options"
164
+ msgstr "Opciones del Módulo"
165
+
166
+ #: src/class-bwp-gxs.php:2459
167
+ msgid "All logs have been cleared successfully!"
168
+ msgstr "Todos los logs se han limpiado con éxito!"
169
+
170
+ #: src/class-bwp-gxs.php:2442
171
+ #: vendor/kminh/bwp-framework/src/class-bwp-option-page-v3.php:439
172
+ msgid "All options have been saved."
173
+ msgstr "Todas las opciones han sido guardadas."
174
+
175
+ #: src/class-bwp-gxs.php:1458
176
+ msgid "Also exclude posts that belong to excluded terms."
177
+ msgstr ""
178
+
179
+ #: src/class-bwp-gxs.php:1787
180
+ #, php-format
181
+ msgid ""
182
+ "Also, if you notice that some non-news contents are indexed too, read <a "
183
+ "href=\"%sfaq#google-news\" target=\"_blank\">this</a>."
184
+ msgstr ""
185
+
186
+ #: src/class-bwp-gxs.php:1799
187
+ msgid "Articles that are older than specified day(s) will NOT be considered."
188
+ msgstr ""
189
+
190
+ #: src/class-bwp-gxs.php:3108
191
+ #, fuzzy
192
+ msgid "Author archive"
193
+ msgstr "archivos de autor de sitemap"
194
+
195
+ #: src/class-bwp-gxs.php:1456
196
+ #, fuzzy
197
+ msgid "Author archives"
198
+ msgstr "archivos de autor de sitemap"
199
+
200
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:521
201
+ msgid "BWP Gems"
202
+ msgstr ""
203
+
204
+ #: src/class-bwp-gxs.php:948
205
+ msgid "BWP Google News XML Sitemap"
206
+ msgstr "BWP Google Sitemap de Noticias XML"
207
+
208
+ #: src/class-bwp-gxs.php:941
209
+ msgid "BWP Google XML Sitemaps"
210
+ msgstr "BWP Google XML Sitemaps"
211
+
212
+ #: src/class-bwp-gxs.php:955
213
+ #, fuzzy
214
+ msgid "BWP Google XML Sitemaps - Advanced Options"
215
+ msgstr "BWP Google XML Sitemaps Generador"
216
+
217
+ #: src/class-bwp-gxs.php:2529
218
+ msgid "BWP Google XML Sitemaps Error"
219
+ msgstr "BWP Google XML Sitemaps Error"
220
+
221
+ #: src/class-bwp-gxs.php:962
222
+ #, fuzzy
223
+ msgid "BWP Google XML Sitemaps Log"
224
+ msgstr "BWP Google XML Sitemaps"
225
+
226
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:531
227
+ msgid "BWP News"
228
+ msgstr ""
229
+
230
+ #: src/class-bwp-gxs.php:2126
231
+ #, fuzzy
232
+ msgid ""
233
+ "Below are messages logged when your sitemaps were generated, including <span "
234
+ "style=\"color: #999999;\">notices</span>, <span style=\"color: #FF0000;"
235
+ "\">errors</span> and <span style=\"color: #009900;\">success messages</span>."
236
+ msgstr ""
237
+ "<em>Más información detallada sobre como tus sitemaps han sido generados "
238
+ "incluyendo <span style=\"color: #999999;\">noticias</span>, <span style="
239
+ "\"color: #FF0000;\">errores</span> and <span style=\"color: #009900;"
240
+ "\">mensajes satisfactorios</span>.</em>"
241
+
242
+ #: src/class-bwp-gxs.php:989
243
+ #, fuzzy
244
+ msgid "Better WordPress Google News XML Sitemap"
245
+ msgstr "BWP Google Sitemap de Noticias XML"
246
+
247
+ #: src/class-bwp-gxs.php:972 src/class-bwp-gxs.php:981
248
+ #, fuzzy
249
+ msgid "Better WordPress Google XML Sitemaps"
250
+ msgstr "BWP Google XML Sitemaps"
251
+
252
+ #: src/class-bwp-gxs.php:997
253
+ #, fuzzy
254
+ msgid "Better WordPress Google XML Sitemaps Advanced Options"
255
+ msgstr "BWP Google XML Sitemaps Generador"
256
+
257
+ #: src/class-bwp-gxs.php:1005
258
+ #, fuzzy
259
+ msgid "Better WordPress Google XML Sitemaps Log"
260
+ msgstr "BWP Google XML Sitemaps"
261
+
262
+ #: src/class-bwp-gxs.php:1465
263
+ msgid "Bing"
264
+ msgstr "Bing"
265
+
266
+ #: src/class-bwp-gxs.php:1919
267
+ msgid "Cache directory"
268
+ msgstr ""
269
+
270
+ #: src/class-bwp-gxs.php:2186
271
+ #, php-format
272
+ msgid ""
273
+ "Cache directory (<code>%s</code>) does not exist or is not writable. Please "
274
+ "try CHMODing it to either 755 or 777, or disable caching to hide this "
275
+ "warning (not recommended)."
276
+ msgstr ""
277
+
278
+ #: src/class-bwp-gxs.php:3305
279
+ #, php-format
280
+ msgid ""
281
+ "Cache directory <strong>%s</strong> is not writable, no cache file was "
282
+ "created."
283
+ msgstr ""
284
+
285
+ #: src/class-bwp-gxs.php:1918
286
+ msgid "Cache expiry time"
287
+ msgstr ""
288
+
289
+ #: src/class-bwp-gxs.php:1953
290
+ msgid ""
291
+ "Cache your sitemaps for better performance. If you are still configuring the "
292
+ "plugin it's best to disable caching or you might have to manually flush the "
293
+ "cache for any changes to show up."
294
+ msgstr ""
295
+
296
+ #: src/templates/provider/admin/external-page-form.html.php:29
297
+ msgid "Calculate using \"Last modified\""
298
+ msgstr ""
299
+
300
+ #: src/templates/provider/admin/external-pages.html.php:23
301
+ #: src/templates/provider/admin/external-page-form.html.php:27
302
+ #, fuzzy
303
+ msgid "Change frequency"
304
+ msgstr "Frecuencia de cambio por defecto"
305
+
306
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:439
307
+ msgid "Check out this cool plugin"
308
+ msgstr ""
309
+
310
+ #: src/class-bwp-gxs.php:1381
311
+ msgid "Choose appropriate sitemaps to generate."
312
+ msgstr ""
313
+
314
+ #: src/class-bwp-gxs.php:2359
315
+ #, fuzzy
316
+ msgid "Clear Message Log"
317
+ msgstr "Limpiar todos los registros"
318
+
319
+ #: src/templates/provider/admin/external-page-form.html.php:51
320
+ msgid "Click to open a calendar"
321
+ msgstr ""
322
+
323
+ #: src/templates/logger/admin/sitemap-log.html.php:39
324
+ msgid "Click to regenerate"
325
+ msgstr ""
326
+
327
+ #: src/templates/logger/admin/sitemap-log.html.php:34
328
+ msgid "Click to view"
329
+ msgstr ""
330
+
331
+ #: src/templates/provider/admin/external-page-modal.html.php:24
332
+ msgid "Close"
333
+ msgstr ""
334
+
335
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:387
336
+ msgid "Coffees"
337
+ msgstr ""
338
+
339
+ #: src/class-bwp-gxs.php:1911
340
+ #, fuzzy
341
+ msgid "Compress sitemaps"
342
+ msgstr "Tus sitemaps"
343
+
344
+ #: src/handler/ajax/external-page.php:136
345
+ msgid "Could not add/update page, please try again."
346
+ msgstr ""
347
+
348
+ #: src/class-bwp-gxs.php:2425
349
+ #, php-format
350
+ msgid ""
351
+ "Could not flush the cache, cache directory is either not found or is not "
352
+ "writable. See <a href=\"%s\" target=\"_blank\">this FAQ entry</a> for a "
353
+ "possible solution."
354
+ msgstr ""
355
+
356
+ #: src/class-bwp-gxs.php:3318
357
+ #, fuzzy, php-format
358
+ msgid "Could not write sitemap file to cache directory <strong>%s</strong>"
359
+ msgstr ""
360
+ "Cargado un fichero personalizado de módulo sitemapindex: <strong>%s</strong>."
361
+
362
+ #: src/class-bwp-gxs.php:1346
363
+ msgid "Custom XSLT stylesheet URL"
364
+ msgstr "URL para la hoja de estilo XSLT"
365
+
366
+ #: src/class-bwp-gxs.php:1922
367
+ #, fuzzy
368
+ msgid "Custom module directory"
369
+ msgstr "Directorio alternativo del módulo"
370
+
371
+ #: src/class-bwp-gxs.php:1416
372
+ msgid ""
373
+ "Customize the look and feel of your sitemaps. Note that no stylesheet will "
374
+ "be used for the Google News sitemap."
375
+ msgstr ""
376
+
377
+ #: src/class-bwp-gxs.php:1921
378
+ msgid "Database query limit"
379
+ msgstr ""
380
+
381
+ #: src/class-bwp-gxs.php:3104
382
+ #, fuzzy
383
+ msgid "Date archive"
384
+ msgstr "Archivos de datos de los sitemaps."
385
+
386
+ #: src/class-bwp-gxs.php:1455
387
+ #, fuzzy
388
+ msgid "Date archives"
389
+ msgstr "Archivos de datos de los sitemaps."
390
+
391
+ #: src/class-bwp-gxs.php:1923
392
+ #, fuzzy
393
+ msgid "Debugging"
394
+ msgstr "(Debug está activado)"
395
+
396
+ #: src/class-bwp-gxs.php:1460
397
+ #, fuzzy
398
+ msgid ""
399
+ "Default XSLT stylesheets will be used. Set your custom stylesheets below or "
400
+ "filter the <code>bwp_gxs_xslt</code> hook."
401
+ msgstr ""
402
+ "Esto cargará la hoja de estilos por defecto de este plugin. Podrás usar una "
403
+ "hoja de estilos personalizada más abajo o usar el gancho (hook) "
404
+ "<code>bwp_gxs_xslt</code>."
405
+
406
+ #: src/class-bwp-gxs.php:1336
407
+ msgid "Default change frequency"
408
+ msgstr "Frecuencia de cambio por defecto"
409
+
410
+ #: src/class-bwp-gxs.php:1337
411
+ msgid "Default priority"
412
+ msgstr "Prioridad por defecto"
413
+
414
+ #: src/class-bwp-gxs.php:1335
415
+ msgid "Default values"
416
+ msgstr ""
417
+
418
+ #: src/class-bwp-gxs.php:1412
419
+ msgid "Default values are only used when valid ones can not be calculated."
420
+ msgstr ""
421
+
422
+ #: src/class-bwp-gxs.php:1978
423
+ msgid ""
424
+ "Disable this to use the local timezone setting in <em>Settings >> General</"
425
+ "em>."
426
+ msgstr ""
427
+
428
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:1530
429
+ msgid "Dismiss this notice."
430
+ msgstr ""
431
+
432
+ #: src/class-bwp-gxs.php:1818
433
+ msgid ""
434
+ "Due to performance reason, it is advised to NOT use a tag-like taxonomy "
435
+ "(such as <em>Post Tag</em>) as the news taxonomy."
436
+ msgstr ""
437
+
438
+ #: src/templates/provider/admin/external-page-form.html.php:19
439
+ msgid ""
440
+ "Each page must have a unique URL, so if you provide an existing URL, the "
441
+ "page with that URL will be updated with new data provided here."
442
+ msgstr ""
443
+
444
+ #: src/class-bwp-gxs.php:561
445
+ msgid "Edit this page"
446
+ msgstr ""
447
+
448
+ #: src/class-bwp-gxs.php:1917
449
+ #, fuzzy
450
+ msgid "Enable auto cache re-generation"
451
+ msgstr "¿Habilitar auto regeneración de la caché?"
452
+
453
+ #: src/class-bwp-gxs.php:1924
454
+ msgid "Enable build stats"
455
+ msgstr ""
456
+
457
+ #: src/class-bwp-gxs.php:1916
458
+ #, fuzzy
459
+ msgid "Enable caching"
460
+ msgstr "¿Habilitar caché?"
461
+
462
+ #: src/class-bwp-gxs.php:1347
463
+ #, fuzzy
464
+ msgid "Enable credit"
465
+ msgstr "¿Activar crédito?"
466
+
467
+ #: src/class-bwp-gxs.php:1926
468
+ #, fuzzy
469
+ msgid "Enable debugging mode"
470
+ msgstr "¿Habilitar la Depuración?"
471
+
472
+ #: src/class-bwp-gxs.php:1640 src/class-bwp-gxs.php:1643
473
+ #, fuzzy
474
+ msgid "Enable extension"
475
+ msgstr "¿Habilitar la Depuración?"
476
+
477
+ #: src/class-bwp-gxs.php:1927
478
+ #, fuzzy
479
+ msgid "Enable extra debugging mode"
480
+ msgstr "¿Habilitar la Depuración?"
481
+
482
+ #: src/class-bwp-gxs.php:1324 src/class-bwp-gxs.php:1342
483
+ #, fuzzy
484
+ msgid "Enable following post types"
485
+ msgstr "Excluir los siguientes tipos de entradas:"
486
+
487
+ #: src/class-bwp-gxs.php:1323
488
+ #, fuzzy
489
+ msgid "Enable following sitemaps"
490
+ msgstr "Excluir los siguientes tipos de entradas:"
491
+
492
+ #: src/class-bwp-gxs.php:1325
493
+ #, fuzzy
494
+ msgid "Enable following taxonomies"
495
+ msgstr "Excluir las siguientes taxonomías:"
496
+
497
+ #: src/class-bwp-gxs.php:1641
498
+ #, fuzzy
499
+ msgid "Enable for following post types"
500
+ msgstr "Excluir los siguientes tipos de entradas:"
501
+
502
+ #: src/class-bwp-gxs.php:1653
503
+ msgid "Enable keywords support"
504
+ msgstr ""
505
+
506
+ #: src/class-bwp-gxs.php:1925
507
+ #, fuzzy
508
+ msgid "Enable message log"
509
+ msgstr "¿Habilitar registro?"
510
+
511
+ #: src/class-bwp-gxs.php:1652
512
+ #, fuzzy
513
+ msgid "Enable multi-term support"
514
+ msgstr "¿Habilitar el Modo Multi-categoriía?"
515
+
516
+ #: src/class-bwp-gxs.php:1914
517
+ msgid "Enable multisite robots.txt support"
518
+ msgstr ""
519
+
520
+ #: src/class-bwp-gxs.php:1340 src/class-bwp-gxs.php:1644
521
+ #, fuzzy
522
+ msgid "Enable pinging"
523
+ msgstr "¿Habilitar registro?"
524
+
525
+ #: src/class-bwp-gxs.php:1913
526
+ msgid "Enable robots.txt support"
527
+ msgstr ""
528
+
529
+ #: src/class-bwp-gxs.php:1723
530
+ msgid "Enable this if you have posts assigned to more than one terms."
531
+ msgstr ""
532
+
533
+ #: src/class-bwp-gxs.php:3647
534
+ msgid "Enable/disable sitemaps via <em>BWP Sitemaps >> XML Sitemaps</em>."
535
+ msgstr ""
536
+
537
+ #: src/class-bwp-gxs.php:1700
538
+ #, fuzzy
539
+ msgid "Exclude"
540
+ msgstr "excluir"
541
+
542
+ #: src/class-bwp-gxs.php:1385
543
+ #, php-format
544
+ msgid ""
545
+ "Exclude individual items for each sitemap. You can also use <a href="
546
+ "\"%s#exclude-items\" target=\"_blank\">filters</a> to exclude items "
547
+ "programmatically."
548
+ msgstr ""
549
+
550
+ #: src/class-bwp-gxs.php:1326
551
+ #, fuzzy
552
+ msgid "Exclude items"
553
+ msgstr "excluir"
554
+
555
+ #: src/class-bwp-gxs.php:1327
556
+ #, fuzzy
557
+ msgid "Exclude posts"
558
+ msgstr "Excluir los siguientes tipos de entradas:"
559
+
560
+ #: src/class-bwp-gxs.php:1329
561
+ #, fuzzy
562
+ msgid "Exclude posts by terms"
563
+ msgstr "Excluir los siguientes tipos de entradas:"
564
+
565
+ #: src/templates/provider/admin/exclude-posts.html.php:12
566
+ #: src/templates/provider/admin/exclude-terms.html.php:12
567
+ msgid "Exclude selected items"
568
+ msgstr ""
569
+
570
+ #: src/class-bwp-gxs.php:1328
571
+ #, fuzzy
572
+ msgid "Exclude terms"
573
+ msgstr "excluir"
574
+
575
+ #: src/class-bwp-gxs.php:1543
576
+ #, fuzzy
577
+ msgid ""
578
+ "Expect an absolute URL, e.g. <code>http://example.com/my-stylesheet.xsl</"
579
+ "code>. You must also have a stylesheet for the sitemap index that can be "
580
+ "accessed through the above URL, e.g. <code>my-stylesheet.xsl</code> and "
581
+ "<code>my-stylesheetindex.xsl</code>. Leave blank to use provided stylesheets."
582
+ msgstr ""
583
+ "se esperaba una URL absoluta, ej: <code>http://ejemplo.com/mi-stylesheet."
584
+ "xsl</code>. Debes tener una hoja de estilos para el sitemapindex que sea "
585
+ "accesible mediante la URL anterior, ej: <code>mi-stylesheet.xsl</code> y "
586
+ "<code>mi-stylesheetindex.xsl</code>). Por favor, déjalo en blanco si no lo "
587
+ "quieres usar."
588
+
589
+ #: src/class-bwp-gxs.php:2045
590
+ #, fuzzy
591
+ msgid ""
592
+ "Expect an absolute path to a writable directory (i.e. CHMOD to 755 or 777). "
593
+ msgstr ""
594
+ "El directorio caché debe tener permisos de escritura (ej: CHMOD 755 o 777)."
595
+
596
+ #: src/class-bwp-gxs.php:2056
597
+ msgid ""
598
+ "Expect an absolute path to the directory where you put your custom modules "
599
+ "(e.g. <code>/home/mysite/public_html/gxs-modules/</code>). "
600
+ msgstr ""
601
+
602
+ #: src/class-bwp-gxs.php:1971
603
+ #, php-format
604
+ msgid ""
605
+ "Extend this plugin using customizable modules. More info <a href=\"%s#module-"
606
+ "api\">here</a>."
607
+ msgstr ""
608
+
609
+ #: src/class-bwp-gxs.php:338 src/class-bwp-gxs.php:990
610
+ msgid "Extensions"
611
+ msgstr ""
612
+
613
+ #: src/class-bwp-gxs.php:1457
614
+ msgid "External (non-WordPress) pages."
615
+ msgstr ""
616
+
617
+ #: src/class-bwp-gxs.php:3094
618
+ msgid "External page"
619
+ msgstr ""
620
+
621
+ #: src/handler/ajax/external-page.php:131
622
+ msgid "External page has been successfully added/updated."
623
+ msgstr ""
624
+
625
+ #: src/class-bwp-gxs.php:1330 src/class-bwp-gxs.php:1397
626
+ msgid "External pages"
627
+ msgstr ""
628
+
629
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:371
630
+ msgid "FAQ"
631
+ msgstr "Preguntas frecuentes"
632
+
633
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:409
634
+ msgid "Five cups! $25.00"
635
+ msgstr "Cinco tazas! $25"
636
+
637
+ #: src/class-bwp-gxs.php:2348
638
+ #, fuzzy
639
+ msgid "Flush Cache"
640
+ msgstr "Vaciar la caché"
641
+
642
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:548
643
+ msgid "Follow"
644
+ msgstr ""
645
+
646
+ #: src/class-bwp-gxs.php:1519
647
+ #, fuzzy
648
+ msgid ""
649
+ "For a multi-site installation of WordPress, this sitemap will list all "
650
+ "appropriate blogs' addresses within your network, not just the main blog's."
651
+ msgstr ""
652
+ "URL del sitemap principal. Para instalaciones multi-sitio de WordPress, este "
653
+ "sitemap listará todos los dominios dentro de tu red, no solo el blog "
654
+ "principal. Esto también soporta el plugin WPMU Domain Mapping."
655
+
656
+ #: src/class-bwp-gxs.php:1238
657
+ #, php-format
658
+ msgid ""
659
+ "For more details, see <a target=\"_blank\" href=\"%1$s\">this article</a>."
660
+ msgstr ""
661
+
662
+ #: src/class-bwp-gxs.php:1909
663
+ msgid "Formatting"
664
+ msgstr ""
665
+
666
+ #: src/class-bwp-gxs.php:1321
667
+ #, fuzzy
668
+ msgid "Generated Sitemaps"
669
+ msgstr "¿Qué son los Sitemap?"
670
+
671
+ #: src/templates/provider/admin/news-contents.html.php:11
672
+ msgid "Genres"
673
+ msgstr ""
674
+
675
+ #: src/class-bwp-gxs.php:1332
676
+ msgid "Global limit"
677
+ msgstr ""
678
+
679
+ #: src/class-bwp-gxs.php:1464
680
+ msgid "Google"
681
+ msgstr "Google"
682
+
683
+ #: src/class-bwp-gxs.php:1639
684
+ #, fuzzy
685
+ msgid "Google Image Sitemap"
686
+ msgstr "BWP Google XML Sitemaps"
687
+
688
+ #: src/class-bwp-gxs.php:1642
689
+ #, fuzzy
690
+ msgid "Google News Sitemap"
691
+ msgstr "BWP Google Sitemap de Noticias XML"
692
+
693
+ #: src/class-bwp-gxs.php:3082
694
+ msgid "Google News posts"
695
+ msgstr ""
696
+
697
+ #: src/class-bwp-gxs.php:2332
698
+ #, php-format
699
+ msgid ""
700
+ "Google News sitemap could not be generated, please check <a href=\"%s"
701
+ "\">Sitemap Log</a> for possible errors."
702
+ msgstr ""
703
+
704
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:374
705
+ msgid "Got a problem with this plugin? Please say it out loud!"
706
+ msgstr ""
707
+
708
+ #: src/templates/provider/admin/exclude-posts.html.php:27
709
+ #: src/templates/provider/admin/exclude-terms.html.php:27
710
+ msgid "ID"
711
+ msgstr ""
712
+
713
+ #: src/class-bwp-gxs.php:1812
714
+ msgid ""
715
+ "If you enable the \"Google Image Extension\" for selected post type, "
716
+ "featured image will also be added automatically to the news sitemap."
717
+ msgstr ""
718
+
719
+ #: src/class-bwp-gxs.php:2038
720
+ #, fuzzy, php-format
721
+ msgid ""
722
+ "If you have for example 50 blogs, 50 sitemap index entries will be added to "
723
+ "your primary blog's <a href=\"%s\" target=\"_blank\">robots.txt</a>."
724
+ msgstr ""
725
+ "Si te gusta 50 blogs, 50 entradas <code>Sitemap: http://ejemplo.com/"
726
+ "sitemapindex.xml</code> serán agregadas al fichero robots.txt de tu blog "
727
+ "principal, ej: <code>%s</code>."
728
+
729
+ #: src/class-bwp-gxs.php:2027
730
+ #, fuzzy, php-format
731
+ msgid ""
732
+ "If you're on a Multi-site installation with <strong>Sub-domain</strong> "
733
+ "enabled, each blog will have its own robots.txt. Blogs in <strong>sub-"
734
+ "directory</strong> will not, however. Please read the <a href=\"%s#robots.txt"
735
+ "\" target=\"_blank\">documentation</a> for more info."
736
+ msgstr ""
737
+ "Si estás usando una instalación de Multi-Sitio con subdominios activados, "
738
+ "cada sitio tendrá su robots.txt, mientras que los sitios en subdirectorios "
739
+ "no lo tendrán. Por favor lee la <a href=\"%s#toc-robots\" target=\"_blank"
740
+ "\">documentación</a> para más información."
741
+
742
+ #: src/templates/provider/admin/external-page-form.html.php:55
743
+ #: src/class-bwp-gxs.php:1770
744
+ msgid "Important"
745
+ msgstr ""
746
+
747
+ #: src/class-bwp-gxs.php:1699
748
+ #, fuzzy
749
+ msgid "Include"
750
+ msgstr "Incluir"
751
+
752
+ #: src/handler/ajax/external-page.php:91
753
+ msgid "Invalid frequency or priority."
754
+ msgstr ""
755
+
756
+ #: src/class-bwp-gxs.php:1187
757
+ msgid "It appears that no sitemap has been generated yet"
758
+ msgstr ""
759
+
760
+ #: src/class-bwp-gxs.php:1331
761
+ msgid "Item limits"
762
+ msgstr ""
763
+
764
+ #: src/class-bwp-gxs.php:1654
765
+ msgid "Keyword source"
766
+ msgstr ""
767
+
768
+ #: src/templates/logger/admin/sitemap-log.html.php:11
769
+ msgid "Last generated on"
770
+ msgstr ""
771
+
772
+ #: src/templates/provider/admin/external-pages.html.php:25
773
+ msgid "Last modified"
774
+ msgstr ""
775
+
776
+ #: src/templates/provider/admin/external-page-form.html.php:46
777
+ msgid "Last modified (time is optional)"
778
+ msgstr ""
779
+
780
+ #: src/class-bwp-gxs.php:1766
781
+ #, php-format
782
+ msgid "Learn more about <a href=\"%s\" target=\"_blank\">Image sitemaps</a>."
783
+ msgstr ""
784
+
785
+ #: src/class-bwp-gxs.php:2049
786
+ #, php-format
787
+ msgid "Leave empty to use <code>%s</code>."
788
+ msgstr ""
789
+
790
+ #: src/class-bwp-gxs.php:1405
791
+ msgid "Limit the number of items to output in one sitemap. "
792
+ msgstr ""
793
+
794
+ #: src/class-bwp-gxs.php:1985
795
+ #, php-format
796
+ msgid ""
797
+ "Log useful messages when sitemaps are generated. The log can be viewed <a "
798
+ "href=\"%s\">here</a>."
799
+ msgstr ""
800
+
801
+ #: src/class-bwp-gxs.php:2132
802
+ msgid ""
803
+ "Logging is not currently enabled. You can enable this feature by checking "
804
+ "\"Enable logging\" in <strong>XML Sitemaps >> Sitemap log & debug</strong>."
805
+ msgstr ""
806
+
807
+ #: src/class-bwp-gxs.php:1344
808
+ msgid "Look and Feel"
809
+ msgstr ""
810
+
811
+ #: src/templates/logger/admin/sitemap-log.html.php:23
812
+ #: src/templates/logger/admin/message-log.html.php:11
813
+ #, fuzzy
814
+ msgid "M d, Y h:i:s A"
815
+ msgstr "j M, Y : H:i:s"
816
+
817
+ #: src/class-bwp-gxs.php:1345
818
+ msgid "Make sitemaps look pretty"
819
+ msgstr ""
820
+
821
+ #: src/class-bwp-gxs.php:1475
822
+ msgid "Maximum is <strong>50,000</strong>. Set to 0 to use the Global limit."
823
+ msgstr ""
824
+
825
+ #: src/class-bwp-gxs.php:1470
826
+ msgid ""
827
+ "Maximum is <strong>50,000</strong>. This setting is applied to all sitemaps."
828
+ msgstr ""
829
+
830
+ #: src/class-bwp-gxs.php:2002
831
+ msgid ""
832
+ "Maximum number of items to fetch in each query to database. This helps when "
833
+ "a sitemap has thousands of items and host is low on memory."
834
+ msgstr ""
835
+
836
+ #: src/class-bwp-gxs.php:2118
837
+ msgid "Message Log"
838
+ msgstr ""
839
+
840
+ #: src/class-bwp-gxs.php:1338
841
+ msgid "Minimum priority"
842
+ msgstr "Prioridad mínima"
843
+
844
+ #: src/templates/provider/admin/news-contents.html.php:9
845
+ #: src/templates/provider/admin/exclude-terms.html.php:28
846
+ #: src/templates/logger/admin/sitemap-log.html.php:10
847
+ msgid "Name"
848
+ msgstr ""
849
+
850
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:503
851
+ msgid "Need a highly customizable theme?"
852
+ msgstr ""
853
+
854
+ #: src/class-bwp-gxs.php:1648
855
+ #, fuzzy
856
+ msgid "News age"
857
+ msgstr "etiquetas de noticias"
858
+
859
+ #: src/class-bwp-gxs.php:1647
860
+ #, fuzzy
861
+ msgid "News language"
862
+ msgstr "Idioma del Sitemap de Noticias"
863
+
864
+ #: src/class-bwp-gxs.php:1646
865
+ msgid "News name"
866
+ msgstr ""
867
+
868
+ #: src/class-bwp-gxs.php:1649
869
+ msgid "News post type"
870
+ msgstr ""
871
+
872
+ #: src/class-bwp-gxs.php:1650
873
+ msgid "News taxonomy"
874
+ msgstr ""
875
+
876
+ #: src/class-bwp-gxs.php:1651
877
+ #, fuzzy
878
+ msgid "News terms and genres"
879
+ msgstr "Idioma del Sitemap de Noticias"
880
+
881
+ #: src/templates/logger/admin/message-log.html.php:23
882
+ msgid "No log yet!"
883
+ msgstr "Aún no hay log"
884
+
885
+ #: src/class-bwp-gxs.php:1745
886
+ msgid "Note:"
887
+ msgstr ""
888
+
889
+ #: src/class-bwp-gxs.php:2458
890
+ msgid "Notice"
891
+ msgstr "Noticia"
892
+
893
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:410
894
+ msgid "One LL-cup!!! $50.00"
895
+ msgstr "Una Taza ExtraGrande!!! $50"
896
+
897
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:407
898
+ msgid "One cup $5.00"
899
+ msgstr "Una taza $5.00"
900
+
901
+ #: src/class-bwp-gxs.php:2060
902
+ msgid ""
903
+ "Override a built-in module by having a module with the same filename in "
904
+ "specified directory."
905
+ msgstr ""
906
+
907
+ #: src/class-bwp-gxs.php:3096
908
+ msgid "Page"
909
+ msgstr ""
910
+
911
+ #: src/class-bwp-gxs.php:1343
912
+ msgid "Ping limit"
913
+ msgstr ""
914
+
915
+ #: src/class-bwp-gxs.php:3985
916
+ #, php-format
917
+ msgid ""
918
+ "Ping limit for today to <em>%s</em> has been reached, consider increasing "
919
+ "the ping limit via <em>XML Sitemaps >> Ping search engines >> \"Ping limit "
920
+ "for each search engine\"</em>"
921
+ msgstr ""
922
+
923
+ #: src/class-bwp-gxs.php:1339
924
+ #, fuzzy
925
+ msgid "Ping search engines"
926
+ msgstr "Motores de búsqueda"
927
+
928
+ #: src/class-bwp-gxs.php:1722
929
+ #, fuzzy
930
+ msgid "Ping search engines when a news article is published."
931
+ msgstr ""
932
+ "¿Hacer ping a los Motores de Búsqueda cuando publiques un nuevo artículo?"
933
+
934
+ #: src/class-bwp-gxs.php:1463
935
+ #, fuzzy
936
+ msgid "Ping search engines when you publish new posts."
937
+ msgstr ""
938
+ "¿Hacer ping a los Motores de Búsqueda cuando publiques un nuevo artículo?"
939
+
940
+ #: src/class-bwp-gxs.php:3964
941
+ #, fuzzy, php-format
942
+ msgid "Pinged <em>%s</em> with <em>%s</em> successfully!"
943
+ msgstr "Se ha hecho Ping %s con %s satisfactoriamente!"
944
+
945
+ #: src/class-bwp-gxs.php:3658
946
+ msgid ""
947
+ "Please make sure that you have at least one sitemap enabled in <em>BWP "
948
+ "Sitemaps >> XML Sitemaps >> Sitemaps to generate</em>."
949
+ msgstr ""
950
+
951
+ #: src/class-bwp-gxs.php:1759
952
+ #, php-format
953
+ msgid ""
954
+ "Please make sure you have enabled the <a href=\"%s\" target=\"_blank\">Post "
955
+ "Thumbnails feature</a> in your theme before enabling this extension."
956
+ msgstr ""
957
+
958
+ #: src/handler/ajax/external-page.php:107
959
+ msgid "Please provide a valid last modified date time."
960
+ msgstr ""
961
+
962
+ #: src/handler/ajax/external-page.php:63
963
+ msgid "Please provide all required fields."
964
+ msgstr ""
965
+
966
+ #: src/handler/ajax/external-page.php:78
967
+ #, php-format
968
+ msgid "Please provide an absolute URL under your domain, for example: %s."
969
+ msgstr ""
970
+
971
+ #: src/class-bwp-gxs.php:2484 src/class-bwp-gxs.php:2498
972
+ msgid "Please select at least one item to exclude."
973
+ msgstr ""
974
+
975
+ #: src/templates/provider/admin/external-page-form.html.php:56
976
+ #, php-format
977
+ msgid ""
978
+ "Please specify \"Last modified\" in your <a href=\"%s\" target=\"_blank"
979
+ "\">local timezone</a>."
980
+ msgstr ""
981
+
982
+ #: src/class-bwp-gxs.php:1780
983
+ #, php-format
984
+ msgid ""
985
+ "Please take a look at <a href=\"%s\" target=\"_blank\">Google News's "
986
+ "guidelines</a> before enabling this feature."
987
+ msgstr ""
988
+
989
+ #: src/class-bwp-gxs.php:1804
990
+ #, php-format
991
+ msgid ""
992
+ "Please take a look at <a href=\"%s\" target=\"_blank\">Google News's "
993
+ "guidelines</a> for more info."
994
+ msgstr ""
995
+
996
+ #: vendor/kminh/bwp-framework/src/class-bwp-option-page-v3.php:93
997
+ msgid "Plugin Configurations"
998
+ msgstr "Configuraciones de Plugin"
999
+
1000
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:375
1001
+ msgid "Plugin Support"
1002
+ msgstr ""
1003
+
1004
+ #: src/class-bwp-gxs.php:3087
1005
+ msgid "Post"
1006
+ msgstr ""
1007
+
1008
+ #: src/class-bwp-gxs.php:1984
1009
+ #, fuzzy
1010
+ msgid ""
1011
+ "Print useful information such as build time, memory usage, SQL queries, etc."
1012
+ msgstr ""
1013
+ "te muestra información útil como tiempo de construcción, uso de memoria, "
1014
+ "consultas SQL, etc."
1015
+
1016
+ #: src/templates/provider/admin/external-pages.html.php:24
1017
+ #: src/templates/provider/admin/external-page-form.html.php:37
1018
+ msgid "Priority"
1019
+ msgstr ""
1020
+
1021
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:378
1022
+ msgid "Rate this plugin 5 stars if you like it, thank you!"
1023
+ msgstr ""
1024
+
1025
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:379
1026
+ msgid "Rate this plugin 5 stars!"
1027
+ msgstr ""
1028
+
1029
+ #: src/class-bwp-gxs.php:1981
1030
+ #, fuzzy
1031
+ msgid ""
1032
+ "Re-generate sitemap cache when expired. If you disable this, remember to "
1033
+ "manually flush the cache once in a while."
1034
+ msgstr ""
1035
+ "cuando la caché de un sitemap caduca, este plugin intentará generar la caché "
1036
+ "de nuevo. Si desactivas esto, recuerda el limpiar la caché manualmente de "
1037
+ "vez en cuando."
1038
+
1039
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:370
1040
+ msgid "Read this first before asking any question!"
1041
+ msgstr ""
1042
+
1043
+ #: src/templates/provider/admin/exclude-posts.html.php:29
1044
+ #: src/templates/provider/admin/exclude-terms.html.php:29
1045
+ msgid "Remove"
1046
+ msgstr ""
1047
+
1048
+ #: src/class-bwp-gxs.php:557
1049
+ msgid "Remove from exclusion"
1050
+ msgstr ""
1051
+
1052
+ #: src/class-bwp-gxs.php:562
1053
+ msgid "Remove this page"
1054
+ msgstr ""
1055
+
1056
+ #: src/class-bwp-gxs.php:3489
1057
+ #, fuzzy, php-format
1058
+ msgid "Requested sitemap (<em>%s.xml</em>) was not found or not enabled."
1059
+ msgstr "Modulo requerido (<em>%s</em>) no encontrado o no permitido."
1060
+
1061
+ #: src/templates/provider/admin/external-page-modal.html.php:27
1062
+ msgid "Reset"
1063
+ msgstr ""
1064
+
1065
+ #: src/class-bwp-gxs.php:1912
1066
+ msgid "Robots.txt"
1067
+ msgstr ""
1068
+
1069
+ #: src/templates/provider/admin/external-page-modal.html.php:33
1070
+ #: vendor/kminh/bwp-framework/src/class-bwp-option-page-v3.php:306
1071
+ msgid "Save Changes"
1072
+ msgstr "Guardar cambios"
1073
+
1074
+ #: src/class-bwp-gxs.php:2346
1075
+ #, fuzzy
1076
+ msgid "Save Changes and Flush Cache"
1077
+ msgstr "Guardar cambios"
1078
+
1079
+ #: src/class-bwp-gxs.php:1341
1080
+ msgid "Search engines to ping"
1081
+ msgstr ""
1082
+
1083
+ #: src/templates/provider/admin/exclude-posts.html.php:5
1084
+ msgid "Search for posts to exclude"
1085
+ msgstr ""
1086
+
1087
+ #: src/templates/provider/admin/exclude-terms.html.php:5
1088
+ msgid "Search for terms to exclude"
1089
+ msgstr ""
1090
+
1091
+ #: src/templates/provider/admin/news-contents.html.php:8
1092
+ msgid "Select"
1093
+ msgstr ""
1094
+
1095
+ #: src/class-bwp-gxs.php:1248
1096
+ msgid "Select a post type"
1097
+ msgstr ""
1098
+
1099
+ #: src/class-bwp-gxs.php:1262
1100
+ msgid "Select a taxonomy"
1101
+ msgstr ""
1102
+
1103
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:386
1104
+ msgid "Send"
1105
+ msgstr ""
1106
+
1107
+ #: src/class-bwp-gxs.php:1794
1108
+ msgid ""
1109
+ "Set a different name for your news sitemap. By default, your <em>Site Title</"
1110
+ "em> is used."
1111
+ msgstr ""
1112
+
1113
+ #: src/class-bwp-gxs.php:1801
1114
+ msgid "Set to <code>0</code> to disable (not recommended)."
1115
+ msgstr ""
1116
+
1117
+ #: src/class-bwp-gxs.php:1406
1118
+ #, php-format
1119
+ msgid ""
1120
+ "Setting too high limits might lead to white page error due to timeout or "
1121
+ "memory issue. Refer to this plugin's <a target=\"_blank\" href=\"%s\">FAQ "
1122
+ "section</a> for more info."
1123
+ msgstr ""
1124
+
1125
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:1315
1126
+ msgid "Settings"
1127
+ msgstr "Configuración"
1128
+
1129
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:431
1130
+ msgid "Share the love for this plugin!"
1131
+ msgstr ""
1132
+
1133
+ #: src/templates/provider/admin/exclude-posts.html.php:17
1134
+ #: src/templates/provider/admin/exclude-terms.html.php:17
1135
+ msgid "Show/Hide excluded items"
1136
+ msgstr ""
1137
+
1138
+ #: src/templates/provider/admin/external-pages.html.php:12
1139
+ msgid "Show/Hide external pages"
1140
+ msgstr ""
1141
+
1142
+ #: src/class-bwp-gxs.php:1737
1143
+ msgid "Show/Hide selected terms"
1144
+ msgstr ""
1145
+
1146
+ #: src/class-bwp-gxs.php:1462
1147
+ msgid "Site Address"
1148
+ msgstr ""
1149
+
1150
+ #: src/class-bwp-gxs.php:1915
1151
+ #, fuzzy
1152
+ msgid "Sitemap Cache"
1153
+ msgstr "Estadísticas de Sitemap"
1154
+
1155
+ #: src/class-bwp-gxs.php:1645
1156
+ #, fuzzy
1157
+ msgid "Sitemap Contents"
1158
+ msgstr "Generador de Sitemap"
1159
+
1160
+ #: src/class-bwp-gxs.php:350 src/class-bwp-gxs.php:1006
1161
+ #, fuzzy
1162
+ msgid "Sitemap Log"
1163
+ msgstr "Log de Sitemap Generator"
1164
+
1165
+ #: src/class-bwp-gxs.php:1920
1166
+ #, fuzzy
1167
+ msgid "Sitemap modules"
1168
+ msgstr "Opciones del Index Sitemap"
1169
+
1170
+ #: src/class-bwp-gxs.php:1461
1171
+ msgid ""
1172
+ "Sitemaps like <code>post.xml</code> are split into <code>post_part1.xml</"
1173
+ "code>, <code>post_part2.xml</code>, etc. when limit reached."
1174
+ msgstr ""
1175
+
1176
+ #: src/class-bwp-gxs.php:1322
1177
+ #, fuzzy
1178
+ msgid "Sitemaps to generate"
1179
+ msgstr "Generador de Sitemap"
1180
+
1181
+ #: src/class-bwp-gxs.php:1459
1182
+ #, fuzzy
1183
+ msgid "Some copyrighted info is added to your sitemaps."
1184
+ msgstr ""
1185
+ "alguna información relativa al copyright será agregara a tus sitemaps. "
1186
+ "¡Gracias!"
1187
+
1188
+ #: src/class-bwp-gxs.php:1333
1189
+ msgid "Split <strong>post-based</strong> sitemaps"
1190
+ msgstr ""
1191
+
1192
+ #: src/class-bwp-gxs.php:1334
1193
+ msgid "Split limit"
1194
+ msgstr ""
1195
+
1196
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:541
1197
+ msgid "Subscribe"
1198
+ msgstr ""
1199
+
1200
+ #: src/class-bwp-gxs.php:2472
1201
+ #, php-format
1202
+ msgid "Successfully excluded <strong>%d</strong> items."
1203
+ msgstr ""
1204
+
1205
+ #: src/class-bwp-gxs.php:3627
1206
+ #, fuzzy, php-format
1207
+ msgid ""
1208
+ "Successfully generated <em>%s.xml</em> using custom module file <em>%s</em>."
1209
+ msgstr ""
1210
+ "Se ha generado satisfactoriamente <em>%s.xml</em> usando el módulo <em>%s</"
1211
+ "em>."
1212
+
1213
+ #: src/class-bwp-gxs.php:3628
1214
+ #, fuzzy, php-format
1215
+ msgid "Successfully generated <em>%s.xml</em> using module file <em>%s</em>."
1216
+ msgstr ""
1217
+ "Se ha generado satisfactoriamente <em>%s.xml</em> usando el módulo <em>%s</"
1218
+ "em>."
1219
+
1220
+ #: src/class-bwp-gxs.php:3271
1221
+ #, php-format
1222
+ msgid "Successfully served a cached version of <em>%s.xml</em>."
1223
+ msgstr ""
1224
+ "Se ha servido satisfactoriamente una versión cacheada de <em>%s.xml</em>."
1225
+
1226
+ #: src/class-bwp-gxs.php:1454
1227
+ #, fuzzy
1228
+ msgid "Taxonomy (including custom taxonomies)"
1229
+ msgstr ""
1230
+ "sitemap de los archivos de taxonomía, incluyendo taxonomías personalizadas."
1231
+
1232
+ #: src/class-bwp-gxs.php:2416
1233
+ msgid "There are no cached sitemaps to flush."
1234
+ msgstr ""
1235
+
1236
+ #: src/class-bwp-gxs.php:3652
1237
+ #, php-format
1238
+ msgid "There are no public <em>%s</em>."
1239
+ msgstr ""
1240
+
1241
+ #: src/class-bwp-gxs.php:3597
1242
+ #, php-format
1243
+ msgid ""
1244
+ "There is no class named <strong>%s</strong> in the module file <strong>%s</"
1245
+ "strong>."
1246
+ msgstr ""
1247
+ "No existe una clase llamada <strong>%s</strong> en el fichero del módulo "
1248
+ "<strong>%s</strong>."
1249
+
1250
+ #: src/class-bwp-gxs.php:558 src/class-bwp-gxs.php:563
1251
+ msgid "This action can not be undone, are you sure?"
1252
+ msgstr ""
1253
+
1254
+ #: src/class-bwp-gxs.php:1771
1255
+ msgid ""
1256
+ "This extension has an effect on performance, if you notice any slowdown "
1257
+ "please try disabling it first."
1258
+ msgstr ""
1259
+
1260
+ #: src/class-bwp-gxs.php:1827
1261
+ #, fuzzy
1262
+ msgid ""
1263
+ "This ping works separately from the sitemap index ping, and only occurs when "
1264
+ "you publish an article in one of the news categories set below."
1265
+ msgstr ""
1266
+ "Este ping funciona separadamente del sitemapindex ping, y se ejecuta "
1267
+ "únicamente cuando publicas un artículo en una de las categorías de noticias "
1268
+ "seleccionadas abajo."
1269
+
1270
+ #: src/class-bwp-gxs.php:379
1271
+ #, php-format
1272
+ msgid ""
1273
+ "This sitemap was originally generated in %s second(s) (Memory usage: %s) - "
1274
+ "%s queries - %s URL(s) listed"
1275
+ msgstr ""
1276
+ "Este sitemap fue originalmente generado en %s segundo(s) (Uso de Memoria: "
1277
+ "%s) - %s consultas - %s URL(s) listadas"
1278
+
1279
+ #: src/templates/provider/admin/exclude-posts.html.php:28
1280
+ msgid "Title"
1281
+ msgstr ""
1282
+
1283
+ #: src/class-bwp-gxs.php:1231
1284
+ #, fuzzy, php-format
1285
+ msgid ""
1286
+ "To proceed, submit your <a href=\"%s\" target=\"_blank\">sitemapindex</a> to "
1287
+ "major search engines like <a href=\"%s\" target=\"_blank\">Google</a> or <a "
1288
+ "href=\"%s\" target=\"_blank\">Bing</a>."
1289
+ msgstr ""
1290
+ "<em>Enviar tu sitemapindex a los principales motores de búsqueda como <a "
1291
+ "href=\"%s\" target=\"_blank\">Google</a>, <a href=\"%s\" target=\"_blank"
1292
+ "\">Bing</a> o <a href=\"%s\" target=\"_blank\">Ask</a>.</em>"
1293
+
1294
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:408
1295
+ msgid "Two cups $10.00"
1296
+ msgstr "Dos tazas $10"
1297
+
1298
+ #: src/class-bwp-gxs.php:3959
1299
+ msgid "Unknown response code from search engines. Ping failed."
1300
+ msgstr ""
1301
+ "Código de respuesta desconocido de los motores de búsqueda. Fallo al hacer "
1302
+ "Ping."
1303
+
1304
+ #: src/templates/provider/admin/external-pages.html.php:22
1305
+ msgid "Url"
1306
+ msgstr ""
1307
+
1308
+ #: src/class-bwp-gxs.php:1910
1309
+ #, fuzzy
1310
+ msgid "Use GMT for Last Modified date"
1311
+ msgstr "¿Usar GMT para la Última Fecha de modificación?"
1312
+
1313
+ #: src/class-bwp-gxs.php:1979
1314
+ #, fuzzy, php-format
1315
+ msgid ""
1316
+ "Use gzip to make sitemaps ~70% smaller. If you see an error after enabling "
1317
+ "this, it's very likely that you have gzip active on your server already."
1318
+ msgstr ""
1319
+ "reduce tu sitemap ~ 70% más pequeño. <strong>Importante:</strong> si ves "
1320
+ "un error después de activar esto, es muy probable que ya tengas activado "
1321
+ "gzip en tu servidor."
1322
+
1323
+ #: src/class-bwp-gxs.php:1706
1324
+ msgid "Use the selected \"News taxonomy\""
1325
+ msgstr ""
1326
+
1327
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:416
1328
+ msgid "Via"
1329
+ msgstr ""
1330
+
1331
+ #: src/templates/provider/admin/news-contents.html.php:13
1332
+ #: vendor/kminh/bwp-framework/src/class-bwp-option-page-v3.php:828
1333
+ msgid "View more info in a separate tab"
1334
+ msgstr ""
1335
+
1336
+ #: src/class-bwp-gxs.php:2185
1337
+ msgid "Warning"
1338
+ msgstr "Aviso"
1339
+
1340
+ #: src/class-bwp-gxs.php:1525
1341
+ msgid ""
1342
+ "When a post belongs to multiple terms, it will be excluded if <strong>ANY</"
1343
+ "strong> of those terms is currently excluded."
1344
+ msgstr ""
1345
+
1346
+ #: src/class-bwp-gxs.php:1986
1347
+ msgid ""
1348
+ "When this is on, NO caching is used and <code>WP_DEBUG</code> is respected, "
1349
+ "useful when developing new modules."
1350
+ msgstr ""
1351
+
1352
+ #: src/class-bwp-gxs.php:1987
1353
+ #, php-format
1354
+ msgid ""
1355
+ "When this is on, NO headers are sent and sitemaps are NOT compressed, useful "
1356
+ "when debugging <em>Content Encoding Error</em>. More info <a href="
1357
+ "\"%s#sitemap-log-debug\" target=\"_blank\">here</a>."
1358
+ msgstr ""
1359
+
1360
+ #: src/class-bwp-gxs.php:1421
1361
+ #, fuzzy
1362
+ msgid ""
1363
+ "Whenever you post something new to your blog, you can <em>ping</em> search "
1364
+ "engines with your sitemap index to tell them your blog just got updated."
1365
+ msgstr ""
1366
+ "<em>Ahora, cada vez que escribas algo nuevo en tu blog, podraás hacer "
1367
+ "<em>ping</em> a los motores de búsqueda e informarles de que tu blog ha sido "
1368
+ "actualizado. Hacer Ping puede ser menos efectivo de lo que piensas, pero aun "
1369
+ "así deberías habilitar esta característica.</em>"
1370
+
1371
+ #: src/class-bwp-gxs.php:1959
1372
+ #, php-format
1373
+ msgid ""
1374
+ "WordPress generates a %svirtual robots.txt%s file for your blog by default. "
1375
+ "You can add the sitemap index file to that robots.txt file using settings "
1376
+ "below."
1377
+ msgstr ""
1378
+
1379
+ #: src/class-bwp-gxs.php:963
1380
+ msgid "XML Sitemap Log"
1381
+ msgstr ""
1382
+
1383
+ #: src/class-bwp-gxs.php:335 src/class-bwp-gxs.php:942
1384
+ #: src/class-bwp-gxs.php:982
1385
+ #, fuzzy
1386
+ msgid "XML Sitemaps"
1387
+ msgstr "BWP Google XML Sitemaps"
1388
+
1389
+ #: src/class-bwp-gxs.php:956
1390
+ #, fuzzy
1391
+ msgid "XML Sitemaps - Advanced Options"
1392
+ msgstr "Opciones del Index Sitemap"
1393
+
1394
+ #: src/class-bwp-gxs.php:949
1395
+ #, fuzzy
1396
+ msgid "XML Sitemaps - Extensions"
1397
+ msgstr "Opciones del Index Sitemap"
1398
+
1399
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:565
1400
+ #, php-format
1401
+ msgid "You are using version %s!"
1402
+ msgstr "Estás usando la versión %s!"
1403
+
1404
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:391
1405
+ msgid ""
1406
+ "You can buy me some special coffees if you appreciate my work, thank you!"
1407
+ msgstr ""
1408
+ "Puedes comprarme algñun cafe especial si aprecias mi trabajo, !Gracias!"
1409
+
1410
+ #: src/class-bwp-gxs.php:1748
1411
+ #, php-format
1412
+ msgid ""
1413
+ "You can only select post types that <a href=\"%s\" target=\"_blank\">support "
1414
+ "the thumbnail feature</a>."
1415
+ msgstr ""
1416
+
1417
+ #: src/class-bwp-gxs.php:1980
1418
+ #, fuzzy
1419
+ msgid "Your sitemaps are generated and then cached to reduce unnecessary work."
1420
+ msgstr ""
1421
+ "tu sitemaps han sido generados y cacheados para reducir el trabajo "
1422
+ "innecesario."
1423
+
1424
+ #: src/class-bwp-gxs.php:1191
1425
+ msgid "click to generate your Sitemap Index"
1426
+ msgstr ""
1427
+
1428
+ #: src/class-bwp-gxs.php:1445 src/class-bwp-gxs.php:2013
1429
+ msgid "day(s)"
1430
+ msgstr "día(s)"
1431
+
1432
+ #: src/class-bwp-gxs.php:1715
1433
+ #, fuzzy
1434
+ msgid "day(s)."
1435
+ msgstr "día(s)"
1436
+
1437
+ #: src/class-bwp-gxs.php:2573
1438
+ #, fuzzy
1439
+ msgid "debugging was on"
1440
+ msgstr "(Debug está activado)"
1441
+
1442
+ #: src/class-bwp-gxs.php:2572
1443
+ msgid "extra debugging was on"
1444
+ msgstr ""
1445
+
1446
+ #: src/class-bwp-gxs.php:1400
1447
+ msgid "filter"
1448
+ msgstr ""
1449
+
1450
+ #: src/class-bwp-gxs.php:1444 src/class-bwp-gxs.php:2012
1451
+ msgid "hour(s)"
1452
+ msgstr "hora(s)"
1453
+
1454
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:524
1455
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:534
1456
+ msgid "loading..."
1457
+ msgstr ""
1458
+
1459
+ #: src/class-bwp-gxs.php:1443 src/class-bwp-gxs.php:2011
1460
+ msgid "minute(s)"
1461
+ msgstr "minuto(s)"
1462
+
1463
+ #: src/class-bwp-gxs.php:3073
1464
+ #, php-format
1465
+ msgid ""
1466
+ "news posts that are published within the last <strong>%d day(s)</strong>. To "
1467
+ "include news posts within a longer time period, change the \"News age\" "
1468
+ "setting via BWP Sitemaps >> Extensions >> Google News Sitemap >> Sitemap "
1469
+ "Contents"
1470
+ msgstr ""
1471
+
1472
+ #: src/class-bwp-gxs.php:1108
1473
+ msgid "overridden"
1474
+ msgstr ""
1475
+
1476
+ #: src/class-bwp-gxs.php:1442 src/class-bwp-gxs.php:2010
1477
+ msgid "second(s)"
1478
+ msgstr "segundo(s)"
1479
+
1480
+ #: src/class-bwp-gxs.php:1729
1481
+ msgid "selected terms."
1482
+ msgstr ""
1483
+
1484
+ #: src/class-bwp-gxs.php:1487
1485
+ msgid ""
1486
+ "time(s) per search engine per day. Increase this limit if you publish a lot "
1487
+ "of posts in a single day."
1488
+ msgstr ""
1489
+
1490
+ #: src/templates/provider/admin/external-page-modal.html.php:21
1491
+ msgid "working ..."
1492
+ msgstr ""
1493
+
1494
+ #~ msgid ""
1495
+ #~ ". Do <strong>NOT</strong> use news tags if your news sitemap contains a "
1496
+ #~ "lot of posts as it can be very inefficient to do so. This will be "
1497
+ #~ "improved in future versions."
1498
+ #~ msgstr ""
1499
+ #~ ". <strong>NO</strong> uses tags de noticias si tu sitemap de noticias "
1500
+ #~ "contiene muchos posts, ya que esto puede ser muy ineficiente. Esto se "
1501
+ #~ "mejorará en versiones futuras."
1502
+
1503
+ #~ msgid ""
1504
+ #~ "<a href=\"%s\" target=\"_blank\">%s</a> has been successfully built on "
1505
+ #~ "<strong>%s</strong>."
1506
+ #~ msgstr ""
1507
+ #~ "<a href=\"%s\" target=\"_blank\">%s</a> ha sido construido "
1508
+ #~ "satisfactoriamente <strong>%s</strong>."
1509
+
1510
+ #~ msgid ""
1511
+ #~ "<em>%s.xml</em> does not have any item. You can fix this easily by "
1512
+ #~ "excluding any post types / terms you do not use in <em>Sitemap Generator</"
1513
+ #~ "em> tab within your admin area. If you still see this error, consider "
1514
+ #~ "checking the module that generates this sitemap (<em>%s.php</em>)."
1515
+ #~ msgstr ""
1516
+ #~ "<em>%s.xml</em> no contiene ningún item. Puedes solucionar esto "
1517
+ #~ "fácilmente excluyendo cualquier tipo de post / término que no uses en la "
1518
+ #~ "pestaña de <em>Sitemap Generator</em> dentro del área de administración. "
1519
+ #~ "Si continuar viendo este error, considera revisar el módulo que genera "
1520
+ #~ "este sitemap (<em>%s.php</em>)."
1521
+
1522
+ #~ msgid ""
1523
+ #~ "<em><strong>Note:</strong> If you encounter white page problem, please "
1524
+ #~ "refer to the <a target=\"_blank\" href=\"%s\">FAQ section</a> to know how "
1525
+ #~ "to change this limit appropriately to make this plugin work. Also note "
1526
+ #~ "that, for post-based sitemaps, this option will be overridden by the "
1527
+ #~ "limit you set in the Sitemap Index Options below.</em>"
1528
+ #~ msgstr ""
1529
+ #~ "<em><strong>Nota:</strong> Si encuentras un problema de página en blanco, "
1530
+ #~ "por favor visita <a target=\"_blank\" href=\"%s\">sección de preguntas "
1531
+ #~ "frecuente</a> para saber como cambiar adecuadamente este límite para "
1532
+ #~ "hacer que el plugin funcione. Ten en cuenta, que para los sitemaps "
1533
+ #~ "basados en post, esta opción será sobreescrita por el limite introducido "
1534
+ #~ "en la casilla de más abajo de Opciones de Sitemap Index</em>"
1535
+
1536
+ #~ msgid "<em>Basic information about all your sitemaps.</em>"
1537
+ #~ msgstr "<em>Información básica sobre todos tus sitemaps.</em>"
1538
+
1539
+ #~ msgid ""
1540
+ #~ "<em>Below you will be able to choose what categories to use (or not use) "
1541
+ #~ "in the news sitemap. You can also assign genres to a specific category.</"
1542
+ #~ "em>"
1543
+ #~ msgstr ""
1544
+ #~ "<em>Abajo podrás elegir que categorías usar (o no usar) e el sitemap de "
1545
+ #~ "noticias. También podrás asignar géneros a una categoría específica.</em>"
1546
+
1547
+ #~ msgid "<em>Cache your sitemaps for better performance.</em>"
1548
+ #~ msgstr "<em>Cachea tu sitemap para un mejor rendimiento.</em>"
1549
+
1550
+ #~ msgid ""
1551
+ #~ "<em>Here you can change some settings that affect the default Sitemap "
1552
+ #~ "Index file.</em>"
1553
+ #~ msgstr ""
1554
+ #~ "<em>Aquí puedes cambiar algunas configuraciones que afectan al fichero "
1555
+ #~ "por defecto Sitemap Index.</em>"
1556
+
1557
+ #~ msgid ""
1558
+ #~ "<em>This plugin uses modules to build sitemap data so it is recommended "
1559
+ #~ "that you extend this plugin using modules rather than hooks. Some of the "
1560
+ #~ "settings below only affect modules extending the base module class. Read "
1561
+ #~ "more about using modules <a href=\"%s#using-modules\">here</a>.</em>"
1562
+ #~ msgstr ""
1563
+ #~ "<em>Este plugin hace uso de módulos para construir los datos del sitemap, "
1564
+ #~ "por lo que es recomendable que extiendas este plugin haciendo uso de "
1565
+ #~ "módulos y no de ganchos (hooks). Algunas de las configuraciones de abajo "
1566
+ #~ "solo afectan a los módulos que han extendido de la clase básica módulo. "
1567
+ #~ "Lee más sobre el uso de módulos <a href=\"%s#using-modules\">aquí</a>.</"
1568
+ #~ "em>"
1569
+
1570
+ #~ msgid ""
1571
+ #~ "<span>Genres used for this category</span> (more info <a href=\"%s\" "
1572
+ #~ "target=\"_blank\">here</a>)"
1573
+ #~ msgstr ""
1574
+ #~ "<span>Géneros usados para esta categoría</span> (más informaciín <a href="
1575
+ #~ "\"%s\" target=\"_blank\">aquí</a>)"
1576
+
1577
+ #~ msgid ""
1578
+ #~ "<strong>BWP Google XML Sitemap Message:</strong> Unexpected output (most "
1579
+ #~ "of the time PHP errors) is preventing BWP GXS from showing any sitemap "
1580
+ #~ "contents. Try disabling <code>WP_DEBUG</code> or this plugin's debug "
1581
+ #~ "mode, whichever is on. All unexpected outputs should be shown just above "
1582
+ #~ "this message. If you don't see any, contact me and I might be able to "
1583
+ #~ "help."
1584
+ #~ msgstr ""
1585
+ #~ "<strong>Mensaje de BWP Google XML Sitemap:</strong> Una salida inesperada "
1586
+ #~ "(normalmente por errores PHP) está evitando que BWP GXS muestre el "
1587
+ #~ "contenido del sitemap, Intenta desactivando <code>WP_DEBUG</code> o el "
1588
+ #~ "modo debug de este plugin, si es que está activo. Todos las salidas "
1589
+ #~ "inesperadas serán mostradas justo debajo de este mensaje. Si no ves "
1590
+ #~ "ninguna, contacta conmigo y te echaré una mano."
1591
+
1592
+ #~ msgid ""
1593
+ #~ "After you activate this plugin, all sitemaps should be available right "
1594
+ #~ "away. The next step is to submit the sitemapindex to major search "
1595
+ #~ "engines. You only need the <strong>sitemapindex</strong> and nothing "
1596
+ #~ "else, those search engines will automatically recognize other included "
1597
+ #~ "sitemaps. You can read a small <a href=\"%s\">How-to</a> if you are "
1598
+ #~ "interested."
1599
+ #~ msgstr ""
1600
+ #~ "Después de activar este plugin, todos los sitemaps estarán disponibles de "
1601
+ #~ "inmediato. El siguiente paso es enviar el sitemapindex a los principales "
1602
+ #~ "motores de búsqueda. Solo necesitas el <strong>sitemapindex</strong> y "
1603
+ #~ "nada más, los motores de búsqueda reconocerán los sitemaps incluidos "
1604
+ #~ "dentro de él. Puedes leer un pequeño <a href=\"%s\">Manual</a> si estás "
1605
+ #~ "interesado."
1606
+
1607
+ #~ msgid "Ask.com"
1608
+ #~ msgstr "Ask.com"
1609
+
1610
+ #~ msgid "Automatically split post-based sitemaps into smaller sitemaps?"
1611
+ #~ msgstr ""
1612
+ #~ "¿Dividir automáticamente los sitemaps de entradas en sitemaps más "
1613
+ #~ "pequeños?"
1614
+
1615
+ #~ msgid "BWP Google XML Sitemaps Statistics"
1616
+ #~ msgstr "BWP Google XML Sitemaps Estadísticas"
1617
+
1618
+ #~ msgid "Cache directory (\"%s\") does not exist or is not writable."
1619
+ #~ msgstr "El directorio (\"%s\") no existe o no se puede escribir en él."
1620
+
1621
+ #~ msgid ""
1622
+ #~ "Cache directory does not exist or is not writable. Please read more about "
1623
+ #~ "directory permission <a href='http://www.zzee.com/solutions/unix-"
1624
+ #~ "permissions.shtml'>here</a> (Unix)."
1625
+ #~ msgstr ""
1626
+ #~ "El directorio caché no existe o no tiene permisos de escritura. Lee más "
1627
+ #~ "acerca de los permisos de directorio <a href='http://www.zzee.com/"
1628
+ #~ "solutions/unix-permissions.shtml'>aquí</a> (Unix)."
1629
+
1630
+ #~ msgid ""
1631
+ #~ "Cache file for module <em>%s</em> is not found and will be built right "
1632
+ #~ "away."
1633
+ #~ msgstr ""
1634
+ #~ "Fichero Caché para el módulo <em>%s</em> no ha sido encontrado y será "
1635
+ #~ "generado de inmediato."
1636
+
1637
+ #~ msgid "Cached sitemaps are stored in (auto detected)"
1638
+ #~ msgstr "Lo sitemap cacheados serán almacenados en (autodetectados)"
1639
+
1640
+ #~ msgid "Cached sitemaps will last for"
1641
+ #~ msgstr "El sitemap estará en caché durante"
1642
+
1643
+ #~ msgid "Caching Options"
1644
+ #~ msgstr "Opciones de Caché"
1645
+
1646
+ #~ msgid "Category's name"
1647
+ #~ msgstr "Nombre de la categoría"
1648
+
1649
+ #~ msgid "Clean unexpected output before sitemap generation?"
1650
+ #~ msgstr "¿Limpiar la salida inesperada antes de que se genere el sitemap?"
1651
+
1652
+ #~ msgid "Contact"
1653
+ #~ msgstr "Contacto"
1654
+
1655
+ #~ msgid ""
1656
+ #~ "Could not delete any cached sitemaps. Please manually check the cache "
1657
+ #~ "directory."
1658
+ #~ msgstr ""
1659
+ #~ "No se ha podido borrar ningún sitemap cacheado. Por favor, comprueba "
1660
+ #~ "manualmente el directorio caché."
1661
+
1662
+ #~ msgid ""
1663
+ #~ "Could not load module file: <strong>%s</strong> in both default and "
1664
+ #~ "custom module directory. Please recheck if that module file exists."
1665
+ #~ msgstr ""
1666
+ #~ "No se puede cargar el fichero del módulo: <strong>%s</strong> en el "
1667
+ #~ "directorio default ni en el de módulos personalizados. Por favor, "
1668
+ #~ "comprueba que este módulo existe."
1669
+
1670
+ #~ msgid "Development Log"
1671
+ #~ msgstr "Log de Desarrollo"
1672
+
1673
+ #, fuzzy
1674
+ #~ msgid "Donate to %s"
1675
+ #~ msgstr "Donar a"
1676
+
1677
+ #~ msgid "Dutch"
1678
+ #~ msgstr "Holandés"
1679
+
1680
+ #~ msgid "Enable Gzip?"
1681
+ #~ msgstr "¿Activar Gzip?"
1682
+
1683
+ #~ msgid "Enable pinging functionality?"
1684
+ #~ msgstr "¿Activar funcionalidad de ping?"
1685
+
1686
+ #~ msgid "Enable pinging individual SE"
1687
+ #~ msgstr "Activar ping a MB individuales"
1688
+
1689
+ #~ msgid "Enable this module?"
1690
+ #~ msgstr "¿Activar este módulo?"
1691
+
1692
+ #~ msgid "English"
1693
+ #~ msgstr "Inglés"
1694
+
1695
+ #~ msgid "Error %s from %s"
1696
+ #~ msgstr "Error %s desde %s"
1697
+
1698
+ #~ msgid "Follow me on Twitter!"
1699
+ #~ msgstr "¡Sígueme en Twitter!"
1700
+
1701
+ #~ msgid "French"
1702
+ #~ msgstr "Francés"
1703
+
1704
+ #~ msgid "Frequently Asked Questions"
1705
+ #~ msgstr "Preguntas Más Frecuentes"
1706
+
1707
+ #~ msgid "German"
1708
+ #~ msgstr "Alemán"
1709
+
1710
+ #~ msgid "Get no more than"
1711
+ #~ msgstr "No recibir más de"
1712
+
1713
+ #~ msgid "Got a problem? Send me a feedback!"
1714
+ #~ msgstr "¿Tienes algún problema? !Mánda un comentario!"
1715
+
1716
+ #~ msgid ""
1717
+ #~ "If you disable this, make sure you also use "
1718
+ #~ "<code>date_default_timezone_set</code> to correctly set up a timezone for "
1719
+ #~ "your application."
1720
+ #~ msgstr ""
1721
+ #~ "Si desactivas esto, asegúrate de que usas "
1722
+ #~ "<code>date_default_timezone_set</code> para configurar correctamente la "
1723
+ #~ "zona horaria de tu aplicación."
1724
+
1725
+ #~ msgid ""
1726
+ #~ "In its simplest form, a Sitemap is an XML file that lists URLs for a site "
1727
+ #~ "along with additional metadata about each URL (when it was last updated, "
1728
+ #~ "how often it usually changes, and how important it is, relative to other "
1729
+ #~ "URLs in the site) so that search engines can more intelligently crawl the "
1730
+ #~ "site &mdash; <em>http://www.sitemaps.org/</em>"
1731
+ #~ msgstr ""
1732
+ #~ "En su forma más sencilla, un Sitemap es un fichero XML que lista URLs de "
1733
+ #~ "un sitio junto con metadatos adicionales sobre cada URL (cuando fue la "
1734
+ #~ "última actualización, con que frecuencia cambia, y cuan importante es en "
1735
+ #~ "relación con otras URLs del sitio) por lo que los motores de búsqueda "
1736
+ #~ "pueden rastrear de forma más inteligente el sitio &mdash; <em>http://www."
1737
+ #~ "sitemaps.org/</em>"
1738
+
1739
+ #~ msgid "In sitemapindex, include"
1740
+ #~ msgstr "En sitemapindex, incluir"
1741
+
1742
+ #~ msgid ""
1743
+ #~ "Input a full path to the directory where you put your own modules (e.g. "
1744
+ #~ "<code>/home/mysite/public_html/gxs-modules/</code>), you can also "
1745
+ #~ "override a built-in module by having a module with the same filename in "
1746
+ #~ "this directory. A filter is also available if you would like to use PHP "
1747
+ #~ "instead."
1748
+ #~ msgstr ""
1749
+ #~ "Introduce la ruta completa del directorio donde están tus módulos, (ej: "
1750
+ #~ "<code>/home/misitio/public_html/gxs-modules/</code>), también puedes "
1751
+ #~ "sobreescribir un modulo pre-construido, poniendo en este directorio un "
1752
+ #~ "fichero con el mismo nombre del modulo original. Puedes utilizar un "
1753
+ #~ "filtro si quieres usar PHP en su lugar."
1754
+
1755
+ #~ msgid "Italian"
1756
+ #~ msgstr "Italiano"
1757
+
1758
+ #~ msgid "Keywords are derived from"
1759
+ #~ msgstr "Las palabras claves derivan de"
1760
+
1761
+ #~ msgid "Latest updates from BetterWP.net!"
1762
+ #~ msgstr "¡Ultimas actualizaciones de BetterWP.net!"
1763
+
1764
+ #~ msgid "Loaded a custom module file: <strong>%s</strong>."
1765
+ #~ msgstr "Cargado un fichero de módulo personalizado: <strong>%s</strong>."
1766
+
1767
+ #~ msgid "Loaded a custom sub-module file: <strong>%s</strong>."
1768
+ #~ msgstr ""
1769
+ #~ "Cargado un fichero personalizado de sub-modulo: <strong>%s</strong>."
1770
+
1771
+ #~ msgid ""
1772
+ #~ "Mapped sub-module file: <strong>%s</strong> is not available in both "
1773
+ #~ "default and custom module directory. The plugin will now try loading the "
1774
+ #~ "requested sub-module instead."
1775
+ #~ msgstr ""
1776
+ #~ "Fichero Mapeado de sub-modulo: <strong>%s</strong> no está disponible en "
1777
+ #~ "el directorio default ni en el de modulos personalizados. El plugin va a "
1778
+ #~ "intentar cargar el sub-modulo requerido en su lugar."
1779
+
1780
+ #~ msgid ""
1781
+ #~ "Minor errors will be printed on screen. Also, when debug is on, no "
1782
+ #~ "caching is used, useful when you develop new modules."
1783
+ #~ msgstr ""
1784
+ #~ "Pequeños errores serán mostrados en pantalla. También, si la depuración "
1785
+ #~ "(debug) está activa, no se usará la caché, lo cual es útil cuando "
1786
+ #~ "desarrollas nuevos módulos."
1787
+
1788
+ #~ msgid "News Categories"
1789
+ #~ msgstr "Categorías de Noticias"
1790
+
1791
+ #~ msgid "News Sitemap"
1792
+ #~ msgstr "Nuevo Sitemap"
1793
+
1794
+ #~ msgid "No additional load is needed so enabling this is recommended."
1795
+ #~ msgstr ""
1796
+ #~ "\"Sin carga adicional\" es necesario, por lo que habilitarlo está "
1797
+ #~ "recomendado"
1798
+
1799
+ #~ msgid "Norwegian"
1800
+ #~ msgstr "Noruego"
1801
+
1802
+ #~ msgid ""
1803
+ #~ "Nothing here... yet! Try submitting your <a href=\"%s\">sitemapindex</a> "
1804
+ #~ "first!"
1805
+ #~ msgstr ""
1806
+ #~ "Nada por aquí... de momento! Primero intenta enviar tu <a href=\"%s"
1807
+ #~ "\">sitemapindex</a>!"
1808
+
1809
+ #~ msgid "Output no more than"
1810
+ #~ msgstr "Mostrar no más de"
1811
+
1812
+ #~ msgid "Ping limit for today to %s has been reached, sorry!"
1813
+ #~ msgstr "El limite de Ping para hoy de %s ha sido alcanzado, lo sentimos!"
1814
+
1815
+ #~ msgid "Polish"
1816
+ #~ msgstr "Polaco"
1817
+
1818
+ #~ msgid "Portuguese"
1819
+ #~ msgstr "Portugués"
1820
+
1821
+ #~ msgid "Selected SE below will be pinged when you publish new posts."
1822
+ #~ msgstr ""
1823
+ #~ "Lo MB seleccionados abajo serán informados (Ping) cuando publiques nuevas "
1824
+ #~ "entradas."
1825
+
1826
+ #~ msgid "Show build stats in sitemaps?"
1827
+ #~ msgstr "¿Ver las estadísticas de construcción en los sitemaps?"
1828
+
1829
+ #~ msgid "Simplified Chinese"
1830
+ #~ msgstr "Chino simplificado"
1831
+
1832
+ #~ msgid "Spanish"
1833
+ #~ msgstr "Español"
1834
+
1835
+ #~ msgid "Style your sitemaps with an XSLT stylesheet?"
1836
+ #~ msgstr "¿Dar estilo a tus sitemaps con una hoja de estilos XSLT?"
1837
+
1838
+ #~ msgid ""
1839
+ #~ "Sub-module file: <strong>%s</strong> is not available in both default and "
1840
+ #~ "custom module directory. The plugin will now try loading the parent "
1841
+ #~ "module instead."
1842
+ #~ msgstr ""
1843
+ #~ "Fichero Sub-módulo: <strong>%s</strong> no está disponible en el "
1844
+ #~ "directorio default ni en el de modulos personalizados. El plugin va a "
1845
+ #~ "intentar cargar el módulo padre en su lugar."
1846
+
1847
+ #~ msgid "Submit your sitemaps"
1848
+ #~ msgstr "Envía tus sitemaps"
1849
+
1850
+ #~ msgid ""
1851
+ #~ "This mode is meant for News Blogs that have posts assigned to more than "
1852
+ #~ "one categories. It is an advanced feature and should only be enabled if "
1853
+ #~ "you do have similar blogs."
1854
+ #~ msgstr ""
1855
+ #~ "Este modo es para los Blogs de Noticias que tiene posts asignados a más "
1856
+ #~ "de una categoría. Esta es una opción avanzada y solo debe ser activada si "
1857
+ #~ "tienes un blog similar."
1858
+
1859
+ #~ msgid "This module will"
1860
+ #~ msgstr "Este módulo hará"
1861
+
1862
+ #~ msgid ""
1863
+ #~ "This plugin helps you generate both Sitemap Index files as well as normal "
1864
+ #~ "Sitemap files. A Sitemap Index, as its name suggests, is one kind of "
1865
+ #~ "sitemaps that allows you to group multiple sitemap files inside it."
1866
+ #~ msgstr ""
1867
+ #~ "Este plugin te ayuda a generar tanto ficheros Index de Sitemap como "
1868
+ #~ "ficheros normales de Sitemap. Un Index de Sitemap es un tipo de sitemap "
1869
+ #~ "que te permite agrupar múltiples ficheros sitemap dentro de él."
1870
+
1871
+ #~ msgid "Use keywords in News Sitemap?"
1872
+ #~ msgstr "¿Utilizar palabras claves en los Sitemap de Noticias?"
1873
+
1874
+ #~ msgid "Vietnamese"
1875
+ #~ msgstr "Vietnamita "
1876
+
1877
+ #~ msgid "What is a Google News Sitemap?"
1878
+ #~ msgstr "¿Qué es un Sitemap de Noticias Google?"
1879
+
1880
+ #~ msgid "You do not have sufficient permissions to access this page."
1881
+ #~ msgstr "No tienes permisos suficientes para acceder a esta página."
1882
+
1883
+ #~ msgid "below selected categories in the news sitemap."
1884
+ #~ msgstr "categorías seleccionadas más abajo en el sitemap de noticias."
1885
+
1886
+ #~ msgid "e.g. post1.xml, post2.xml, etc. And each sitemap will contain"
1887
+ #~ msgstr "ej: post1.xml, post2.xml, etc. Y cada sitemap contendrá"
1888
+
1889
+ #~ msgid ""
1890
+ #~ "external pages' sitemap. This allows you to add links to pages that do "
1891
+ #~ "not belong to WordPress to the sitemap."
1892
+ #~ msgstr ""
1893
+ #~ "sitemap de páginas externas. Esto permite agregar enlaces ha páginas que "
1894
+ #~ "no pertenecen al sitemap de WordPress."
1895
+
1896
+ #~ msgid ""
1897
+ #~ "item(s) in one SQL query. This helps you avoid running too heavy queries."
1898
+ #~ msgstr ""
1899
+ #~ "item(s) en una consulta SQL. Esto te ayuda a evitar consultas demasiado "
1900
+ #~ "pesadas."
1901
+
1902
+ #~ msgid "item(s) in one sitemap. You can not go over 50,000."
1903
+ #~ msgstr "item(s) en un sitemap. No pueden ser más de 50.000."
1904
+
1905
+ #~ msgid "item(s). Again , you can not go over 50,000."
1906
+ #~ msgstr "item(s). De nuevo, no pueden ser más de 50.000."
1907
+
1908
+ #~ msgid "news categories"
1909
+ #~ msgstr "categorías de noticias"
1910
+
1911
+ #~ msgid ""
1912
+ #~ "only disable this when sitemaps appear in either blank page or plain text."
1913
+ #~ msgstr ""
1914
+ #~ "solo deshabiliat esto cuando los sitemaps aparecen en blanco o con texto "
1915
+ #~ "plano."
1916
+
1917
+ #~ msgid "read more"
1918
+ #~ msgstr "Leer más"
languages/bwp-google-xml-sitemaps-ms_MY.mo ADDED
Binary file
languages/bwp-google-xml-sitemaps-ms_MY.po ADDED
@@ -0,0 +1,1681 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: BWP Google XML Sitemaps(Malay Translation)\n"
4
+ "Report-Msgid-Bugs-To: contact@betterwp.net\n"
5
+ "POT-Creation-Date: 2016-01-14 21:05+0700\n"
6
+ "PO-Revision-Date: 2012-04-03 20:10+0700\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: <darkcry3r@gmail.com>\n"
9
+ "Language: \n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n"
14
+ "X-Poedit-Basepath: .\n"
15
+ "X-Poedit-SourceCharset: utf-8\n"
16
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
+ "X-Poedit-Language: Malay\n"
18
+ "X-Poedit-Country: MALAYSIA\n"
19
+ "X-Poedit-SearchPath-0: .\n"
20
+
21
+ #: vendor/kminh/bwp-framework/src/class-bwp-version.php:32
22
+ #, php-format
23
+ msgid ""
24
+ "%s requires WordPress <strong>%s</strong> or higher and PHP <strong>%s</"
25
+ "strong> or higher. The plugin will not function until you update your "
26
+ "software. Please deactivate this plugin."
27
+ msgstr ""
28
+ "%s memerlukan WordPress <strong>%s</strong> atau yang terbaharu dan PHP "
29
+ "<strong>%s</strong> atau yang terbaharu . Plugin ini tidak akan berfungsi "
30
+ "sehingga anda menaiktaraf perisian. Sila nyahaktifkan plugin ini."
31
+
32
+ #: src/templates/provider/admin/exclude-posts.html.php:18
33
+ #: src/templates/provider/admin/external-pages.html.php:13
34
+ #: src/templates/provider/admin/exclude-terms.html.php:18
35
+ #: src/class-bwp-gxs.php:1740
36
+ msgid "... loading"
37
+ msgstr ""
38
+
39
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:411
40
+ msgid "... or any amount!"
41
+ msgstr ""
42
+
43
+ #: src/class-bwp-gxs.php:3641
44
+ #, php-format
45
+ msgid "<em>%s.xml</em> does not have any item."
46
+ msgstr ""
47
+
48
+ #: src/class-bwp-gxs.php:3675
49
+ #, php-format
50
+ msgid ""
51
+ "<em>%s.xml</em> was successfully generated but could not be served properly "
52
+ "because some headers have already been sent (something was printed on line "
53
+ "<strong>%s</strong> in file <strong>%s</strong>)."
54
+ msgstr ""
55
+
56
+ #: src/class-bwp-gxs.php:3349
57
+ #, php-format
58
+ msgid ""
59
+ "<em>%s.xml</em> will be served using module file <em>%s</em> in the custom "
60
+ "module directory."
61
+ msgstr ""
62
+
63
+ #: src/class-bwp-gxs.php:3366
64
+ #, fuzzy, php-format
65
+ msgid "<em>%s.xml</em> will be served using module file <em>%s</em>."
66
+ msgstr "Berjaya menghasilkan <em>%s.xml</em> menggunakan modul <em>%s</em>."
67
+
68
+ #: src/class-bwp-gxs.php:2412
69
+ #, php-format
70
+ msgid "<strong>%d</strong> cached sitemaps have been flushed successfully!"
71
+ msgstr "<strong>%d</strong> pelan tapak yang di-cache-kan telah di buang!"
72
+
73
+ #: src/class-bwp-gxs.php:3373
74
+ #, fuzzy, php-format
75
+ msgid ""
76
+ "<strong>%s</strong> can not be served because of a missing module file: "
77
+ "<strong>%s</strong>."
78
+ msgstr ""
79
+ "Tiada kelas dinamakan <strong>%s</strong> di dalam fail modul <strong>%s</"
80
+ "strong>."
81
+
82
+ #: src/class-bwp-gxs.php:2528
83
+ msgid "<strong>BWP Google XML Sitemaps Error:</strong> "
84
+ msgstr "<strong>Google XML Pelan tapak BWP Ralat:</strong>"
85
+
86
+ #: src/class-bwp-gxs.php:3974
87
+ #, php-format
88
+ msgid "<strong>Error %s</strong> from <em>%s</em>."
89
+ msgstr ""
90
+
91
+ #: src/class-bwp-gxs.php:1679
92
+ msgid ""
93
+ "A Google News Sitemap is a file that allows you to control which content you "
94
+ "submit to Google News. By creating and submitting a Google News Sitemap, "
95
+ "you're able to help Google News discover and crawl your site's news articles "
96
+ "&mdash; http://support.google.com/"
97
+ msgstr ""
98
+
99
+ #: src/templates/provider/admin/external-page-form.html.php:17
100
+ msgid "Absolute URL to page"
101
+ msgstr ""
102
+
103
+ #: src/templates/provider/admin/external-pages.html.php:26
104
+ msgid "Actions"
105
+ msgstr ""
106
+
107
+ #: src/class-bwp-gxs.php:1720
108
+ #, php-format
109
+ msgid ""
110
+ "Add <code>post_google_news.xml</code> to the main <a href=\"%s\" target="
111
+ "\"_blank\">sitemapindex.xml</a>."
112
+ msgstr ""
113
+
114
+ #: src/class-bwp-gxs.php:1982
115
+ #, fuzzy
116
+ msgid "Add a sitemap index entry to blog's robots.txt"
117
+ msgstr "Tambah indeks pelan tapak kepada WordPress's robots.txt?"
118
+
119
+ #: src/class-bwp-gxs.php:1719
120
+ msgid ""
121
+ "Add an <code>&lt;image:image&gt;</code> entry to each sitemap item when "
122
+ "possible."
123
+ msgstr ""
124
+
125
+ #: src/class-bwp-gxs.php:1676
126
+ msgid "Add featured images to existing post-based sitemaps."
127
+ msgstr ""
128
+
129
+ #: src/templates/provider/admin/external-pages.html.php:7
130
+ msgid "Add new page"
131
+ msgstr ""
132
+
133
+ #: src/class-bwp-gxs.php:1394
134
+ #, php-format
135
+ msgid ""
136
+ "Add non-WordPress pages to the %s sitemap. You can also use %s to add "
137
+ "external pages programmatically."
138
+ msgstr ""
139
+
140
+ #: src/class-bwp-gxs.php:1983
141
+ #, fuzzy
142
+ msgid "Add sitemap index entries from all blogs to primary blog's robots.txt"
143
+ msgstr "Tambah indeks pelan tapak kepada WordPress's robots.txt?"
144
+
145
+ #: src/templates/provider/admin/external-page-modal.html.php:10
146
+ msgid "Add/Update an external page"
147
+ msgstr ""
148
+
149
+ #: src/class-bwp-gxs.php:347 src/class-bwp-gxs.php:998
150
+ #, fuzzy
151
+ msgid "Advanced Options"
152
+ msgstr "Tetapan modul"
153
+
154
+ #: src/class-bwp-gxs.php:2459
155
+ msgid "All logs have been cleared successfully!"
156
+ msgstr ""
157
+
158
+ #: src/class-bwp-gxs.php:2442
159
+ #: vendor/kminh/bwp-framework/src/class-bwp-option-page-v3.php:439
160
+ msgid "All options have been saved."
161
+ msgstr ""
162
+
163
+ #: src/class-bwp-gxs.php:1458
164
+ msgid "Also exclude posts that belong to excluded terms."
165
+ msgstr ""
166
+
167
+ #: src/class-bwp-gxs.php:1787
168
+ #, php-format
169
+ msgid ""
170
+ "Also, if you notice that some non-news contents are indexed too, read <a "
171
+ "href=\"%sfaq#google-news\" target=\"_blank\">this</a>."
172
+ msgstr ""
173
+
174
+ #: src/class-bwp-gxs.php:1799
175
+ msgid "Articles that are older than specified day(s) will NOT be considered."
176
+ msgstr ""
177
+
178
+ #: src/class-bwp-gxs.php:3108
179
+ #, fuzzy
180
+ msgid "Author archive"
181
+ msgstr "tarikh arkib pelan tapak."
182
+
183
+ #: src/class-bwp-gxs.php:1456
184
+ #, fuzzy
185
+ msgid "Author archives"
186
+ msgstr "tarikh arkib pelan tapak."
187
+
188
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:521
189
+ msgid "BWP Gems"
190
+ msgstr ""
191
+
192
+ #: src/class-bwp-gxs.php:948
193
+ #, fuzzy
194
+ msgid "BWP Google News XML Sitemap"
195
+ msgstr "Pelan Tapak Google XML BWP "
196
+
197
+ #: src/class-bwp-gxs.php:941
198
+ msgid "BWP Google XML Sitemaps"
199
+ msgstr "Pelan Tapak Google XML BWP "
200
+
201
+ #: src/class-bwp-gxs.php:955
202
+ #, fuzzy
203
+ msgid "BWP Google XML Sitemaps - Advanced Options"
204
+ msgstr "Penghasilan Pelan Tapak Google XML BWP"
205
+
206
+ #: src/class-bwp-gxs.php:2529
207
+ msgid "BWP Google XML Sitemaps Error"
208
+ msgstr "Google XML Pelan tapak BWP Ralat"
209
+
210
+ #: src/class-bwp-gxs.php:962
211
+ #, fuzzy
212
+ msgid "BWP Google XML Sitemaps Log"
213
+ msgstr "Pelan Tapak Google XML BWP "
214
+
215
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:531
216
+ msgid "BWP News"
217
+ msgstr ""
218
+
219
+ #: src/class-bwp-gxs.php:2126
220
+ #, fuzzy
221
+ msgid ""
222
+ "Below are messages logged when your sitemaps were generated, including <span "
223
+ "style=\"color: #999999;\">notices</span>, <span style=\"color: #FF0000;"
224
+ "\">errors</span> and <span style=\"color: #009900;\">success messages</span>."
225
+ msgstr ""
226
+ "<em>Maklumat lebih lanjut tentang bagaimana pelan tapak anda telah "
227
+ "dihasilkan termasuk <span style=\"color: #999999;\">notices</span>, <span "
228
+ "style=\"color: #FF0000;\">ralat</span> dan juga <span style=\"color: #009900;"
229
+ "\">mesej berjaya</span>.</em>"
230
+
231
+ #: src/class-bwp-gxs.php:989
232
+ #, fuzzy
233
+ msgid "Better WordPress Google News XML Sitemap"
234
+ msgstr "Pelan Tapak Google XML BWP "
235
+
236
+ #: src/class-bwp-gxs.php:972 src/class-bwp-gxs.php:981
237
+ #, fuzzy
238
+ msgid "Better WordPress Google XML Sitemaps"
239
+ msgstr "Pelan Tapak Google XML BWP "
240
+
241
+ #: src/class-bwp-gxs.php:997
242
+ #, fuzzy
243
+ msgid "Better WordPress Google XML Sitemaps Advanced Options"
244
+ msgstr "Penghasilan Pelan Tapak Google XML BWP"
245
+
246
+ #: src/class-bwp-gxs.php:1005
247
+ #, fuzzy
248
+ msgid "Better WordPress Google XML Sitemaps Log"
249
+ msgstr "Pelan Tapak Google XML BWP "
250
+
251
+ #: src/class-bwp-gxs.php:1465
252
+ msgid "Bing"
253
+ msgstr "Bing"
254
+
255
+ #: src/class-bwp-gxs.php:1919
256
+ msgid "Cache directory"
257
+ msgstr ""
258
+
259
+ #: src/class-bwp-gxs.php:2186
260
+ #, php-format
261
+ msgid ""
262
+ "Cache directory (<code>%s</code>) does not exist or is not writable. Please "
263
+ "try CHMODing it to either 755 or 777, or disable caching to hide this "
264
+ "warning (not recommended)."
265
+ msgstr ""
266
+
267
+ #: src/class-bwp-gxs.php:3305
268
+ #, php-format
269
+ msgid ""
270
+ "Cache directory <strong>%s</strong> is not writable, no cache file was "
271
+ "created."
272
+ msgstr ""
273
+
274
+ #: src/class-bwp-gxs.php:1918
275
+ msgid "Cache expiry time"
276
+ msgstr ""
277
+
278
+ #: src/class-bwp-gxs.php:1953
279
+ msgid ""
280
+ "Cache your sitemaps for better performance. If you are still configuring the "
281
+ "plugin it's best to disable caching or you might have to manually flush the "
282
+ "cache for any changes to show up."
283
+ msgstr ""
284
+
285
+ #: src/templates/provider/admin/external-page-form.html.php:29
286
+ msgid "Calculate using \"Last modified\""
287
+ msgstr ""
288
+
289
+ #: src/templates/provider/admin/external-pages.html.php:23
290
+ #: src/templates/provider/admin/external-page-form.html.php:27
291
+ #, fuzzy
292
+ msgid "Change frequency"
293
+ msgstr "Ubah frekuensi lalai"
294
+
295
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:439
296
+ msgid "Check out this cool plugin"
297
+ msgstr ""
298
+
299
+ #: src/class-bwp-gxs.php:1381
300
+ msgid "Choose appropriate sitemaps to generate."
301
+ msgstr ""
302
+
303
+ #: src/class-bwp-gxs.php:2359
304
+ msgid "Clear Message Log"
305
+ msgstr ""
306
+
307
+ #: src/templates/provider/admin/external-page-form.html.php:51
308
+ msgid "Click to open a calendar"
309
+ msgstr ""
310
+
311
+ #: src/templates/logger/admin/sitemap-log.html.php:39
312
+ msgid "Click to regenerate"
313
+ msgstr ""
314
+
315
+ #: src/templates/logger/admin/sitemap-log.html.php:34
316
+ msgid "Click to view"
317
+ msgstr ""
318
+
319
+ #: src/templates/provider/admin/external-page-modal.html.php:24
320
+ msgid "Close"
321
+ msgstr ""
322
+
323
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:387
324
+ msgid "Coffees"
325
+ msgstr ""
326
+
327
+ #: src/class-bwp-gxs.php:1911
328
+ #, fuzzy
329
+ msgid "Compress sitemaps"
330
+ msgstr "Pelan tapak anda"
331
+
332
+ #: src/handler/ajax/external-page.php:136
333
+ msgid "Could not add/update page, please try again."
334
+ msgstr ""
335
+
336
+ #: src/class-bwp-gxs.php:2425
337
+ #, php-format
338
+ msgid ""
339
+ "Could not flush the cache, cache directory is either not found or is not "
340
+ "writable. See <a href=\"%s\" target=\"_blank\">this FAQ entry</a> for a "
341
+ "possible solution."
342
+ msgstr ""
343
+
344
+ #: src/class-bwp-gxs.php:3318
345
+ #, fuzzy, php-format
346
+ msgid "Could not write sitemap file to cache directory <strong>%s</strong>"
347
+ msgstr ""
348
+ "Menggunakan lain-lain fail modul indeks pelan tapak: <strong>%s</strong>."
349
+
350
+ #: src/class-bwp-gxs.php:1346
351
+ msgid "Custom XSLT stylesheet URL"
352
+ msgstr "URL gaya lembar XSLT yang diubah"
353
+
354
+ #: src/class-bwp-gxs.php:1922
355
+ #, fuzzy
356
+ msgid "Custom module directory"
357
+ msgstr "Direktori pengganti modul"
358
+
359
+ #: src/class-bwp-gxs.php:1416
360
+ msgid ""
361
+ "Customize the look and feel of your sitemaps. Note that no stylesheet will "
362
+ "be used for the Google News sitemap."
363
+ msgstr ""
364
+
365
+ #: src/class-bwp-gxs.php:1921
366
+ msgid "Database query limit"
367
+ msgstr ""
368
+
369
+ #: src/class-bwp-gxs.php:3104
370
+ #, fuzzy
371
+ msgid "Date archive"
372
+ msgstr "tarikh arkib pelan tapak."
373
+
374
+ #: src/class-bwp-gxs.php:1455
375
+ #, fuzzy
376
+ msgid "Date archives"
377
+ msgstr "tarikh arkib pelan tapak."
378
+
379
+ #: src/class-bwp-gxs.php:1923
380
+ #, fuzzy
381
+ msgid "Debugging"
382
+ msgstr "(Debug dibuka)"
383
+
384
+ #: src/class-bwp-gxs.php:1460
385
+ #, fuzzy
386
+ msgid ""
387
+ "Default XSLT stylesheets will be used. Set your custom stylesheets below or "
388
+ "filter the <code>bwp_gxs_xslt</code> hook."
389
+ msgstr ""
390
+ "Ini akan menambah gaya lembar lalai yang dibekalkan dengan plugin ini. Anda "
391
+ "boleh menetapkan gaya lembar yang diubahsuai di bawah atau dengan menapis "
392
+ "<code>bwp_gxs_xslt</code>."
393
+
394
+ #: src/class-bwp-gxs.php:1336
395
+ msgid "Default change frequency"
396
+ msgstr "Ubah frekuensi lalai"
397
+
398
+ #: src/class-bwp-gxs.php:1337
399
+ msgid "Default priority"
400
+ msgstr "Keutamaan lalai"
401
+
402
+ #: src/class-bwp-gxs.php:1335
403
+ msgid "Default values"
404
+ msgstr ""
405
+
406
+ #: src/class-bwp-gxs.php:1412
407
+ msgid "Default values are only used when valid ones can not be calculated."
408
+ msgstr ""
409
+
410
+ #: src/class-bwp-gxs.php:1978
411
+ msgid ""
412
+ "Disable this to use the local timezone setting in <em>Settings >> General</"
413
+ "em>."
414
+ msgstr ""
415
+
416
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:1530
417
+ msgid "Dismiss this notice."
418
+ msgstr ""
419
+
420
+ #: src/class-bwp-gxs.php:1818
421
+ msgid ""
422
+ "Due to performance reason, it is advised to NOT use a tag-like taxonomy "
423
+ "(such as <em>Post Tag</em>) as the news taxonomy."
424
+ msgstr ""
425
+
426
+ #: src/templates/provider/admin/external-page-form.html.php:19
427
+ msgid ""
428
+ "Each page must have a unique URL, so if you provide an existing URL, the "
429
+ "page with that URL will be updated with new data provided here."
430
+ msgstr ""
431
+
432
+ #: src/class-bwp-gxs.php:561
433
+ msgid "Edit this page"
434
+ msgstr ""
435
+
436
+ #: src/class-bwp-gxs.php:1917
437
+ #, fuzzy
438
+ msgid "Enable auto cache re-generation"
439
+ msgstr "Benarkan auto cache di-generasi?"
440
+
441
+ #: src/class-bwp-gxs.php:1924
442
+ msgid "Enable build stats"
443
+ msgstr ""
444
+
445
+ #: src/class-bwp-gxs.php:1916
446
+ #, fuzzy
447
+ msgid "Enable caching"
448
+ msgstr "Benarkan caching?"
449
+
450
+ #: src/class-bwp-gxs.php:1347
451
+ #, fuzzy
452
+ msgid "Enable credit"
453
+ msgstr "Paparkan penghargaan?"
454
+
455
+ #: src/class-bwp-gxs.php:1926
456
+ #, fuzzy
457
+ msgid "Enable debugging mode"
458
+ msgstr "Benarkan debugging?"
459
+
460
+ #: src/class-bwp-gxs.php:1640 src/class-bwp-gxs.php:1643
461
+ #, fuzzy
462
+ msgid "Enable extension"
463
+ msgstr "Benarkan debugging?"
464
+
465
+ #: src/class-bwp-gxs.php:1927
466
+ #, fuzzy
467
+ msgid "Enable extra debugging mode"
468
+ msgstr "Benarkan debugging?"
469
+
470
+ #: src/class-bwp-gxs.php:1324 src/class-bwp-gxs.php:1342
471
+ msgid "Enable following post types"
472
+ msgstr ""
473
+
474
+ #: src/class-bwp-gxs.php:1323
475
+ #, fuzzy
476
+ msgid "Enable following sitemaps"
477
+ msgstr "Benarkan log?"
478
+
479
+ #: src/class-bwp-gxs.php:1325
480
+ msgid "Enable following taxonomies"
481
+ msgstr ""
482
+
483
+ #: src/class-bwp-gxs.php:1641
484
+ msgid "Enable for following post types"
485
+ msgstr ""
486
+
487
+ #: src/class-bwp-gxs.php:1653
488
+ msgid "Enable keywords support"
489
+ msgstr ""
490
+
491
+ #: src/class-bwp-gxs.php:1925
492
+ #, fuzzy
493
+ msgid "Enable message log"
494
+ msgstr "Benarkan log?"
495
+
496
+ #: src/class-bwp-gxs.php:1652
497
+ msgid "Enable multi-term support"
498
+ msgstr ""
499
+
500
+ #: src/class-bwp-gxs.php:1914
501
+ msgid "Enable multisite robots.txt support"
502
+ msgstr ""
503
+
504
+ #: src/class-bwp-gxs.php:1340 src/class-bwp-gxs.php:1644
505
+ #, fuzzy
506
+ msgid "Enable pinging"
507
+ msgstr "Benarkan log?"
508
+
509
+ #: src/class-bwp-gxs.php:1913
510
+ msgid "Enable robots.txt support"
511
+ msgstr ""
512
+
513
+ #: src/class-bwp-gxs.php:1723
514
+ msgid "Enable this if you have posts assigned to more than one terms."
515
+ msgstr ""
516
+
517
+ #: src/class-bwp-gxs.php:3647
518
+ msgid "Enable/disable sitemaps via <em>BWP Sitemaps >> XML Sitemaps</em>."
519
+ msgstr ""
520
+
521
+ #: src/class-bwp-gxs.php:1700
522
+ msgid "Exclude"
523
+ msgstr ""
524
+
525
+ #: src/class-bwp-gxs.php:1385
526
+ #, php-format
527
+ msgid ""
528
+ "Exclude individual items for each sitemap. You can also use <a href="
529
+ "\"%s#exclude-items\" target=\"_blank\">filters</a> to exclude items "
530
+ "programmatically."
531
+ msgstr ""
532
+
533
+ #: src/class-bwp-gxs.php:1326
534
+ msgid "Exclude items"
535
+ msgstr ""
536
+
537
+ #: src/class-bwp-gxs.php:1327
538
+ msgid "Exclude posts"
539
+ msgstr ""
540
+
541
+ #: src/class-bwp-gxs.php:1329
542
+ msgid "Exclude posts by terms"
543
+ msgstr ""
544
+
545
+ #: src/templates/provider/admin/exclude-posts.html.php:12
546
+ #: src/templates/provider/admin/exclude-terms.html.php:12
547
+ msgid "Exclude selected items"
548
+ msgstr ""
549
+
550
+ #: src/class-bwp-gxs.php:1328
551
+ msgid "Exclude terms"
552
+ msgstr ""
553
+
554
+ #: src/class-bwp-gxs.php:1543
555
+ #, fuzzy
556
+ msgid ""
557
+ "Expect an absolute URL, e.g. <code>http://example.com/my-stylesheet.xsl</"
558
+ "code>. You must also have a stylesheet for the sitemap index that can be "
559
+ "accessed through the above URL, e.g. <code>my-stylesheet.xsl</code> and "
560
+ "<code>my-stylesheetindex.xsl</code>. Leave blank to use provided stylesheets."
561
+ msgstr ""
562
+ "jangkaan untuk menjadi URL tetap, contohnya <code>http://example.com/my-"
563
+ "stylesheet.xsl</code>. Anda juga harus mempunyai gaya lembar untuk indeks "
564
+ "pelan tapak yang mana boleh di akses melalui URL di atas, contohnya <code>my-"
565
+ "stylesheet.xsl</code> dan <code>my-stylesheetindex.xsl</code>). Sila "
566
+ "tinggalkan kosong sekiranya anda tidak berhasrat untuk menggunakannya."
567
+
568
+ #: src/class-bwp-gxs.php:2045
569
+ #, fuzzy
570
+ msgid ""
571
+ "Expect an absolute path to a writable directory (i.e. CHMOD to 755 or 777). "
572
+ msgstr "Cache direktori harus boleh ditulis (i.e. CHMOD to 755 or 777)."
573
+
574
+ #: src/class-bwp-gxs.php:2056
575
+ msgid ""
576
+ "Expect an absolute path to the directory where you put your custom modules "
577
+ "(e.g. <code>/home/mysite/public_html/gxs-modules/</code>). "
578
+ msgstr ""
579
+
580
+ #: src/class-bwp-gxs.php:1971
581
+ #, php-format
582
+ msgid ""
583
+ "Extend this plugin using customizable modules. More info <a href=\"%s#module-"
584
+ "api\">here</a>."
585
+ msgstr ""
586
+
587
+ #: src/class-bwp-gxs.php:338 src/class-bwp-gxs.php:990
588
+ msgid "Extensions"
589
+ msgstr ""
590
+
591
+ #: src/class-bwp-gxs.php:1457
592
+ msgid "External (non-WordPress) pages."
593
+ msgstr ""
594
+
595
+ #: src/class-bwp-gxs.php:3094
596
+ msgid "External page"
597
+ msgstr ""
598
+
599
+ #: src/handler/ajax/external-page.php:131
600
+ msgid "External page has been successfully added/updated."
601
+ msgstr ""
602
+
603
+ #: src/class-bwp-gxs.php:1330 src/class-bwp-gxs.php:1397
604
+ msgid "External pages"
605
+ msgstr ""
606
+
607
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:371
608
+ msgid "FAQ"
609
+ msgstr ""
610
+
611
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:409
612
+ msgid "Five cups! $25.00"
613
+ msgstr ""
614
+
615
+ #: src/class-bwp-gxs.php:2348
616
+ #, fuzzy
617
+ msgid "Flush Cache"
618
+ msgstr "Buang cache"
619
+
620
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:548
621
+ msgid "Follow"
622
+ msgstr ""
623
+
624
+ #: src/class-bwp-gxs.php:1519
625
+ msgid ""
626
+ "For a multi-site installation of WordPress, this sitemap will list all "
627
+ "appropriate blogs' addresses within your network, not just the main blog's."
628
+ msgstr ""
629
+
630
+ #: src/class-bwp-gxs.php:1238
631
+ #, php-format
632
+ msgid ""
633
+ "For more details, see <a target=\"_blank\" href=\"%1$s\">this article</a>."
634
+ msgstr ""
635
+
636
+ #: src/class-bwp-gxs.php:1909
637
+ msgid "Formatting"
638
+ msgstr ""
639
+
640
+ #: src/class-bwp-gxs.php:1321
641
+ #, fuzzy
642
+ msgid "Generated Sitemaps"
643
+ msgstr "Apa itu Pelan tapak?"
644
+
645
+ #: src/templates/provider/admin/news-contents.html.php:11
646
+ msgid "Genres"
647
+ msgstr ""
648
+
649
+ #: src/class-bwp-gxs.php:1332
650
+ msgid "Global limit"
651
+ msgstr ""
652
+
653
+ #: src/class-bwp-gxs.php:1464
654
+ msgid "Google"
655
+ msgstr "Google"
656
+
657
+ #: src/class-bwp-gxs.php:1639
658
+ #, fuzzy
659
+ msgid "Google Image Sitemap"
660
+ msgstr "Pelan Tapak Google XML BWP "
661
+
662
+ #: src/class-bwp-gxs.php:1642
663
+ #, fuzzy
664
+ msgid "Google News Sitemap"
665
+ msgstr "Pelan Tapak Google XML BWP "
666
+
667
+ #: src/class-bwp-gxs.php:3082
668
+ msgid "Google News posts"
669
+ msgstr ""
670
+
671
+ #: src/class-bwp-gxs.php:2332
672
+ #, php-format
673
+ msgid ""
674
+ "Google News sitemap could not be generated, please check <a href=\"%s"
675
+ "\">Sitemap Log</a> for possible errors."
676
+ msgstr ""
677
+
678
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:374
679
+ msgid "Got a problem with this plugin? Please say it out loud!"
680
+ msgstr ""
681
+
682
+ #: src/templates/provider/admin/exclude-posts.html.php:27
683
+ #: src/templates/provider/admin/exclude-terms.html.php:27
684
+ msgid "ID"
685
+ msgstr ""
686
+
687
+ #: src/class-bwp-gxs.php:1812
688
+ msgid ""
689
+ "If you enable the \"Google Image Extension\" for selected post type, "
690
+ "featured image will also be added automatically to the news sitemap."
691
+ msgstr ""
692
+
693
+ #: src/class-bwp-gxs.php:2038
694
+ #, php-format
695
+ msgid ""
696
+ "If you have for example 50 blogs, 50 sitemap index entries will be added to "
697
+ "your primary blog's <a href=\"%s\" target=\"_blank\">robots.txt</a>."
698
+ msgstr ""
699
+
700
+ #: src/class-bwp-gxs.php:2027
701
+ #, fuzzy, php-format
702
+ msgid ""
703
+ "If you're on a Multi-site installation with <strong>Sub-domain</strong> "
704
+ "enabled, each blog will have its own robots.txt. Blogs in <strong>sub-"
705
+ "directory</strong> will not, however. Please read the <a href=\"%s#robots.txt"
706
+ "\" target=\"_blank\">documentation</a> for more info."
707
+ msgstr ""
708
+ "Jika anda di dalam Multi-tapak pemasangan dengan Sub-domain digunakan, "
709
+ "setiap tapak akan ada setiap robot.txt sendiri, manakala tapak di dalam sub- "
710
+ "direktori adalah sebaliknya. Sila rujuk <a href=\"%s#toc-robots\" target="
711
+ "\"_blank\">dokumentasi</a> untuk maklumat terperinci."
712
+
713
+ #: src/templates/provider/admin/external-page-form.html.php:55
714
+ #: src/class-bwp-gxs.php:1770
715
+ msgid "Important"
716
+ msgstr ""
717
+
718
+ #: src/class-bwp-gxs.php:1699
719
+ msgid "Include"
720
+ msgstr ""
721
+
722
+ #: src/handler/ajax/external-page.php:91
723
+ msgid "Invalid frequency or priority."
724
+ msgstr ""
725
+
726
+ #: src/class-bwp-gxs.php:1187
727
+ msgid "It appears that no sitemap has been generated yet"
728
+ msgstr ""
729
+
730
+ #: src/class-bwp-gxs.php:1331
731
+ msgid "Item limits"
732
+ msgstr ""
733
+
734
+ #: src/class-bwp-gxs.php:1654
735
+ msgid "Keyword source"
736
+ msgstr ""
737
+
738
+ #: src/templates/logger/admin/sitemap-log.html.php:11
739
+ msgid "Last generated on"
740
+ msgstr ""
741
+
742
+ #: src/templates/provider/admin/external-pages.html.php:25
743
+ msgid "Last modified"
744
+ msgstr ""
745
+
746
+ #: src/templates/provider/admin/external-page-form.html.php:46
747
+ msgid "Last modified (time is optional)"
748
+ msgstr ""
749
+
750
+ #: src/class-bwp-gxs.php:1766
751
+ #, fuzzy, php-format
752
+ msgid "Learn more about <a href=\"%s\" target=\"_blank\">Image sitemaps</a>."
753
+ msgstr "Yahoo &mdash; <a href=\"%s\" target=\"_blank\">penting</a>"
754
+
755
+ #: src/class-bwp-gxs.php:2049
756
+ #, php-format
757
+ msgid "Leave empty to use <code>%s</code>."
758
+ msgstr ""
759
+
760
+ #: src/class-bwp-gxs.php:1405
761
+ msgid "Limit the number of items to output in one sitemap. "
762
+ msgstr ""
763
+
764
+ #: src/class-bwp-gxs.php:1985
765
+ #, php-format
766
+ msgid ""
767
+ "Log useful messages when sitemaps are generated. The log can be viewed <a "
768
+ "href=\"%s\">here</a>."
769
+ msgstr ""
770
+
771
+ #: src/class-bwp-gxs.php:2132
772
+ msgid ""
773
+ "Logging is not currently enabled. You can enable this feature by checking "
774
+ "\"Enable logging\" in <strong>XML Sitemaps >> Sitemap log & debug</strong>."
775
+ msgstr ""
776
+
777
+ #: src/class-bwp-gxs.php:1344
778
+ msgid "Look and Feel"
779
+ msgstr ""
780
+
781
+ #: src/templates/logger/admin/sitemap-log.html.php:23
782
+ #: src/templates/logger/admin/message-log.html.php:11
783
+ #, fuzzy
784
+ msgid "M d, Y h:i:s A"
785
+ msgstr "M j, Y : H:i:s"
786
+
787
+ #: src/class-bwp-gxs.php:1345
788
+ msgid "Make sitemaps look pretty"
789
+ msgstr ""
790
+
791
+ #: src/class-bwp-gxs.php:1475
792
+ msgid "Maximum is <strong>50,000</strong>. Set to 0 to use the Global limit."
793
+ msgstr ""
794
+
795
+ #: src/class-bwp-gxs.php:1470
796
+ msgid ""
797
+ "Maximum is <strong>50,000</strong>. This setting is applied to all sitemaps."
798
+ msgstr ""
799
+
800
+ #: src/class-bwp-gxs.php:2002
801
+ msgid ""
802
+ "Maximum number of items to fetch in each query to database. This helps when "
803
+ "a sitemap has thousands of items and host is low on memory."
804
+ msgstr ""
805
+
806
+ #: src/class-bwp-gxs.php:2118
807
+ msgid "Message Log"
808
+ msgstr ""
809
+
810
+ #: src/class-bwp-gxs.php:1338
811
+ msgid "Minimum priority"
812
+ msgstr "Keutamaan minimum"
813
+
814
+ #: src/templates/provider/admin/news-contents.html.php:9
815
+ #: src/templates/provider/admin/exclude-terms.html.php:28
816
+ #: src/templates/logger/admin/sitemap-log.html.php:10
817
+ msgid "Name"
818
+ msgstr ""
819
+
820
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:503
821
+ msgid "Need a highly customizable theme?"
822
+ msgstr ""
823
+
824
+ #: src/class-bwp-gxs.php:1648
825
+ #, fuzzy
826
+ msgid "News age"
827
+ msgstr "Apa itu Pelan tapak?"
828
+
829
+ #: src/class-bwp-gxs.php:1647
830
+ msgid "News language"
831
+ msgstr ""
832
+
833
+ #: src/class-bwp-gxs.php:1646
834
+ msgid "News name"
835
+ msgstr ""
836
+
837
+ #: src/class-bwp-gxs.php:1649
838
+ msgid "News post type"
839
+ msgstr ""
840
+
841
+ #: src/class-bwp-gxs.php:1650
842
+ msgid "News taxonomy"
843
+ msgstr ""
844
+
845
+ #: src/class-bwp-gxs.php:1651
846
+ msgid "News terms and genres"
847
+ msgstr ""
848
+
849
+ #: src/templates/logger/admin/message-log.html.php:23
850
+ msgid "No log yet!"
851
+ msgstr "Tiada log lagi!"
852
+
853
+ #: src/class-bwp-gxs.php:1745
854
+ msgid "Note:"
855
+ msgstr ""
856
+
857
+ #: src/class-bwp-gxs.php:2458
858
+ msgid "Notice"
859
+ msgstr "Notis"
860
+
861
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:410
862
+ msgid "One LL-cup!!! $50.00"
863
+ msgstr ""
864
+
865
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:407
866
+ msgid "One cup $5.00"
867
+ msgstr ""
868
+
869
+ #: src/class-bwp-gxs.php:2060
870
+ msgid ""
871
+ "Override a built-in module by having a module with the same filename in "
872
+ "specified directory."
873
+ msgstr ""
874
+
875
+ #: src/class-bwp-gxs.php:3096
876
+ msgid "Page"
877
+ msgstr ""
878
+
879
+ #: src/class-bwp-gxs.php:1343
880
+ msgid "Ping limit"
881
+ msgstr ""
882
+
883
+ #: src/class-bwp-gxs.php:3985
884
+ #, php-format
885
+ msgid ""
886
+ "Ping limit for today to <em>%s</em> has been reached, consider increasing "
887
+ "the ping limit via <em>XML Sitemaps >> Ping search engines >> \"Ping limit "
888
+ "for each search engine\"</em>"
889
+ msgstr ""
890
+
891
+ #: src/class-bwp-gxs.php:1339
892
+ #, fuzzy
893
+ msgid "Ping search engines"
894
+ msgstr "Penghantaran ke enjin carian"
895
+
896
+ #: src/class-bwp-gxs.php:1722
897
+ msgid "Ping search engines when a news article is published."
898
+ msgstr ""
899
+
900
+ #: src/class-bwp-gxs.php:1463
901
+ #, fuzzy
902
+ msgid "Ping search engines when you publish new posts."
903
+ msgstr ""
904
+ "SE yang dipilih dibawah akan dihantar apabila anda menerbitkan pos baharu."
905
+
906
+ #: src/class-bwp-gxs.php:3964
907
+ #, fuzzy, php-format
908
+ msgid "Pinged <em>%s</em> with <em>%s</em> successfully!"
909
+ msgstr "Penghantaran berjaya %s !"
910
+
911
+ #: src/class-bwp-gxs.php:3658
912
+ msgid ""
913
+ "Please make sure that you have at least one sitemap enabled in <em>BWP "
914
+ "Sitemaps >> XML Sitemaps >> Sitemaps to generate</em>."
915
+ msgstr ""
916
+
917
+ #: src/class-bwp-gxs.php:1759
918
+ #, php-format
919
+ msgid ""
920
+ "Please make sure you have enabled the <a href=\"%s\" target=\"_blank\">Post "
921
+ "Thumbnails feature</a> in your theme before enabling this extension."
922
+ msgstr ""
923
+
924
+ #: src/handler/ajax/external-page.php:107
925
+ msgid "Please provide a valid last modified date time."
926
+ msgstr ""
927
+
928
+ #: src/handler/ajax/external-page.php:63
929
+ msgid "Please provide all required fields."
930
+ msgstr ""
931
+
932
+ #: src/handler/ajax/external-page.php:78
933
+ #, php-format
934
+ msgid "Please provide an absolute URL under your domain, for example: %s."
935
+ msgstr ""
936
+
937
+ #: src/class-bwp-gxs.php:2484 src/class-bwp-gxs.php:2498
938
+ msgid "Please select at least one item to exclude."
939
+ msgstr ""
940
+
941
+ #: src/templates/provider/admin/external-page-form.html.php:56
942
+ #, php-format
943
+ msgid ""
944
+ "Please specify \"Last modified\" in your <a href=\"%s\" target=\"_blank"
945
+ "\">local timezone</a>."
946
+ msgstr ""
947
+
948
+ #: src/class-bwp-gxs.php:1780
949
+ #, php-format
950
+ msgid ""
951
+ "Please take a look at <a href=\"%s\" target=\"_blank\">Google News's "
952
+ "guidelines</a> before enabling this feature."
953
+ msgstr ""
954
+
955
+ #: src/class-bwp-gxs.php:1804
956
+ #, php-format
957
+ msgid ""
958
+ "Please take a look at <a href=\"%s\" target=\"_blank\">Google News's "
959
+ "guidelines</a> for more info."
960
+ msgstr ""
961
+
962
+ #: vendor/kminh/bwp-framework/src/class-bwp-option-page-v3.php:93
963
+ msgid "Plugin Configurations"
964
+ msgstr "Tetapan Plugin"
965
+
966
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:375
967
+ msgid "Plugin Support"
968
+ msgstr ""
969
+
970
+ #: src/class-bwp-gxs.php:3087
971
+ msgid "Post"
972
+ msgstr ""
973
+
974
+ #: src/class-bwp-gxs.php:1984
975
+ #, fuzzy
976
+ msgid ""
977
+ "Print useful information such as build time, memory usage, SQL queries, etc."
978
+ msgstr ""
979
+ "beritahu anda maklumat seperti masa bina, pengunaan memori, maklumat SQL dan "
980
+ "lain-lain."
981
+
982
+ #: src/templates/provider/admin/external-pages.html.php:24
983
+ #: src/templates/provider/admin/external-page-form.html.php:37
984
+ msgid "Priority"
985
+ msgstr ""
986
+
987
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:378
988
+ msgid "Rate this plugin 5 stars if you like it, thank you!"
989
+ msgstr ""
990
+
991
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:379
992
+ msgid "Rate this plugin 5 stars!"
993
+ msgstr ""
994
+
995
+ #: src/class-bwp-gxs.php:1981
996
+ #, fuzzy
997
+ msgid ""
998
+ "Re-generate sitemap cache when expired. If you disable this, remember to "
999
+ "manually flush the cache once in a while."
1000
+ msgstr ""
1001
+ "apabila cache pelan tapak luput, plugin ini akan cuba untuk menghasilkan "
1002
+ "cache lagi. Jika anda tidak membenarkan ini, waspada untuk membuang cache "
1003
+ "secara manual sekali sekala."
1004
+
1005
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:370
1006
+ msgid "Read this first before asking any question!"
1007
+ msgstr ""
1008
+
1009
+ #: src/templates/provider/admin/exclude-posts.html.php:29
1010
+ #: src/templates/provider/admin/exclude-terms.html.php:29
1011
+ msgid "Remove"
1012
+ msgstr ""
1013
+
1014
+ #: src/class-bwp-gxs.php:557
1015
+ msgid "Remove from exclusion"
1016
+ msgstr ""
1017
+
1018
+ #: src/class-bwp-gxs.php:562
1019
+ msgid "Remove this page"
1020
+ msgstr ""
1021
+
1022
+ #: src/class-bwp-gxs.php:3489
1023
+ #, fuzzy, php-format
1024
+ msgid "Requested sitemap (<em>%s.xml</em>) was not found or not enabled."
1025
+ msgstr "Modul yang diminta (<em>%s</em>) tidak dijumpai atau tidak dibenarkan."
1026
+
1027
+ #: src/templates/provider/admin/external-page-modal.html.php:27
1028
+ msgid "Reset"
1029
+ msgstr ""
1030
+
1031
+ #: src/class-bwp-gxs.php:1912
1032
+ msgid "Robots.txt"
1033
+ msgstr ""
1034
+
1035
+ #: src/templates/provider/admin/external-page-modal.html.php:33
1036
+ #: vendor/kminh/bwp-framework/src/class-bwp-option-page-v3.php:306
1037
+ msgid "Save Changes"
1038
+ msgstr "Simpan Perubahan"
1039
+
1040
+ #: src/class-bwp-gxs.php:2346
1041
+ #, fuzzy
1042
+ msgid "Save Changes and Flush Cache"
1043
+ msgstr "Simpan Perubahan"
1044
+
1045
+ #: src/class-bwp-gxs.php:1341
1046
+ msgid "Search engines to ping"
1047
+ msgstr ""
1048
+
1049
+ #: src/templates/provider/admin/exclude-posts.html.php:5
1050
+ msgid "Search for posts to exclude"
1051
+ msgstr ""
1052
+
1053
+ #: src/templates/provider/admin/exclude-terms.html.php:5
1054
+ msgid "Search for terms to exclude"
1055
+ msgstr ""
1056
+
1057
+ #: src/templates/provider/admin/news-contents.html.php:8
1058
+ msgid "Select"
1059
+ msgstr ""
1060
+
1061
+ #: src/class-bwp-gxs.php:1248
1062
+ msgid "Select a post type"
1063
+ msgstr ""
1064
+
1065
+ #: src/class-bwp-gxs.php:1262
1066
+ msgid "Select a taxonomy"
1067
+ msgstr ""
1068
+
1069
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:386
1070
+ msgid "Send"
1071
+ msgstr ""
1072
+
1073
+ #: src/class-bwp-gxs.php:1794
1074
+ msgid ""
1075
+ "Set a different name for your news sitemap. By default, your <em>Site Title</"
1076
+ "em> is used."
1077
+ msgstr ""
1078
+
1079
+ #: src/class-bwp-gxs.php:1801
1080
+ msgid "Set to <code>0</code> to disable (not recommended)."
1081
+ msgstr ""
1082
+
1083
+ #: src/class-bwp-gxs.php:1406
1084
+ #, php-format
1085
+ msgid ""
1086
+ "Setting too high limits might lead to white page error due to timeout or "
1087
+ "memory issue. Refer to this plugin's <a target=\"_blank\" href=\"%s\">FAQ "
1088
+ "section</a> for more info."
1089
+ msgstr ""
1090
+
1091
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:1315
1092
+ msgid "Settings"
1093
+ msgstr "Tetapan"
1094
+
1095
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:431
1096
+ msgid "Share the love for this plugin!"
1097
+ msgstr ""
1098
+
1099
+ #: src/templates/provider/admin/exclude-posts.html.php:17
1100
+ #: src/templates/provider/admin/exclude-terms.html.php:17
1101
+ msgid "Show/Hide excluded items"
1102
+ msgstr ""
1103
+
1104
+ #: src/templates/provider/admin/external-pages.html.php:12
1105
+ msgid "Show/Hide external pages"
1106
+ msgstr ""
1107
+
1108
+ #: src/class-bwp-gxs.php:1737
1109
+ msgid "Show/Hide selected terms"
1110
+ msgstr ""
1111
+
1112
+ #: src/class-bwp-gxs.php:1462
1113
+ msgid "Site Address"
1114
+ msgstr ""
1115
+
1116
+ #: src/class-bwp-gxs.php:1915
1117
+ #, fuzzy
1118
+ msgid "Sitemap Cache"
1119
+ msgstr "Statistik Pelan Tapak"
1120
+
1121
+ #: src/class-bwp-gxs.php:1645
1122
+ #, fuzzy
1123
+ msgid "Sitemap Contents"
1124
+ msgstr "Penghasilan Pelan Tapak"
1125
+
1126
+ #: src/class-bwp-gxs.php:350 src/class-bwp-gxs.php:1006
1127
+ #, fuzzy
1128
+ msgid "Sitemap Log"
1129
+ msgstr "Log Penghasilan Pelan Tapak"
1130
+
1131
+ #: src/class-bwp-gxs.php:1920
1132
+ #, fuzzy
1133
+ msgid "Sitemap modules"
1134
+ msgstr "Penghasilan Pelan Tapak"
1135
+
1136
+ #: src/class-bwp-gxs.php:1461
1137
+ msgid ""
1138
+ "Sitemaps like <code>post.xml</code> are split into <code>post_part1.xml</"
1139
+ "code>, <code>post_part2.xml</code>, etc. when limit reached."
1140
+ msgstr ""
1141
+
1142
+ #: src/class-bwp-gxs.php:1322
1143
+ #, fuzzy
1144
+ msgid "Sitemaps to generate"
1145
+ msgstr "Penghasilan Pelan Tapak"
1146
+
1147
+ #: src/class-bwp-gxs.php:1459
1148
+ #, fuzzy
1149
+ msgid "Some copyrighted info is added to your sitemaps."
1150
+ msgstr ""
1151
+ "sedikit maklumat hakcipta juga akan ditambah pada pelan tapak anda. Terima "
1152
+ "kasih! "
1153
+
1154
+ #: src/class-bwp-gxs.php:1333
1155
+ msgid "Split <strong>post-based</strong> sitemaps"
1156
+ msgstr ""
1157
+
1158
+ #: src/class-bwp-gxs.php:1334
1159
+ msgid "Split limit"
1160
+ msgstr ""
1161
+
1162
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:541
1163
+ msgid "Subscribe"
1164
+ msgstr ""
1165
+
1166
+ #: src/class-bwp-gxs.php:2472
1167
+ #, php-format
1168
+ msgid "Successfully excluded <strong>%d</strong> items."
1169
+ msgstr ""
1170
+
1171
+ #: src/class-bwp-gxs.php:3627
1172
+ #, fuzzy, php-format
1173
+ msgid ""
1174
+ "Successfully generated <em>%s.xml</em> using custom module file <em>%s</em>."
1175
+ msgstr "Berjaya menghasilkan <em>%s.xml</em> menggunakan modul <em>%s</em>."
1176
+
1177
+ #: src/class-bwp-gxs.php:3628
1178
+ #, fuzzy, php-format
1179
+ msgid "Successfully generated <em>%s.xml</em> using module file <em>%s</em>."
1180
+ msgstr "Berjaya menghasilkan <em>%s.xml</em> menggunakan modul <em>%s</em>."
1181
+
1182
+ #: src/class-bwp-gxs.php:3271
1183
+ #, php-format
1184
+ msgid "Successfully served a cached version of <em>%s.xml</em>."
1185
+ msgstr "Berjaya melayan versi cache untuk <em>%s.xml</em>."
1186
+
1187
+ #: src/class-bwp-gxs.php:1454
1188
+ #, fuzzy
1189
+ msgid "Taxonomy (including custom taxonomies)"
1190
+ msgstr "menamakan arkib pelan tapak, termasuk yang diubahsuai."
1191
+
1192
+ #: src/class-bwp-gxs.php:2416
1193
+ msgid "There are no cached sitemaps to flush."
1194
+ msgstr ""
1195
+
1196
+ #: src/class-bwp-gxs.php:3652
1197
+ #, php-format
1198
+ msgid "There are no public <em>%s</em>."
1199
+ msgstr ""
1200
+
1201
+ #: src/class-bwp-gxs.php:3597
1202
+ #, php-format
1203
+ msgid ""
1204
+ "There is no class named <strong>%s</strong> in the module file <strong>%s</"
1205
+ "strong>."
1206
+ msgstr ""
1207
+ "Tiada kelas dinamakan <strong>%s</strong> di dalam fail modul <strong>%s</"
1208
+ "strong>."
1209
+
1210
+ #: src/class-bwp-gxs.php:558 src/class-bwp-gxs.php:563
1211
+ msgid "This action can not be undone, are you sure?"
1212
+ msgstr ""
1213
+
1214
+ #: src/class-bwp-gxs.php:1771
1215
+ msgid ""
1216
+ "This extension has an effect on performance, if you notice any slowdown "
1217
+ "please try disabling it first."
1218
+ msgstr ""
1219
+
1220
+ #: src/class-bwp-gxs.php:1827
1221
+ msgid ""
1222
+ "This ping works separately from the sitemap index ping, and only occurs when "
1223
+ "you publish an article in one of the news categories set below."
1224
+ msgstr ""
1225
+
1226
+ #: src/class-bwp-gxs.php:379
1227
+ #, php-format
1228
+ msgid ""
1229
+ "This sitemap was originally generated in %s second(s) (Memory usage: %s) - "
1230
+ "%s queries - %s URL(s) listed"
1231
+ msgstr ""
1232
+ "Peta tapak ini asalnya telah dihasilkan selama %s saat (Penggunaan memori: "
1233
+ "%s) - %s maklumat - %s URL(s) telah disenaraikan"
1234
+
1235
+ #: src/templates/provider/admin/exclude-posts.html.php:28
1236
+ msgid "Title"
1237
+ msgstr ""
1238
+
1239
+ #: src/class-bwp-gxs.php:1231
1240
+ #, fuzzy, php-format
1241
+ msgid ""
1242
+ "To proceed, submit your <a href=\"%s\" target=\"_blank\">sitemapindex</a> to "
1243
+ "major search engines like <a href=\"%s\" target=\"_blank\">Google</a> or <a "
1244
+ "href=\"%s\" target=\"_blank\">Bing</a>."
1245
+ msgstr ""
1246
+ "<em>Hantar indeks pelan tapak anda kepada enjin carian biasa seperti <a href="
1247
+ "\"%s\" target=\"_blank\">Google</a>, <a href=\"%s\" target=\"_blank\">Yahoo</"
1248
+ "a>, <a href=\"%s\" target=\"_blank\">Bing</a> atau <a href=\"%s\" target="
1249
+ "\"_blank\">Ask</a>.</em>"
1250
+
1251
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:408
1252
+ msgid "Two cups $10.00"
1253
+ msgstr ""
1254
+
1255
+ #: src/class-bwp-gxs.php:3959
1256
+ msgid "Unknown response code from search engines. Ping failed."
1257
+ msgstr ""
1258
+
1259
+ #: src/templates/provider/admin/external-pages.html.php:22
1260
+ msgid "Url"
1261
+ msgstr ""
1262
+
1263
+ #: src/class-bwp-gxs.php:1910
1264
+ msgid "Use GMT for Last Modified date"
1265
+ msgstr ""
1266
+
1267
+ #: src/class-bwp-gxs.php:1979
1268
+ #, php-format
1269
+ msgid ""
1270
+ "Use gzip to make sitemaps ~70% smaller. If you see an error after enabling "
1271
+ "this, it's very likely that you have gzip active on your server already."
1272
+ msgstr ""
1273
+
1274
+ #: src/class-bwp-gxs.php:1706
1275
+ msgid "Use the selected \"News taxonomy\""
1276
+ msgstr ""
1277
+
1278
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:416
1279
+ msgid "Via"
1280
+ msgstr ""
1281
+
1282
+ #: src/templates/provider/admin/news-contents.html.php:13
1283
+ #: vendor/kminh/bwp-framework/src/class-bwp-option-page-v3.php:828
1284
+ msgid "View more info in a separate tab"
1285
+ msgstr ""
1286
+
1287
+ #: src/class-bwp-gxs.php:2185
1288
+ msgid "Warning"
1289
+ msgstr "Amaran"
1290
+
1291
+ #: src/class-bwp-gxs.php:1525
1292
+ msgid ""
1293
+ "When a post belongs to multiple terms, it will be excluded if <strong>ANY</"
1294
+ "strong> of those terms is currently excluded."
1295
+ msgstr ""
1296
+
1297
+ #: src/class-bwp-gxs.php:1986
1298
+ msgid ""
1299
+ "When this is on, NO caching is used and <code>WP_DEBUG</code> is respected, "
1300
+ "useful when developing new modules."
1301
+ msgstr ""
1302
+
1303
+ #: src/class-bwp-gxs.php:1987
1304
+ #, php-format
1305
+ msgid ""
1306
+ "When this is on, NO headers are sent and sitemaps are NOT compressed, useful "
1307
+ "when debugging <em>Content Encoding Error</em>. More info <a href="
1308
+ "\"%s#sitemap-log-debug\" target=\"_blank\">here</a>."
1309
+ msgstr ""
1310
+
1311
+ #: src/class-bwp-gxs.php:1421
1312
+ #, fuzzy
1313
+ msgid ""
1314
+ "Whenever you post something new to your blog, you can <em>ping</em> search "
1315
+ "engines with your sitemap index to tell them your blog just got updated."
1316
+ msgstr ""
1317
+ "<em>Sekarang apabila anda menghantar sesuatu yang baru pada blog anda, anda "
1318
+ "boleh <em>menguji</em> enjin carian untuk memberitahu mereka bahawa blog "
1319
+ "anda baru dikemaskinikan. Penghantaran mungkin kurang efektif dari yang anda "
1320
+ "fikir tetapi anda harus juga benarkan fungsi ini.</em>"
1321
+
1322
+ #: src/class-bwp-gxs.php:1959
1323
+ #, php-format
1324
+ msgid ""
1325
+ "WordPress generates a %svirtual robots.txt%s file for your blog by default. "
1326
+ "You can add the sitemap index file to that robots.txt file using settings "
1327
+ "below."
1328
+ msgstr ""
1329
+
1330
+ #: src/class-bwp-gxs.php:963
1331
+ msgid "XML Sitemap Log"
1332
+ msgstr ""
1333
+
1334
+ #: src/class-bwp-gxs.php:335 src/class-bwp-gxs.php:942
1335
+ #: src/class-bwp-gxs.php:982
1336
+ #, fuzzy
1337
+ msgid "XML Sitemaps"
1338
+ msgstr "Pelan Tapak Google XML BWP "
1339
+
1340
+ #: src/class-bwp-gxs.php:956
1341
+ #, fuzzy
1342
+ msgid "XML Sitemaps - Advanced Options"
1343
+ msgstr "Penghasilan Pelan Tapak"
1344
+
1345
+ #: src/class-bwp-gxs.php:949
1346
+ #, fuzzy
1347
+ msgid "XML Sitemaps - Extensions"
1348
+ msgstr "Penghasilan Pelan Tapak"
1349
+
1350
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:565
1351
+ #, php-format
1352
+ msgid "You are using version %s!"
1353
+ msgstr "Anda menggunakan versi %s!"
1354
+
1355
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:391
1356
+ #, fuzzy
1357
+ msgid ""
1358
+ "You can buy me some special coffees if you appreciate my work, thank you!"
1359
+ msgstr "Anda boleh menderma jika anda hargai kerja saya, terima kasih!"
1360
+
1361
+ #: src/class-bwp-gxs.php:1748
1362
+ #, fuzzy, php-format
1363
+ msgid ""
1364
+ "You can only select post types that <a href=\"%s\" target=\"_blank\">support "
1365
+ "the thumbnail feature</a>."
1366
+ msgstr "Yahoo &mdash; <a href=\"%s\" target=\"_blank\">penting</a>"
1367
+
1368
+ #: src/class-bwp-gxs.php:1980
1369
+ #, fuzzy
1370
+ msgid "Your sitemaps are generated and then cached to reduce unnecessary work."
1371
+ msgstr ""
1372
+ "pelan tapak anda telah dihasilkan dan kemudian di-cache-kan untuk "
1373
+ "mengurangkan kerja yang diperlukan."
1374
+
1375
+ #: src/class-bwp-gxs.php:1191
1376
+ msgid "click to generate your Sitemap Index"
1377
+ msgstr ""
1378
+
1379
+ #: src/class-bwp-gxs.php:1445 src/class-bwp-gxs.php:2013
1380
+ msgid "day(s)"
1381
+ msgstr "hari"
1382
+
1383
+ #: src/class-bwp-gxs.php:1715
1384
+ #, fuzzy
1385
+ msgid "day(s)."
1386
+ msgstr "hari"
1387
+
1388
+ #: src/class-bwp-gxs.php:2573
1389
+ #, fuzzy
1390
+ msgid "debugging was on"
1391
+ msgstr "(Debug dibuka)"
1392
+
1393
+ #: src/class-bwp-gxs.php:2572
1394
+ msgid "extra debugging was on"
1395
+ msgstr ""
1396
+
1397
+ #: src/class-bwp-gxs.php:1400
1398
+ msgid "filter"
1399
+ msgstr ""
1400
+
1401
+ #: src/class-bwp-gxs.php:1444 src/class-bwp-gxs.php:2012
1402
+ msgid "hour(s)"
1403
+ msgstr "jam"
1404
+
1405
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:524
1406
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:534
1407
+ msgid "loading..."
1408
+ msgstr ""
1409
+
1410
+ #: src/class-bwp-gxs.php:1443 src/class-bwp-gxs.php:2011
1411
+ msgid "minute(s)"
1412
+ msgstr "minit"
1413
+
1414
+ #: src/class-bwp-gxs.php:3073
1415
+ #, php-format
1416
+ msgid ""
1417
+ "news posts that are published within the last <strong>%d day(s)</strong>. To "
1418
+ "include news posts within a longer time period, change the \"News age\" "
1419
+ "setting via BWP Sitemaps >> Extensions >> Google News Sitemap >> Sitemap "
1420
+ "Contents"
1421
+ msgstr ""
1422
+
1423
+ #: src/class-bwp-gxs.php:1108
1424
+ msgid "overridden"
1425
+ msgstr ""
1426
+
1427
+ #: src/class-bwp-gxs.php:1442 src/class-bwp-gxs.php:2010
1428
+ msgid "second(s)"
1429
+ msgstr "saat"
1430
+
1431
+ #: src/class-bwp-gxs.php:1729
1432
+ msgid "selected terms."
1433
+ msgstr ""
1434
+
1435
+ #: src/class-bwp-gxs.php:1487
1436
+ msgid ""
1437
+ "time(s) per search engine per day. Increase this limit if you publish a lot "
1438
+ "of posts in a single day."
1439
+ msgstr ""
1440
+
1441
+ #: src/templates/provider/admin/external-page-modal.html.php:21
1442
+ msgid "working ..."
1443
+ msgstr ""
1444
+
1445
+ #~ msgid "%s"
1446
+ #~ msgstr "%s"
1447
+
1448
+ #~ msgid ""
1449
+ #~ "<a href=\"%s\" target=\"_blank\">%s</a> has been successfully built on "
1450
+ #~ "<strong>%s</strong>."
1451
+ #~ msgstr ""
1452
+ #~ "<a href=\"%s\" target=\"_blank\">%s</a> telah berjaya dibina <strong>%s</"
1453
+ #~ "strong>."
1454
+
1455
+ #, fuzzy
1456
+ #~ msgid ""
1457
+ #~ "<em>%s.xml</em> does not have any item. You can fix this easily by "
1458
+ #~ "excluding any post types / terms you do not use in <em>Sitemap Generator</"
1459
+ #~ "em> tab within your admin area. If you still see this error, consider "
1460
+ #~ "checking the module that generates this sitemap (<em>%s.php</em>)."
1461
+ #~ msgstr ""
1462
+ #~ "<em>%s.xml</em> tiada apa-apa item. Plugin telah membuang permulaan 404 "
1463
+ #~ "kepada enjian carian yang memintanya. Anda seharusnya meninjau modul yang "
1464
+ #~ "menghasilkan pelan tapak itu (<em>%s.php</em>)."
1465
+
1466
+ #~ msgid "<em>Basic information about all your sitemaps.</em>"
1467
+ #~ msgstr "<em>Maklumat asas tentang keseluruhan pelan tapak anda.</em>"
1468
+
1469
+ #~ msgid "<em>Cache your sitemaps for better performance.</em>"
1470
+ #~ msgstr ""
1471
+ #~ "<em>Cache pelan tapak anda untuk prestasi yang memberangsangkan.</em>"
1472
+
1473
+ #~ msgid ""
1474
+ #~ "<em>This plugin uses modules to build sitemap data so it is recommended "
1475
+ #~ "that you extend this plugin using modules rather than hooks. Some of the "
1476
+ #~ "settings below only affect modules extending the base module class. Read "
1477
+ #~ "more about using modules <a href=\"%s#using-modules\">here</a>.</em>"
1478
+ #~ msgstr ""
1479
+ #~ "<em>Plugin ini menggunakan modul untuk membina data pelan tapak jadi "
1480
+ #~ "digalakkan untuk anda mengembangkan plugin ini menggunakan modul-modul "
1481
+ #~ "berbanding dikait. Salah satu daripada tetapan dibawah hanya mempengaruhi "
1482
+ #~ "dalam memperluas kelas modul asas.Lebih lanjut tentang penggunaan modul "
1483
+ #~ "<a href=\"%s#using-modules\">disini</a>.</em>"
1484
+
1485
+ #~ msgid ""
1486
+ #~ "After you activate this plugin, all sitemaps should be available right "
1487
+ #~ "away. The next step is to submit the sitemapindex to major search "
1488
+ #~ "engines. You only need the <strong>sitemapindex</strong> and nothing "
1489
+ #~ "else, those search engines will automatically recognize other included "
1490
+ #~ "sitemaps. You can read a small <a href=\"%s\">How-to</a> if you are "
1491
+ #~ "interested."
1492
+ #~ msgstr ""
1493
+ #~ "Apabila anda aktifkan plugin ini, semua pelan tapak sepatutnya sudah "
1494
+ #~ "berada. Langkah seterusnya ialah dengan menghantar indeks pelan tapak "
1495
+ #~ "kepada enjin carian. Anda cuma perlu <strong>indeks pelan tapak</strong> "
1496
+ #~ "dan selain itu, enjin carian secara automatik mengenalpasti pelan tapak "
1497
+ #~ "yang lain. Anda boleh merujuk <a href=\"%s\">Langkah-langkah</a> jika "
1498
+ #~ "anda berminat."
1499
+
1500
+ #~ msgid "Ask.com"
1501
+ #~ msgstr "Ask.com"
1502
+
1503
+ #~ msgid "BWP Google XML Sitemaps Statistics"
1504
+ #~ msgstr "Statistik Pelan Tapak Google XML BWP "
1505
+
1506
+ #~ msgid "Cache directory (\"%s\") does not exist or is not writable."
1507
+ #~ msgstr "Direktori cache (\"%s\") tidak wujud atau tidak boleh dibaca."
1508
+
1509
+ #~ msgid ""
1510
+ #~ "Cache directory does not exist or is not writable. Please read more about "
1511
+ #~ "directory permission <a href='http://www.zzee.com/solutions/unix-"
1512
+ #~ "permissions.shtml'>here</a> (Unix)."
1513
+ #~ msgstr ""
1514
+ #~ "Direktori cache tidak wujud atau tidak boleh dibaca. Sila rujuk direktori "
1515
+ #~ "berkenaan kebenaran <a href='http://www.zzee.com/solutions/unix-"
1516
+ #~ "permissions.shtml'>disini</a> (Unix)."
1517
+
1518
+ #~ msgid ""
1519
+ #~ "Cache file for module <em>%s</em> is not found and will be built right "
1520
+ #~ "away."
1521
+ #~ msgstr ""
1522
+ #~ "Fail cache untuk modul <em>%s</em> tidak dijumpai dan akan dibina segera."
1523
+
1524
+ #~ msgid "Cached sitemaps are stored in (auto detected)"
1525
+ #~ msgstr "Pelan tapak yang di-cache-kan akan disimpan di dalam (auto carian)"
1526
+
1527
+ #~ msgid "Cached sitemaps will last for"
1528
+ #~ msgstr "Pelan tapak yang di-cache-kan akan bertahan selama"
1529
+
1530
+ #~ msgid "Caching Options"
1531
+ #~ msgstr "Tetapan Caching"
1532
+
1533
+ #~ msgid ""
1534
+ #~ "Could not delete any cached sitemaps. Please manually check the cache "
1535
+ #~ "directory."
1536
+ #~ msgstr ""
1537
+ #~ "Tidak boleh buang mana-mana pelan tapak yang telah di-cache-kan. Sila "
1538
+ #~ "rujuk cache direktori secara manual."
1539
+
1540
+ #~ msgid ""
1541
+ #~ "Could not load module file: <strong>%s</strong> in both default and "
1542
+ #~ "custom module directory. Please recheck if that module file exists."
1543
+ #~ msgstr ""
1544
+ #~ "Tidak boleh menggunakan fail modul: <strong>%s</strong> di kedua-dua "
1545
+ #~ "lalai dan juga lain-lain direktori modul. Sila semak semula jika fail "
1546
+ #~ "modul itu wujud."
1547
+
1548
+ #~ msgid "Enable Gzip?"
1549
+ #~ msgstr "Benarkan Gzip?"
1550
+
1551
+ #~ msgid "Enable pinging functionality?"
1552
+ #~ msgstr "Benarkan keberkesanan penghantaran? "
1553
+
1554
+ #~ msgid "Enable pinging individual SE"
1555
+ #~ msgstr "Benarkan penghantaran SE individu"
1556
+
1557
+ #~ msgid "Get no more than"
1558
+ #~ msgstr "Dapat tidak lebih daripada"
1559
+
1560
+ #, fuzzy
1561
+ #~ msgid ""
1562
+ #~ "In its simplest form, a Sitemap is an XML file that lists URLs for a site "
1563
+ #~ "along with additional metadata about each URL (when it was last updated, "
1564
+ #~ "how often it usually changes, and how important it is, relative to other "
1565
+ #~ "URLs in the site) so that search engines can more intelligently crawl the "
1566
+ #~ "site &mdash; <em>http://www.sitemaps.org/</em>"
1567
+ #~ msgstr ""
1568
+ #~ "Dalam erti kata mudah, sebuah pelan tapak adalah fail XML yang "
1569
+ #~ "mengandungi senarai URL untuk halaman bersama-sama dengan metadata "
1570
+ #~ "tambahan tentang setiap URL (saat terakhir dikemaskinikan, seberapa kerap "
1571
+ #~ "perubahan biasanya, dan betapa pentingnya, berkait rapat dengan URL lain "
1572
+ #~ "di tapak ) jadi enjin carian akan lebih berkesan mencari tapak tersebut - "
1573
+ #~ "http://www.sitemaps.org/"
1574
+
1575
+ #~ msgid "In sitemapindex, include"
1576
+ #~ msgstr "Di dalam indeks pelan tapak, termasuk"
1577
+
1578
+ #~ msgid ""
1579
+ #~ "Input a full path to the directory where you put your own modules (e.g. "
1580
+ #~ "<code>/home/mysite/public_html/gxs-modules/</code>), you can also "
1581
+ #~ "override a built-in module by having a module with the same filename in "
1582
+ #~ "this directory. A filter is also available if you would like to use PHP "
1583
+ #~ "instead."
1584
+ #~ msgstr ""
1585
+ #~ "Masuk ruang penuh untuk direktori dimana anda meletak modul anda sendiri "
1586
+ #~ "(contoh <code>/home/mysite/public_html/gxs-modules/</code>), anda juga "
1587
+ #~ "boleh melebih-naik modul yang terbina dengan mendapat nama modul fail "
1588
+ #~ "yang sama di dalam direktori. Penapis juga tersedia jika anda mahu "
1589
+ #~ "menggunakan PHP."
1590
+
1591
+ #~ msgid "Loaded a custom module file: <strong>%s</strong>."
1592
+ #~ msgstr "Menggunakan lain-lain fail modul: <strong>%s</strong>."
1593
+
1594
+ #~ msgid "Loaded a custom sub-module file: <strong>%s</strong>."
1595
+ #~ msgstr "Lain-lain fail sub-modul telah dibekalkan: <strong>%s</strong>."
1596
+
1597
+ #~ msgid ""
1598
+ #~ "Mapped sub-module file: <strong>%s</strong> is not available in both "
1599
+ #~ "default and custom module directory. The plugin will now try loading the "
1600
+ #~ "requested sub-module instead."
1601
+ #~ msgstr ""
1602
+ #~ "Fail sub-module yang dikategorikan: <strong>%s</strong> tidak terdapat di "
1603
+ #~ "dalam kedua-dua lalai dan lain-lain direktori modul. Plugin sekarang akan "
1604
+ #~ "cuba untuk menggunakan sub-modul."
1605
+
1606
+ #~ msgid ""
1607
+ #~ "Minor errors will be printed on screen. Also, when debug is on, no "
1608
+ #~ "caching is used, useful when you develop new modules."
1609
+ #~ msgstr ""
1610
+ #~ "Ralat kecil akan dicetak pada skrin. Juga, apabila debug diaktifkan, "
1611
+ #~ "tiada caching akan digunakan, berguna apabila anda mengembangkan modul "
1612
+ #~ "baharu."
1613
+
1614
+ #~ msgid "No additional load is needed so enabling this is recommended."
1615
+ #~ msgstr ""
1616
+ #~ "Tiada beban tambahan diperlukan jadi membenarkan ini adalah digalakkan."
1617
+
1618
+ #~ msgid ""
1619
+ #~ "Nothing here... yet! Try submitting your <a href=\"%s\">sitemapindex</a> "
1620
+ #~ "first!"
1621
+ #~ msgstr ""
1622
+ #~ "Tiada disini...lagi! Cuba hantar <a href=\"%s\">indeks pelan tapak</a> "
1623
+ #~ "anda dahulu!"
1624
+
1625
+ #~ msgid "Output no more than"
1626
+ #~ msgstr "Output tidak lebih dari"
1627
+
1628
+ #~ msgid "Ping limit for today to %s has been reached, sorry!"
1629
+ #~ msgstr "Had menghantar untuk hari ini kepada %s telah dicapai, maaf!"
1630
+
1631
+ #~ msgid "Show build stats in sitemaps?"
1632
+ #~ msgstr "Papar status bina dalam pelan tapak?"
1633
+
1634
+ #~ msgid "Style your sitemaps with an XSLT stylesheet?"
1635
+ #~ msgstr "Ubah pelan tapak anda dengan gaya lembar XSLT?"
1636
+
1637
+ #~ msgid ""
1638
+ #~ "Sub-module file: <strong>%s</strong> is not available in both default and "
1639
+ #~ "custom module directory. The plugin will now try loading the parent "
1640
+ #~ "module instead."
1641
+ #~ msgstr ""
1642
+ #~ "Fail sub-modul: <strong>%s</strong> tidak terdapat di dalam kedua-dua "
1643
+ #~ "lalai dan juga lain-lain direktori modul. Plugin akan cuba menggunakan "
1644
+ #~ "modul utama."
1645
+
1646
+ #~ msgid "Submit your sitemaps"
1647
+ #~ msgstr "Serah pelan tapak anda"
1648
+
1649
+ #, fuzzy
1650
+ #~ msgid "What is a Google News Sitemap?"
1651
+ #~ msgstr "Apa itu Pelan tapak?"
1652
+
1653
+ #~ msgid "You do not have sufficient permissions to access this page."
1654
+ #~ msgstr "Anda tidak mempunyai cukup kebenaran untuk mengakses muka ini."
1655
+
1656
+ #~ msgid ""
1657
+ #~ "item(s) in one SQL query. This helps you avoid running too heavy queries."
1658
+ #~ msgstr ""
1659
+ #~ "item-item di dalam satu maklumat SQL. Ini membantu anda untuk menghindar "
1660
+ #~ "dari menggunakan maklumat terlalu banyak."
1661
+
1662
+ #, fuzzy
1663
+ #~ msgid "item(s) in one sitemap. You can not go over 50,000."
1664
+ #~ msgstr ""
1665
+ #~ "item di dalam satu pelan tapak. Akan tetapi, 5000 adalah lebih sesuai. "
1666
+ #~ "Anda tidak boleh melebihi 50,000, walaubagaimanapun."
1667
+
1668
+ #~ msgid "log"
1669
+ #~ msgstr "log"
1670
+
1671
+ #~ msgid "make your sitemaps ~ 70% smaller."
1672
+ #~ msgstr "membuat pelan tapak anda 70% lebih kecil."
1673
+
1674
+ #~ msgid "read more"
1675
+ #~ msgstr "lebih lanjut"
1676
+
1677
+ #~ msgid "static pages' sitemap."
1678
+ #~ msgstr "pelan tapak muka statik."
1679
+
1680
+ #~ msgid "tag archives' sitemaps."
1681
+ #~ msgstr "Lekat arkib pelan tapak."
languages/bwp-google-xml-sitemaps-ro_RO.mo ADDED
Binary file
languages/bwp-google-xml-sitemaps-ro_RO.po ADDED
@@ -0,0 +1,1666 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: BWP Google XML Sitemaps(Malay Translation)\n"
4
+ "Report-Msgid-Bugs-To: contact@betterwp.net\n"
5
+ "POT-Creation-Date: 2016-01-14 21:05+0700\n"
6
+ "PO-Revision-Date: 2012-04-03 20:10+0700\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: <darkcry3r@gmail.com>\n"
9
+ "Language: \n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n"
14
+ "X-Poedit-Basepath: .\n"
15
+ "X-Poedit-SourceCharset: utf-8\n"
16
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
+ "X-Poedit-Language: Malay\n"
18
+ "X-Poedit-Country: MALAYSIA\n"
19
+ "X-Poedit-SearchPath-0: .\n"
20
+
21
+ #: vendor/kminh/bwp-framework/src/class-bwp-version.php:32
22
+ #, php-format
23
+ msgid ""
24
+ "%s requires WordPress <strong>%s</strong> or higher and PHP <strong>%s</"
25
+ "strong> or higher. The plugin will not function until you update your "
26
+ "software. Please deactivate this plugin."
27
+ msgstr ""
28
+ "%s are nevoie de versiunea WordPress <strong>%s</strong>sau mai mare si PHP "
29
+ "<strong>%s</strong> sau mai mare . Pluginul nu va functiona pana nu "
30
+ "actualizati versiunile de software. Va rugam dezactivati pluginul."
31
+
32
+ #: src/templates/provider/admin/exclude-posts.html.php:18
33
+ #: src/templates/provider/admin/external-pages.html.php:13
34
+ #: src/templates/provider/admin/exclude-terms.html.php:18
35
+ #: src/class-bwp-gxs.php:1740
36
+ msgid "... loading"
37
+ msgstr ""
38
+
39
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:411
40
+ msgid "... or any amount!"
41
+ msgstr ""
42
+
43
+ #: src/class-bwp-gxs.php:3641
44
+ #, php-format
45
+ msgid "<em>%s.xml</em> does not have any item."
46
+ msgstr ""
47
+
48
+ #: src/class-bwp-gxs.php:3675
49
+ #, php-format
50
+ msgid ""
51
+ "<em>%s.xml</em> was successfully generated but could not be served properly "
52
+ "because some headers have already been sent (something was printed on line "
53
+ "<strong>%s</strong> in file <strong>%s</strong>)."
54
+ msgstr ""
55
+
56
+ #: src/class-bwp-gxs.php:3349
57
+ #, php-format
58
+ msgid ""
59
+ "<em>%s.xml</em> will be served using module file <em>%s</em> in the custom "
60
+ "module directory."
61
+ msgstr ""
62
+
63
+ #: src/class-bwp-gxs.php:3366
64
+ #, fuzzy, php-format
65
+ msgid "<em>%s.xml</em> will be served using module file <em>%s</em>."
66
+ msgstr "<em>%s.xml</em> a fost generat cu succes folosit modulul <em>%s</em>."
67
+
68
+ #: src/class-bwp-gxs.php:2412
69
+ #, php-format
70
+ msgid "<strong>%d</strong> cached sitemaps have been flushed successfully!"
71
+ msgstr "<strong>%d</strong> sitemap-uri din cache au fost reinnoite astazi!"
72
+
73
+ #: src/class-bwp-gxs.php:3373
74
+ #, fuzzy, php-format
75
+ msgid ""
76
+ "<strong>%s</strong> can not be served because of a missing module file: "
77
+ "<strong>%s</strong>."
78
+ msgstr ""
79
+ "Nu exista o clasa denumita <strong>%s</strong> in modulul <strong>%s</"
80
+ "strong>."
81
+
82
+ #: src/class-bwp-gxs.php:2528
83
+ msgid "<strong>BWP Google XML Sitemaps Error:</strong> "
84
+ msgstr "<strong>Eroare Google XML Sitemaps Error:</strong>"
85
+
86
+ #: src/class-bwp-gxs.php:3974
87
+ #, php-format
88
+ msgid "<strong>Error %s</strong> from <em>%s</em>."
89
+ msgstr ""
90
+
91
+ #: src/class-bwp-gxs.php:1679
92
+ msgid ""
93
+ "A Google News Sitemap is a file that allows you to control which content you "
94
+ "submit to Google News. By creating and submitting a Google News Sitemap, "
95
+ "you're able to help Google News discover and crawl your site's news articles "
96
+ "&mdash; http://support.google.com/"
97
+ msgstr ""
98
+
99
+ #: src/templates/provider/admin/external-page-form.html.php:17
100
+ msgid "Absolute URL to page"
101
+ msgstr ""
102
+
103
+ #: src/templates/provider/admin/external-pages.html.php:26
104
+ msgid "Actions"
105
+ msgstr ""
106
+
107
+ #: src/class-bwp-gxs.php:1720
108
+ #, php-format
109
+ msgid ""
110
+ "Add <code>post_google_news.xml</code> to the main <a href=\"%s\" target="
111
+ "\"_blank\">sitemapindex.xml</a>."
112
+ msgstr ""
113
+
114
+ #: src/class-bwp-gxs.php:1982
115
+ #, fuzzy
116
+ msgid "Add a sitemap index entry to blog's robots.txt"
117
+ msgstr "Adauga sitemapindex in WordPress's robots.txt?"
118
+
119
+ #: src/class-bwp-gxs.php:1719
120
+ msgid ""
121
+ "Add an <code>&lt;image:image&gt;</code> entry to each sitemap item when "
122
+ "possible."
123
+ msgstr ""
124
+
125
+ #: src/class-bwp-gxs.php:1676
126
+ msgid "Add featured images to existing post-based sitemaps."
127
+ msgstr ""
128
+
129
+ #: src/templates/provider/admin/external-pages.html.php:7
130
+ msgid "Add new page"
131
+ msgstr ""
132
+
133
+ #: src/class-bwp-gxs.php:1394
134
+ #, php-format
135
+ msgid ""
136
+ "Add non-WordPress pages to the %s sitemap. You can also use %s to add "
137
+ "external pages programmatically."
138
+ msgstr ""
139
+
140
+ #: src/class-bwp-gxs.php:1983
141
+ #, fuzzy
142
+ msgid "Add sitemap index entries from all blogs to primary blog's robots.txt"
143
+ msgstr "Adauga sitemapindex in WordPress's robots.txt?"
144
+
145
+ #: src/templates/provider/admin/external-page-modal.html.php:10
146
+ msgid "Add/Update an external page"
147
+ msgstr ""
148
+
149
+ #: src/class-bwp-gxs.php:347 src/class-bwp-gxs.php:998
150
+ #, fuzzy
151
+ msgid "Advanced Options"
152
+ msgstr "Optiunile modulului"
153
+
154
+ #: src/class-bwp-gxs.php:2459
155
+ msgid "All logs have been cleared successfully!"
156
+ msgstr ""
157
+
158
+ #: src/class-bwp-gxs.php:2442
159
+ #: vendor/kminh/bwp-framework/src/class-bwp-option-page-v3.php:439
160
+ msgid "All options have been saved."
161
+ msgstr ""
162
+
163
+ #: src/class-bwp-gxs.php:1458
164
+ msgid "Also exclude posts that belong to excluded terms."
165
+ msgstr ""
166
+
167
+ #: src/class-bwp-gxs.php:1787
168
+ #, php-format
169
+ msgid ""
170
+ "Also, if you notice that some non-news contents are indexed too, read <a "
171
+ "href=\"%sfaq#google-news\" target=\"_blank\">this</a>."
172
+ msgstr ""
173
+
174
+ #: src/class-bwp-gxs.php:1799
175
+ msgid "Articles that are older than specified day(s) will NOT be considered."
176
+ msgstr ""
177
+
178
+ #: src/class-bwp-gxs.php:3108
179
+ #, fuzzy
180
+ msgid "Author archive"
181
+ msgstr "sitemap pentru arhivele pe baza de data"
182
+
183
+ #: src/class-bwp-gxs.php:1456
184
+ #, fuzzy
185
+ msgid "Author archives"
186
+ msgstr "sitemap pentru arhivele pe baza de data"
187
+
188
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:521
189
+ msgid "BWP Gems"
190
+ msgstr ""
191
+
192
+ #: src/class-bwp-gxs.php:948
193
+ #, fuzzy
194
+ msgid "BWP Google News XML Sitemap"
195
+ msgstr "BWP Google XML Sitemaps"
196
+
197
+ #: src/class-bwp-gxs.php:941
198
+ msgid "BWP Google XML Sitemaps"
199
+ msgstr "BWP Google XML Sitemaps"
200
+
201
+ #: src/class-bwp-gxs.php:955
202
+ #, fuzzy
203
+ msgid "BWP Google XML Sitemaps - Advanced Options"
204
+ msgstr "Generator BWP Google XML Sitemaps "
205
+
206
+ #: src/class-bwp-gxs.php:2529
207
+ msgid "BWP Google XML Sitemaps Error"
208
+ msgstr "Eroare Google XML Sitemaps Error"
209
+
210
+ #: src/class-bwp-gxs.php:962
211
+ #, fuzzy
212
+ msgid "BWP Google XML Sitemaps Log"
213
+ msgstr "BWP Google XML Sitemaps"
214
+
215
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:531
216
+ msgid "BWP News"
217
+ msgstr ""
218
+
219
+ #: src/class-bwp-gxs.php:2126
220
+ #, fuzzy
221
+ msgid ""
222
+ "Below are messages logged when your sitemaps were generated, including <span "
223
+ "style=\"color: #999999;\">notices</span>, <span style=\"color: #FF0000;"
224
+ "\">errors</span> and <span style=\"color: #009900;\">success messages</span>."
225
+ msgstr ""
226
+ "<em>MaMai multe detalii despre cum sitemap-urile sunt generate, incluzand "
227
+ "<span style=\"color: #999999;\">notificari</span>, <span style=\"color: "
228
+ "#FF0000;\">erori</span> si <span style=\"color: #009900;\">confirmari</span>."
229
+ "</em>"
230
+
231
+ #: src/class-bwp-gxs.php:989
232
+ #, fuzzy
233
+ msgid "Better WordPress Google News XML Sitemap"
234
+ msgstr "BWP Google XML Sitemaps"
235
+
236
+ #: src/class-bwp-gxs.php:972 src/class-bwp-gxs.php:981
237
+ #, fuzzy
238
+ msgid "Better WordPress Google XML Sitemaps"
239
+ msgstr "BWP Google XML Sitemaps"
240
+
241
+ #: src/class-bwp-gxs.php:997
242
+ #, fuzzy
243
+ msgid "Better WordPress Google XML Sitemaps Advanced Options"
244
+ msgstr "Generator BWP Google XML Sitemaps "
245
+
246
+ #: src/class-bwp-gxs.php:1005
247
+ #, fuzzy
248
+ msgid "Better WordPress Google XML Sitemaps Log"
249
+ msgstr "BWP Google XML Sitemaps"
250
+
251
+ #: src/class-bwp-gxs.php:1465
252
+ msgid "Bing"
253
+ msgstr "Bing"
254
+
255
+ #: src/class-bwp-gxs.php:1919
256
+ msgid "Cache directory"
257
+ msgstr ""
258
+
259
+ #: src/class-bwp-gxs.php:2186
260
+ #, php-format
261
+ msgid ""
262
+ "Cache directory (<code>%s</code>) does not exist or is not writable. Please "
263
+ "try CHMODing it to either 755 or 777, or disable caching to hide this "
264
+ "warning (not recommended)."
265
+ msgstr ""
266
+
267
+ #: src/class-bwp-gxs.php:3305
268
+ #, php-format
269
+ msgid ""
270
+ "Cache directory <strong>%s</strong> is not writable, no cache file was "
271
+ "created."
272
+ msgstr ""
273
+
274
+ #: src/class-bwp-gxs.php:1918
275
+ msgid "Cache expiry time"
276
+ msgstr ""
277
+
278
+ #: src/class-bwp-gxs.php:1953
279
+ msgid ""
280
+ "Cache your sitemaps for better performance. If you are still configuring the "
281
+ "plugin it's best to disable caching or you might have to manually flush the "
282
+ "cache for any changes to show up."
283
+ msgstr ""
284
+
285
+ #: src/templates/provider/admin/external-page-form.html.php:29
286
+ msgid "Calculate using \"Last modified\""
287
+ msgstr ""
288
+
289
+ #: src/templates/provider/admin/external-pages.html.php:23
290
+ #: src/templates/provider/admin/external-page-form.html.php:27
291
+ #, fuzzy
292
+ msgid "Change frequency"
293
+ msgstr "Frecventa de schimbare prestabilit"
294
+
295
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:439
296
+ msgid "Check out this cool plugin"
297
+ msgstr ""
298
+
299
+ #: src/class-bwp-gxs.php:1381
300
+ msgid "Choose appropriate sitemaps to generate."
301
+ msgstr ""
302
+
303
+ #: src/class-bwp-gxs.php:2359
304
+ msgid "Clear Message Log"
305
+ msgstr ""
306
+
307
+ #: src/templates/provider/admin/external-page-form.html.php:51
308
+ msgid "Click to open a calendar"
309
+ msgstr ""
310
+
311
+ #: src/templates/logger/admin/sitemap-log.html.php:39
312
+ msgid "Click to regenerate"
313
+ msgstr ""
314
+
315
+ #: src/templates/logger/admin/sitemap-log.html.php:34
316
+ msgid "Click to view"
317
+ msgstr ""
318
+
319
+ #: src/templates/provider/admin/external-page-modal.html.php:24
320
+ msgid "Close"
321
+ msgstr ""
322
+
323
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:387
324
+ msgid "Coffees"
325
+ msgstr ""
326
+
327
+ #: src/class-bwp-gxs.php:1911
328
+ #, fuzzy
329
+ msgid "Compress sitemaps"
330
+ msgstr "Sitemap-urile tale"
331
+
332
+ #: src/handler/ajax/external-page.php:136
333
+ msgid "Could not add/update page, please try again."
334
+ msgstr ""
335
+
336
+ #: src/class-bwp-gxs.php:2425
337
+ #, php-format
338
+ msgid ""
339
+ "Could not flush the cache, cache directory is either not found or is not "
340
+ "writable. See <a href=\"%s\" target=\"_blank\">this FAQ entry</a> for a "
341
+ "possible solution."
342
+ msgstr ""
343
+
344
+ #: src/class-bwp-gxs.php:3318
345
+ #, fuzzy, php-format
346
+ msgid "Could not write sitemap file to cache directory <strong>%s</strong>"
347
+ msgstr "A fost incarcat un sitemapindex customizat: <strong>%s</strong>."
348
+
349
+ #: src/class-bwp-gxs.php:1346
350
+ msgid "Custom XSLT stylesheet URL"
351
+ msgstr "Stylesheet URL XSLT customizat"
352
+
353
+ #: src/class-bwp-gxs.php:1922
354
+ #, fuzzy
355
+ msgid "Custom module directory"
356
+ msgstr "Alterneaza directorul modulului"
357
+
358
+ #: src/class-bwp-gxs.php:1416
359
+ msgid ""
360
+ "Customize the look and feel of your sitemaps. Note that no stylesheet will "
361
+ "be used for the Google News sitemap."
362
+ msgstr ""
363
+
364
+ #: src/class-bwp-gxs.php:1921
365
+ msgid "Database query limit"
366
+ msgstr ""
367
+
368
+ #: src/class-bwp-gxs.php:3104
369
+ #, fuzzy
370
+ msgid "Date archive"
371
+ msgstr "sitemap pentru arhivele pe baza de data"
372
+
373
+ #: src/class-bwp-gxs.php:1455
374
+ #, fuzzy
375
+ msgid "Date archives"
376
+ msgstr "sitemap pentru arhivele pe baza de data"
377
+
378
+ #: src/class-bwp-gxs.php:1923
379
+ #, fuzzy
380
+ msgid "Debugging"
381
+ msgstr "(Debug-ul este activat)"
382
+
383
+ #: src/class-bwp-gxs.php:1460
384
+ #, fuzzy
385
+ msgid ""
386
+ "Default XSLT stylesheets will be used. Set your custom stylesheets below or "
387
+ "filter the <code>bwp_gxs_xslt</code> hook."
388
+ msgstr ""
389
+ "Acesta va incarca stylesheet-ul prestabilit oferit de plugin. Poti seta un "
390
+ "stylesheet customizat sau poti filtra <code>bwp_gxs_xslt</code>"
391
+
392
+ #: src/class-bwp-gxs.php:1336
393
+ msgid "Default change frequency"
394
+ msgstr "Frecventa de schimbare prestabilit"
395
+
396
+ #: src/class-bwp-gxs.php:1337
397
+ msgid "Default priority"
398
+ msgstr "Prioritate prestabilita"
399
+
400
+ #: src/class-bwp-gxs.php:1335
401
+ msgid "Default values"
402
+ msgstr ""
403
+
404
+ #: src/class-bwp-gxs.php:1412
405
+ msgid "Default values are only used when valid ones can not be calculated."
406
+ msgstr ""
407
+
408
+ #: src/class-bwp-gxs.php:1978
409
+ msgid ""
410
+ "Disable this to use the local timezone setting in <em>Settings >> General</"
411
+ "em>."
412
+ msgstr ""
413
+
414
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:1530
415
+ msgid "Dismiss this notice."
416
+ msgstr ""
417
+
418
+ #: src/class-bwp-gxs.php:1818
419
+ msgid ""
420
+ "Due to performance reason, it is advised to NOT use a tag-like taxonomy "
421
+ "(such as <em>Post Tag</em>) as the news taxonomy."
422
+ msgstr ""
423
+
424
+ #: src/templates/provider/admin/external-page-form.html.php:19
425
+ msgid ""
426
+ "Each page must have a unique URL, so if you provide an existing URL, the "
427
+ "page with that URL will be updated with new data provided here."
428
+ msgstr ""
429
+
430
+ #: src/class-bwp-gxs.php:561
431
+ msgid "Edit this page"
432
+ msgstr ""
433
+
434
+ #: src/class-bwp-gxs.php:1917
435
+ #, fuzzy
436
+ msgid "Enable auto cache re-generation"
437
+ msgstr "Activeaza auto-regenerarea cache-ului?"
438
+
439
+ #: src/class-bwp-gxs.php:1924
440
+ msgid "Enable build stats"
441
+ msgstr ""
442
+
443
+ #: src/class-bwp-gxs.php:1916
444
+ #, fuzzy
445
+ msgid "Enable caching"
446
+ msgstr "Activeaza cache?"
447
+
448
+ #: src/class-bwp-gxs.php:1347
449
+ #, fuzzy
450
+ msgid "Enable credit"
451
+ msgstr "Crediteaza?"
452
+
453
+ #: src/class-bwp-gxs.php:1926
454
+ #, fuzzy
455
+ msgid "Enable debugging mode"
456
+ msgstr "Permite debugging?"
457
+
458
+ #: src/class-bwp-gxs.php:1640 src/class-bwp-gxs.php:1643
459
+ #, fuzzy
460
+ msgid "Enable extension"
461
+ msgstr "Permite debugging?"
462
+
463
+ #: src/class-bwp-gxs.php:1927
464
+ #, fuzzy
465
+ msgid "Enable extra debugging mode"
466
+ msgstr "Permite debugging?"
467
+
468
+ #: src/class-bwp-gxs.php:1324 src/class-bwp-gxs.php:1342
469
+ msgid "Enable following post types"
470
+ msgstr ""
471
+
472
+ #: src/class-bwp-gxs.php:1323
473
+ #, fuzzy
474
+ msgid "Enable following sitemaps"
475
+ msgstr "Permite logarea?"
476
+
477
+ #: src/class-bwp-gxs.php:1325
478
+ msgid "Enable following taxonomies"
479
+ msgstr ""
480
+
481
+ #: src/class-bwp-gxs.php:1641
482
+ msgid "Enable for following post types"
483
+ msgstr ""
484
+
485
+ #: src/class-bwp-gxs.php:1653
486
+ msgid "Enable keywords support"
487
+ msgstr ""
488
+
489
+ #: src/class-bwp-gxs.php:1925
490
+ #, fuzzy
491
+ msgid "Enable message log"
492
+ msgstr "Permite logarea?"
493
+
494
+ #: src/class-bwp-gxs.php:1652
495
+ msgid "Enable multi-term support"
496
+ msgstr ""
497
+
498
+ #: src/class-bwp-gxs.php:1914
499
+ msgid "Enable multisite robots.txt support"
500
+ msgstr ""
501
+
502
+ #: src/class-bwp-gxs.php:1340 src/class-bwp-gxs.php:1644
503
+ #, fuzzy
504
+ msgid "Enable pinging"
505
+ msgstr "Permite logarea?"
506
+
507
+ #: src/class-bwp-gxs.php:1913
508
+ msgid "Enable robots.txt support"
509
+ msgstr ""
510
+
511
+ #: src/class-bwp-gxs.php:1723
512
+ msgid "Enable this if you have posts assigned to more than one terms."
513
+ msgstr ""
514
+
515
+ #: src/class-bwp-gxs.php:3647
516
+ msgid "Enable/disable sitemaps via <em>BWP Sitemaps >> XML Sitemaps</em>."
517
+ msgstr ""
518
+
519
+ #: src/class-bwp-gxs.php:1700
520
+ msgid "Exclude"
521
+ msgstr ""
522
+
523
+ #: src/class-bwp-gxs.php:1385
524
+ #, php-format
525
+ msgid ""
526
+ "Exclude individual items for each sitemap. You can also use <a href="
527
+ "\"%s#exclude-items\" target=\"_blank\">filters</a> to exclude items "
528
+ "programmatically."
529
+ msgstr ""
530
+
531
+ #: src/class-bwp-gxs.php:1326
532
+ msgid "Exclude items"
533
+ msgstr ""
534
+
535
+ #: src/class-bwp-gxs.php:1327
536
+ msgid "Exclude posts"
537
+ msgstr ""
538
+
539
+ #: src/class-bwp-gxs.php:1329
540
+ msgid "Exclude posts by terms"
541
+ msgstr ""
542
+
543
+ #: src/templates/provider/admin/exclude-posts.html.php:12
544
+ #: src/templates/provider/admin/exclude-terms.html.php:12
545
+ msgid "Exclude selected items"
546
+ msgstr ""
547
+
548
+ #: src/class-bwp-gxs.php:1328
549
+ msgid "Exclude terms"
550
+ msgstr ""
551
+
552
+ #: src/class-bwp-gxs.php:1543
553
+ #, fuzzy
554
+ msgid ""
555
+ "Expect an absolute URL, e.g. <code>http://example.com/my-stylesheet.xsl</"
556
+ "code>. You must also have a stylesheet for the sitemap index that can be "
557
+ "accessed through the above URL, e.g. <code>my-stylesheet.xsl</code> and "
558
+ "<code>my-stylesheetindex.xsl</code>. Leave blank to use provided stylesheets."
559
+ msgstr ""
560
+ "ar trebui sa fie un URL absolut, de ex. <code>http://example.com/my-"
561
+ "stylesheet.xsl</code>. Trebuie sa ai un stylesheet pentru sitemapindex care "
562
+ "poate fi accesat prin URL-ul de mai sus, de ex. <code>my-stylesheet.xsl</"
563
+ "code> si <code>my-stylesheetindex.xsl</code>). Lasa spatiul gol daca nu "
564
+ "folosesti."
565
+
566
+ #: src/class-bwp-gxs.php:2045
567
+ #, fuzzy
568
+ msgid ""
569
+ "Expect an absolute path to a writable directory (i.e. CHMOD to 755 or 777). "
570
+ msgstr ""
571
+ "Directorul de cache trebuie sa fie \"writable\" (i.e. CHMOD to 755 or 777)."
572
+
573
+ #: src/class-bwp-gxs.php:2056
574
+ msgid ""
575
+ "Expect an absolute path to the directory where you put your custom modules "
576
+ "(e.g. <code>/home/mysite/public_html/gxs-modules/</code>). "
577
+ msgstr ""
578
+
579
+ #: src/class-bwp-gxs.php:1971
580
+ #, php-format
581
+ msgid ""
582
+ "Extend this plugin using customizable modules. More info <a href=\"%s#module-"
583
+ "api\">here</a>."
584
+ msgstr ""
585
+
586
+ #: src/class-bwp-gxs.php:338 src/class-bwp-gxs.php:990
587
+ msgid "Extensions"
588
+ msgstr ""
589
+
590
+ #: src/class-bwp-gxs.php:1457
591
+ msgid "External (non-WordPress) pages."
592
+ msgstr ""
593
+
594
+ #: src/class-bwp-gxs.php:3094
595
+ msgid "External page"
596
+ msgstr ""
597
+
598
+ #: src/handler/ajax/external-page.php:131
599
+ msgid "External page has been successfully added/updated."
600
+ msgstr ""
601
+
602
+ #: src/class-bwp-gxs.php:1330 src/class-bwp-gxs.php:1397
603
+ msgid "External pages"
604
+ msgstr ""
605
+
606
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:371
607
+ msgid "FAQ"
608
+ msgstr ""
609
+
610
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:409
611
+ msgid "Five cups! $25.00"
612
+ msgstr ""
613
+
614
+ #: src/class-bwp-gxs.php:2348
615
+ #, fuzzy
616
+ msgid "Flush Cache"
617
+ msgstr "Curata cacge"
618
+
619
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:548
620
+ msgid "Follow"
621
+ msgstr ""
622
+
623
+ #: src/class-bwp-gxs.php:1519
624
+ msgid ""
625
+ "For a multi-site installation of WordPress, this sitemap will list all "
626
+ "appropriate blogs' addresses within your network, not just the main blog's."
627
+ msgstr ""
628
+
629
+ #: src/class-bwp-gxs.php:1238
630
+ #, php-format
631
+ msgid ""
632
+ "For more details, see <a target=\"_blank\" href=\"%1$s\">this article</a>."
633
+ msgstr ""
634
+
635
+ #: src/class-bwp-gxs.php:1909
636
+ msgid "Formatting"
637
+ msgstr ""
638
+
639
+ #: src/class-bwp-gxs.php:1321
640
+ #, fuzzy
641
+ msgid "Generated Sitemaps"
642
+ msgstr "Ce sunt sitemap-urile?"
643
+
644
+ #: src/templates/provider/admin/news-contents.html.php:11
645
+ msgid "Genres"
646
+ msgstr ""
647
+
648
+ #: src/class-bwp-gxs.php:1332
649
+ msgid "Global limit"
650
+ msgstr ""
651
+
652
+ #: src/class-bwp-gxs.php:1464
653
+ msgid "Google"
654
+ msgstr "Google"
655
+
656
+ #: src/class-bwp-gxs.php:1639
657
+ #, fuzzy
658
+ msgid "Google Image Sitemap"
659
+ msgstr "BWP Google XML Sitemaps"
660
+
661
+ #: src/class-bwp-gxs.php:1642
662
+ #, fuzzy
663
+ msgid "Google News Sitemap"
664
+ msgstr "BWP Google XML Sitemaps"
665
+
666
+ #: src/class-bwp-gxs.php:3082
667
+ msgid "Google News posts"
668
+ msgstr ""
669
+
670
+ #: src/class-bwp-gxs.php:2332
671
+ #, php-format
672
+ msgid ""
673
+ "Google News sitemap could not be generated, please check <a href=\"%s"
674
+ "\">Sitemap Log</a> for possible errors."
675
+ msgstr ""
676
+
677
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:374
678
+ msgid "Got a problem with this plugin? Please say it out loud!"
679
+ msgstr ""
680
+
681
+ #: src/templates/provider/admin/exclude-posts.html.php:27
682
+ #: src/templates/provider/admin/exclude-terms.html.php:27
683
+ msgid "ID"
684
+ msgstr ""
685
+
686
+ #: src/class-bwp-gxs.php:1812
687
+ msgid ""
688
+ "If you enable the \"Google Image Extension\" for selected post type, "
689
+ "featured image will also be added automatically to the news sitemap."
690
+ msgstr ""
691
+
692
+ #: src/class-bwp-gxs.php:2038
693
+ #, php-format
694
+ msgid ""
695
+ "If you have for example 50 blogs, 50 sitemap index entries will be added to "
696
+ "your primary blog's <a href=\"%s\" target=\"_blank\">robots.txt</a>."
697
+ msgstr ""
698
+
699
+ #: src/class-bwp-gxs.php:2027
700
+ #, fuzzy, php-format
701
+ msgid ""
702
+ "If you're on a Multi-site installation with <strong>Sub-domain</strong> "
703
+ "enabled, each blog will have its own robots.txt. Blogs in <strong>sub-"
704
+ "directory</strong> will not, however. Please read the <a href=\"%s#robots.txt"
705
+ "\" target=\"_blank\">documentation</a> for more info."
706
+ msgstr ""
707
+ "Daca folosesti o versiune Multi-site pe un subdomeniu, fiecare site va avea "
708
+ "robots.txt al sau, iar site-urile din subdirectoare nu. Va rog cititi <a "
709
+ "href=\"%s#toc-robots\" target=\"_blank\">documentatia</a> pentru mai multe "
710
+ "informatii."
711
+
712
+ #: src/templates/provider/admin/external-page-form.html.php:55
713
+ #: src/class-bwp-gxs.php:1770
714
+ msgid "Important"
715
+ msgstr ""
716
+
717
+ #: src/class-bwp-gxs.php:1699
718
+ msgid "Include"
719
+ msgstr ""
720
+
721
+ #: src/handler/ajax/external-page.php:91
722
+ msgid "Invalid frequency or priority."
723
+ msgstr ""
724
+
725
+ #: src/class-bwp-gxs.php:1187
726
+ msgid "It appears that no sitemap has been generated yet"
727
+ msgstr ""
728
+
729
+ #: src/class-bwp-gxs.php:1331
730
+ msgid "Item limits"
731
+ msgstr ""
732
+
733
+ #: src/class-bwp-gxs.php:1654
734
+ msgid "Keyword source"
735
+ msgstr ""
736
+
737
+ #: src/templates/logger/admin/sitemap-log.html.php:11
738
+ msgid "Last generated on"
739
+ msgstr ""
740
+
741
+ #: src/templates/provider/admin/external-pages.html.php:25
742
+ msgid "Last modified"
743
+ msgstr ""
744
+
745
+ #: src/templates/provider/admin/external-page-form.html.php:46
746
+ msgid "Last modified (time is optional)"
747
+ msgstr ""
748
+
749
+ #: src/class-bwp-gxs.php:1766
750
+ #, fuzzy, php-format
751
+ msgid "Learn more about <a href=\"%s\" target=\"_blank\">Image sitemaps</a>."
752
+ msgstr "Yahoo &mdash; <a href=\"%s\" target=\"_blank\">important</a>"
753
+
754
+ #: src/class-bwp-gxs.php:2049
755
+ #, php-format
756
+ msgid "Leave empty to use <code>%s</code>."
757
+ msgstr ""
758
+
759
+ #: src/class-bwp-gxs.php:1405
760
+ msgid "Limit the number of items to output in one sitemap. "
761
+ msgstr ""
762
+
763
+ #: src/class-bwp-gxs.php:1985
764
+ #, php-format
765
+ msgid ""
766
+ "Log useful messages when sitemaps are generated. The log can be viewed <a "
767
+ "href=\"%s\">here</a>."
768
+ msgstr ""
769
+
770
+ #: src/class-bwp-gxs.php:2132
771
+ msgid ""
772
+ "Logging is not currently enabled. You can enable this feature by checking "
773
+ "\"Enable logging\" in <strong>XML Sitemaps >> Sitemap log & debug</strong>."
774
+ msgstr ""
775
+
776
+ #: src/class-bwp-gxs.php:1344
777
+ msgid "Look and Feel"
778
+ msgstr ""
779
+
780
+ #: src/templates/logger/admin/sitemap-log.html.php:23
781
+ #: src/templates/logger/admin/message-log.html.php:11
782
+ #, fuzzy
783
+ msgid "M d, Y h:i:s A"
784
+ msgstr "M j, Y : H:i:s"
785
+
786
+ #: src/class-bwp-gxs.php:1345
787
+ msgid "Make sitemaps look pretty"
788
+ msgstr ""
789
+
790
+ #: src/class-bwp-gxs.php:1475
791
+ msgid "Maximum is <strong>50,000</strong>. Set to 0 to use the Global limit."
792
+ msgstr ""
793
+
794
+ #: src/class-bwp-gxs.php:1470
795
+ msgid ""
796
+ "Maximum is <strong>50,000</strong>. This setting is applied to all sitemaps."
797
+ msgstr ""
798
+
799
+ #: src/class-bwp-gxs.php:2002
800
+ msgid ""
801
+ "Maximum number of items to fetch in each query to database. This helps when "
802
+ "a sitemap has thousands of items and host is low on memory."
803
+ msgstr ""
804
+
805
+ #: src/class-bwp-gxs.php:2118
806
+ msgid "Message Log"
807
+ msgstr ""
808
+
809
+ #: src/class-bwp-gxs.php:1338
810
+ msgid "Minimum priority"
811
+ msgstr "Prioritate minima"
812
+
813
+ #: src/templates/provider/admin/news-contents.html.php:9
814
+ #: src/templates/provider/admin/exclude-terms.html.php:28
815
+ #: src/templates/logger/admin/sitemap-log.html.php:10
816
+ msgid "Name"
817
+ msgstr ""
818
+
819
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:503
820
+ msgid "Need a highly customizable theme?"
821
+ msgstr ""
822
+
823
+ #: src/class-bwp-gxs.php:1648
824
+ #, fuzzy
825
+ msgid "News age"
826
+ msgstr "Ce sunt sitemap-urile?"
827
+
828
+ #: src/class-bwp-gxs.php:1647
829
+ msgid "News language"
830
+ msgstr ""
831
+
832
+ #: src/class-bwp-gxs.php:1646
833
+ msgid "News name"
834
+ msgstr ""
835
+
836
+ #: src/class-bwp-gxs.php:1649
837
+ msgid "News post type"
838
+ msgstr ""
839
+
840
+ #: src/class-bwp-gxs.php:1650
841
+ msgid "News taxonomy"
842
+ msgstr ""
843
+
844
+ #: src/class-bwp-gxs.php:1651
845
+ msgid "News terms and genres"
846
+ msgstr ""
847
+
848
+ #: src/templates/logger/admin/message-log.html.php:23
849
+ msgid "No log yet!"
850
+ msgstr "Nimic logat inca!"
851
+
852
+ #: src/class-bwp-gxs.php:1745
853
+ msgid "Note:"
854
+ msgstr ""
855
+
856
+ #: src/class-bwp-gxs.php:2458
857
+ msgid "Notice"
858
+ msgstr "Notificare"
859
+
860
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:410
861
+ msgid "One LL-cup!!! $50.00"
862
+ msgstr ""
863
+
864
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:407
865
+ msgid "One cup $5.00"
866
+ msgstr ""
867
+
868
+ #: src/class-bwp-gxs.php:2060
869
+ msgid ""
870
+ "Override a built-in module by having a module with the same filename in "
871
+ "specified directory."
872
+ msgstr ""
873
+
874
+ #: src/class-bwp-gxs.php:3096
875
+ msgid "Page"
876
+ msgstr ""
877
+
878
+ #: src/class-bwp-gxs.php:1343
879
+ msgid "Ping limit"
880
+ msgstr ""
881
+
882
+ #: src/class-bwp-gxs.php:3985
883
+ #, php-format
884
+ msgid ""
885
+ "Ping limit for today to <em>%s</em> has been reached, consider increasing "
886
+ "the ping limit via <em>XML Sitemaps >> Ping search engines >> \"Ping limit "
887
+ "for each search engine\"</em>"
888
+ msgstr ""
889
+
890
+ #: src/class-bwp-gxs.php:1339
891
+ #, fuzzy
892
+ msgid "Ping search engines"
893
+ msgstr "Ping motoarelor de cautare"
894
+
895
+ #: src/class-bwp-gxs.php:1722
896
+ msgid "Ping search engines when a news article is published."
897
+ msgstr ""
898
+
899
+ #: src/class-bwp-gxs.php:1463
900
+ #, fuzzy
901
+ msgid "Ping search engines when you publish new posts."
902
+ msgstr ""
903
+ "Motoarele de cautare selectate vor fi ping-uite cand publicati posturi noi."
904
+
905
+ #: src/class-bwp-gxs.php:3964
906
+ #, fuzzy, php-format
907
+ msgid "Pinged <em>%s</em> with <em>%s</em> successfully!"
908
+ msgstr "S-a facut ping cu succes la %s !"
909
+
910
+ #: src/class-bwp-gxs.php:3658
911
+ msgid ""
912
+ "Please make sure that you have at least one sitemap enabled in <em>BWP "
913
+ "Sitemaps >> XML Sitemaps >> Sitemaps to generate</em>."
914
+ msgstr ""
915
+
916
+ #: src/class-bwp-gxs.php:1759
917
+ #, php-format
918
+ msgid ""
919
+ "Please make sure you have enabled the <a href=\"%s\" target=\"_blank\">Post "
920
+ "Thumbnails feature</a> in your theme before enabling this extension."
921
+ msgstr ""
922
+
923
+ #: src/handler/ajax/external-page.php:107
924
+ msgid "Please provide a valid last modified date time."
925
+ msgstr ""
926
+
927
+ #: src/handler/ajax/external-page.php:63
928
+ msgid "Please provide all required fields."
929
+ msgstr ""
930
+
931
+ #: src/handler/ajax/external-page.php:78
932
+ #, php-format
933
+ msgid "Please provide an absolute URL under your domain, for example: %s."
934
+ msgstr ""
935
+
936
+ #: src/class-bwp-gxs.php:2484 src/class-bwp-gxs.php:2498
937
+ msgid "Please select at least one item to exclude."
938
+ msgstr ""
939
+
940
+ #: src/templates/provider/admin/external-page-form.html.php:56
941
+ #, php-format
942
+ msgid ""
943
+ "Please specify \"Last modified\" in your <a href=\"%s\" target=\"_blank"
944
+ "\">local timezone</a>."
945
+ msgstr ""
946
+
947
+ #: src/class-bwp-gxs.php:1780
948
+ #, php-format
949
+ msgid ""
950
+ "Please take a look at <a href=\"%s\" target=\"_blank\">Google News's "
951
+ "guidelines</a> before enabling this feature."
952
+ msgstr ""
953
+
954
+ #: src/class-bwp-gxs.php:1804
955
+ #, php-format
956
+ msgid ""
957
+ "Please take a look at <a href=\"%s\" target=\"_blank\">Google News's "
958
+ "guidelines</a> for more info."
959
+ msgstr ""
960
+
961
+ #: vendor/kminh/bwp-framework/src/class-bwp-option-page-v3.php:93
962
+ msgid "Plugin Configurations"
963
+ msgstr "Configurarea plugin-ului"
964
+
965
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:375
966
+ msgid "Plugin Support"
967
+ msgstr ""
968
+
969
+ #: src/class-bwp-gxs.php:3087
970
+ msgid "Post"
971
+ msgstr ""
972
+
973
+ #: src/class-bwp-gxs.php:1984
974
+ #, fuzzy
975
+ msgid ""
976
+ "Print useful information such as build time, memory usage, SQL queries, etc."
977
+ msgstr ""
978
+ "iti spune informatii utile, precum timpul in care a fost construit sitemap-"
979
+ "ul, memoria folosita, interogari SQL, etc."
980
+
981
+ #: src/templates/provider/admin/external-pages.html.php:24
982
+ #: src/templates/provider/admin/external-page-form.html.php:37
983
+ msgid "Priority"
984
+ msgstr ""
985
+
986
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:378
987
+ msgid "Rate this plugin 5 stars if you like it, thank you!"
988
+ msgstr ""
989
+
990
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:379
991
+ msgid "Rate this plugin 5 stars!"
992
+ msgstr ""
993
+
994
+ #: src/class-bwp-gxs.php:1981
995
+ #, fuzzy
996
+ msgid ""
997
+ "Re-generate sitemap cache when expired. If you disable this, remember to "
998
+ "manually flush the cache once in a while."
999
+ msgstr ""
1000
+ "cand un sitemap din cache expira, pluginul il va genera din nou. Daca "
1001
+ "dezactivati functia, va trebui sa curatat cache-ul din cand in cand."
1002
+
1003
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:370
1004
+ msgid "Read this first before asking any question!"
1005
+ msgstr ""
1006
+
1007
+ #: src/templates/provider/admin/exclude-posts.html.php:29
1008
+ #: src/templates/provider/admin/exclude-terms.html.php:29
1009
+ msgid "Remove"
1010
+ msgstr ""
1011
+
1012
+ #: src/class-bwp-gxs.php:557
1013
+ msgid "Remove from exclusion"
1014
+ msgstr ""
1015
+
1016
+ #: src/class-bwp-gxs.php:562
1017
+ msgid "Remove this page"
1018
+ msgstr ""
1019
+
1020
+ #: src/class-bwp-gxs.php:3489
1021
+ #, fuzzy, php-format
1022
+ msgid "Requested sitemap (<em>%s.xml</em>) was not found or not enabled."
1023
+ msgstr "Modulul cerut (<em>%s</em>) nu a fost gasit."
1024
+
1025
+ #: src/templates/provider/admin/external-page-modal.html.php:27
1026
+ msgid "Reset"
1027
+ msgstr ""
1028
+
1029
+ #: src/class-bwp-gxs.php:1912
1030
+ msgid "Robots.txt"
1031
+ msgstr ""
1032
+
1033
+ #: src/templates/provider/admin/external-page-modal.html.php:33
1034
+ #: vendor/kminh/bwp-framework/src/class-bwp-option-page-v3.php:306
1035
+ msgid "Save Changes"
1036
+ msgstr "Salveaza schimbarile"
1037
+
1038
+ #: src/class-bwp-gxs.php:2346
1039
+ #, fuzzy
1040
+ msgid "Save Changes and Flush Cache"
1041
+ msgstr "Salveaza schimbarile"
1042
+
1043
+ #: src/class-bwp-gxs.php:1341
1044
+ msgid "Search engines to ping"
1045
+ msgstr ""
1046
+
1047
+ #: src/templates/provider/admin/exclude-posts.html.php:5
1048
+ msgid "Search for posts to exclude"
1049
+ msgstr ""
1050
+
1051
+ #: src/templates/provider/admin/exclude-terms.html.php:5
1052
+ msgid "Search for terms to exclude"
1053
+ msgstr ""
1054
+
1055
+ #: src/templates/provider/admin/news-contents.html.php:8
1056
+ msgid "Select"
1057
+ msgstr ""
1058
+
1059
+ #: src/class-bwp-gxs.php:1248
1060
+ msgid "Select a post type"
1061
+ msgstr ""
1062
+
1063
+ #: src/class-bwp-gxs.php:1262
1064
+ msgid "Select a taxonomy"
1065
+ msgstr ""
1066
+
1067
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:386
1068
+ msgid "Send"
1069
+ msgstr ""
1070
+
1071
+ #: src/class-bwp-gxs.php:1794
1072
+ msgid ""
1073
+ "Set a different name for your news sitemap. By default, your <em>Site Title</"
1074
+ "em> is used."
1075
+ msgstr ""
1076
+
1077
+ #: src/class-bwp-gxs.php:1801
1078
+ msgid "Set to <code>0</code> to disable (not recommended)."
1079
+ msgstr ""
1080
+
1081
+ #: src/class-bwp-gxs.php:1406
1082
+ #, php-format
1083
+ msgid ""
1084
+ "Setting too high limits might lead to white page error due to timeout or "
1085
+ "memory issue. Refer to this plugin's <a target=\"_blank\" href=\"%s\">FAQ "
1086
+ "section</a> for more info."
1087
+ msgstr ""
1088
+
1089
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:1315
1090
+ msgid "Settings"
1091
+ msgstr "Setari"
1092
+
1093
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:431
1094
+ msgid "Share the love for this plugin!"
1095
+ msgstr ""
1096
+
1097
+ #: src/templates/provider/admin/exclude-posts.html.php:17
1098
+ #: src/templates/provider/admin/exclude-terms.html.php:17
1099
+ msgid "Show/Hide excluded items"
1100
+ msgstr ""
1101
+
1102
+ #: src/templates/provider/admin/external-pages.html.php:12
1103
+ msgid "Show/Hide external pages"
1104
+ msgstr ""
1105
+
1106
+ #: src/class-bwp-gxs.php:1737
1107
+ msgid "Show/Hide selected terms"
1108
+ msgstr ""
1109
+
1110
+ #: src/class-bwp-gxs.php:1462
1111
+ msgid "Site Address"
1112
+ msgstr ""
1113
+
1114
+ #: src/class-bwp-gxs.php:1915
1115
+ #, fuzzy
1116
+ msgid "Sitemap Cache"
1117
+ msgstr "Statistici sitemap"
1118
+
1119
+ #: src/class-bwp-gxs.php:1645
1120
+ #, fuzzy
1121
+ msgid "Sitemap Contents"
1122
+ msgstr "Generator de sitemap"
1123
+
1124
+ #: src/class-bwp-gxs.php:350 src/class-bwp-gxs.php:1006
1125
+ #, fuzzy
1126
+ msgid "Sitemap Log"
1127
+ msgstr "Log-ul generatorului de sitemap"
1128
+
1129
+ #: src/class-bwp-gxs.php:1920
1130
+ #, fuzzy
1131
+ msgid "Sitemap modules"
1132
+ msgstr "Generator de sitemap"
1133
+
1134
+ #: src/class-bwp-gxs.php:1461
1135
+ msgid ""
1136
+ "Sitemaps like <code>post.xml</code> are split into <code>post_part1.xml</"
1137
+ "code>, <code>post_part2.xml</code>, etc. when limit reached."
1138
+ msgstr ""
1139
+
1140
+ #: src/class-bwp-gxs.php:1322
1141
+ #, fuzzy
1142
+ msgid "Sitemaps to generate"
1143
+ msgstr "Generator de sitemap"
1144
+
1145
+ #: src/class-bwp-gxs.php:1459
1146
+ #, fuzzy
1147
+ msgid "Some copyrighted info is added to your sitemaps."
1148
+ msgstr "unele informatii de copyright sunt adaugate sitemap-ului. Mersi! "
1149
+
1150
+ #: src/class-bwp-gxs.php:1333
1151
+ msgid "Split <strong>post-based</strong> sitemaps"
1152
+ msgstr ""
1153
+
1154
+ #: src/class-bwp-gxs.php:1334
1155
+ msgid "Split limit"
1156
+ msgstr ""
1157
+
1158
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:541
1159
+ msgid "Subscribe"
1160
+ msgstr ""
1161
+
1162
+ #: src/class-bwp-gxs.php:2472
1163
+ #, php-format
1164
+ msgid "Successfully excluded <strong>%d</strong> items."
1165
+ msgstr ""
1166
+
1167
+ #: src/class-bwp-gxs.php:3627
1168
+ #, fuzzy, php-format
1169
+ msgid ""
1170
+ "Successfully generated <em>%s.xml</em> using custom module file <em>%s</em>."
1171
+ msgstr "<em>%s.xml</em> a fost generat cu succes folosit modulul <em>%s</em>."
1172
+
1173
+ #: src/class-bwp-gxs.php:3628
1174
+ #, fuzzy, php-format
1175
+ msgid "Successfully generated <em>%s.xml</em> using module file <em>%s</em>."
1176
+ msgstr "<em>%s.xml</em> a fost generat cu succes folosit modulul <em>%s</em>."
1177
+
1178
+ #: src/class-bwp-gxs.php:3271
1179
+ #, php-format
1180
+ msgid "Successfully served a cached version of <em>%s.xml</em>."
1181
+ msgstr "S-a servit cu succes o versiune din cache a <em>%s.xml</em>."
1182
+
1183
+ #: src/class-bwp-gxs.php:1454
1184
+ #, fuzzy
1185
+ msgid "Taxonomy (including custom taxonomies)"
1186
+ msgstr "sitemap al taxonomiilor, inclusiv cele customizate"
1187
+
1188
+ #: src/class-bwp-gxs.php:2416
1189
+ msgid "There are no cached sitemaps to flush."
1190
+ msgstr ""
1191
+
1192
+ #: src/class-bwp-gxs.php:3652
1193
+ #, php-format
1194
+ msgid "There are no public <em>%s</em>."
1195
+ msgstr ""
1196
+
1197
+ #: src/class-bwp-gxs.php:3597
1198
+ #, php-format
1199
+ msgid ""
1200
+ "There is no class named <strong>%s</strong> in the module file <strong>%s</"
1201
+ "strong>."
1202
+ msgstr ""
1203
+ "Nu exista o clasa denumita <strong>%s</strong> in modulul <strong>%s</"
1204
+ "strong>."
1205
+
1206
+ #: src/class-bwp-gxs.php:558 src/class-bwp-gxs.php:563
1207
+ msgid "This action can not be undone, are you sure?"
1208
+ msgstr ""
1209
+
1210
+ #: src/class-bwp-gxs.php:1771
1211
+ msgid ""
1212
+ "This extension has an effect on performance, if you notice any slowdown "
1213
+ "please try disabling it first."
1214
+ msgstr ""
1215
+
1216
+ #: src/class-bwp-gxs.php:1827
1217
+ msgid ""
1218
+ "This ping works separately from the sitemap index ping, and only occurs when "
1219
+ "you publish an article in one of the news categories set below."
1220
+ msgstr ""
1221
+
1222
+ #: src/class-bwp-gxs.php:379
1223
+ #, php-format
1224
+ msgid ""
1225
+ "This sitemap was originally generated in %s second(s) (Memory usage: %s) - "
1226
+ "%s queries - %s URL(s) listed"
1227
+ msgstr ""
1228
+ "Acest sitemap a fost generat in %s secunde (Memorie folosita: %s) - %s "
1229
+ "interogari - %s URL(-uri) listate"
1230
+
1231
+ #: src/templates/provider/admin/exclude-posts.html.php:28
1232
+ msgid "Title"
1233
+ msgstr ""
1234
+
1235
+ #: src/class-bwp-gxs.php:1231
1236
+ #, fuzzy, php-format
1237
+ msgid ""
1238
+ "To proceed, submit your <a href=\"%s\" target=\"_blank\">sitemapindex</a> to "
1239
+ "major search engines like <a href=\"%s\" target=\"_blank\">Google</a> or <a "
1240
+ "href=\"%s\" target=\"_blank\">Bing</a>."
1241
+ msgstr ""
1242
+ "<em>Inscrie sitemapindex in motoarele de cautare mari precum <a href=\"%s\" "
1243
+ "target=\"_blank\">Google</a>, <a href=\"%s\" target=\"_blank\">Yahoo</a>, <a "
1244
+ "href=\"%s\" target=\"_blank\">Bing</a> sau <a href=\"%s\" target=\"_blank"
1245
+ "\">Ask</a>.</em>"
1246
+
1247
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:408
1248
+ msgid "Two cups $10.00"
1249
+ msgstr ""
1250
+
1251
+ #: src/class-bwp-gxs.php:3959
1252
+ msgid "Unknown response code from search engines. Ping failed."
1253
+ msgstr ""
1254
+
1255
+ #: src/templates/provider/admin/external-pages.html.php:22
1256
+ msgid "Url"
1257
+ msgstr ""
1258
+
1259
+ #: src/class-bwp-gxs.php:1910
1260
+ msgid "Use GMT for Last Modified date"
1261
+ msgstr ""
1262
+
1263
+ #: src/class-bwp-gxs.php:1979
1264
+ #, php-format
1265
+ msgid ""
1266
+ "Use gzip to make sitemaps ~70% smaller. If you see an error after enabling "
1267
+ "this, it's very likely that you have gzip active on your server already."
1268
+ msgstr ""
1269
+
1270
+ #: src/class-bwp-gxs.php:1706
1271
+ msgid "Use the selected \"News taxonomy\""
1272
+ msgstr ""
1273
+
1274
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:416
1275
+ msgid "Via"
1276
+ msgstr ""
1277
+
1278
+ #: src/templates/provider/admin/news-contents.html.php:13
1279
+ #: vendor/kminh/bwp-framework/src/class-bwp-option-page-v3.php:828
1280
+ msgid "View more info in a separate tab"
1281
+ msgstr ""
1282
+
1283
+ #: src/class-bwp-gxs.php:2185
1284
+ msgid "Warning"
1285
+ msgstr "Atentie"
1286
+
1287
+ #: src/class-bwp-gxs.php:1525
1288
+ msgid ""
1289
+ "When a post belongs to multiple terms, it will be excluded if <strong>ANY</"
1290
+ "strong> of those terms is currently excluded."
1291
+ msgstr ""
1292
+
1293
+ #: src/class-bwp-gxs.php:1986
1294
+ msgid ""
1295
+ "When this is on, NO caching is used and <code>WP_DEBUG</code> is respected, "
1296
+ "useful when developing new modules."
1297
+ msgstr ""
1298
+
1299
+ #: src/class-bwp-gxs.php:1987
1300
+ #, php-format
1301
+ msgid ""
1302
+ "When this is on, NO headers are sent and sitemaps are NOT compressed, useful "
1303
+ "when debugging <em>Content Encoding Error</em>. More info <a href="
1304
+ "\"%s#sitemap-log-debug\" target=\"_blank\">here</a>."
1305
+ msgstr ""
1306
+
1307
+ #: src/class-bwp-gxs.php:1421
1308
+ #, fuzzy
1309
+ msgid ""
1310
+ "Whenever you post something new to your blog, you can <em>ping</em> search "
1311
+ "engines with your sitemap index to tell them your blog just got updated."
1312
+ msgstr ""
1313
+ "<em>Acum, cand scrii ceva nou pe blog, poti <em>pingui</em> motoarele de "
1314
+ "cautare, spunandu-le ca blogul tau a fost actualizat. Ping-ul ar putea fi "
1315
+ "mai putin eficient decat crezi dar aceasta functionalitate ar trebui "
1316
+ "activata.</em>"
1317
+
1318
+ #: src/class-bwp-gxs.php:1959
1319
+ #, php-format
1320
+ msgid ""
1321
+ "WordPress generates a %svirtual robots.txt%s file for your blog by default. "
1322
+ "You can add the sitemap index file to that robots.txt file using settings "
1323
+ "below."
1324
+ msgstr ""
1325
+
1326
+ #: src/class-bwp-gxs.php:963
1327
+ msgid "XML Sitemap Log"
1328
+ msgstr ""
1329
+
1330
+ #: src/class-bwp-gxs.php:335 src/class-bwp-gxs.php:942
1331
+ #: src/class-bwp-gxs.php:982
1332
+ #, fuzzy
1333
+ msgid "XML Sitemaps"
1334
+ msgstr "BWP Google XML Sitemaps"
1335
+
1336
+ #: src/class-bwp-gxs.php:956
1337
+ #, fuzzy
1338
+ msgid "XML Sitemaps - Advanced Options"
1339
+ msgstr "Generator de sitemap"
1340
+
1341
+ #: src/class-bwp-gxs.php:949
1342
+ #, fuzzy
1343
+ msgid "XML Sitemaps - Extensions"
1344
+ msgstr "Generator de sitemap"
1345
+
1346
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:565
1347
+ #, php-format
1348
+ msgid "You are using version %s!"
1349
+ msgstr "Folositi versiunea %s!"
1350
+
1351
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:391
1352
+ #, fuzzy
1353
+ msgid ""
1354
+ "You can buy me some special coffees if you appreciate my work, thank you!"
1355
+ msgstr "Imi poti face cinste cu o cafea daca apreciezi munca mea, mersi!"
1356
+
1357
+ #: src/class-bwp-gxs.php:1748
1358
+ #, fuzzy, php-format
1359
+ msgid ""
1360
+ "You can only select post types that <a href=\"%s\" target=\"_blank\">support "
1361
+ "the thumbnail feature</a>."
1362
+ msgstr "Yahoo &mdash; <a href=\"%s\" target=\"_blank\">important</a>"
1363
+
1364
+ #: src/class-bwp-gxs.php:1980
1365
+ #, fuzzy
1366
+ msgid "Your sitemaps are generated and then cached to reduce unnecessary work."
1367
+ msgstr ""
1368
+ "sitemap-urile tale sunt generate apoi puse in cache pentru a nu incarca "
1369
+ "serverul"
1370
+
1371
+ #: src/class-bwp-gxs.php:1191
1372
+ msgid "click to generate your Sitemap Index"
1373
+ msgstr ""
1374
+
1375
+ #: src/class-bwp-gxs.php:1445 src/class-bwp-gxs.php:2013
1376
+ msgid "day(s)"
1377
+ msgstr "zi(le)"
1378
+
1379
+ #: src/class-bwp-gxs.php:1715
1380
+ #, fuzzy
1381
+ msgid "day(s)."
1382
+ msgstr "zi(le)"
1383
+
1384
+ #: src/class-bwp-gxs.php:2573
1385
+ #, fuzzy
1386
+ msgid "debugging was on"
1387
+ msgstr "(Debug-ul este activat)"
1388
+
1389
+ #: src/class-bwp-gxs.php:2572
1390
+ msgid "extra debugging was on"
1391
+ msgstr ""
1392
+
1393
+ #: src/class-bwp-gxs.php:1400
1394
+ msgid "filter"
1395
+ msgstr ""
1396
+
1397
+ #: src/class-bwp-gxs.php:1444 src/class-bwp-gxs.php:2012
1398
+ msgid "hour(s)"
1399
+ msgstr "ora(e)"
1400
+
1401
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:524
1402
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:534
1403
+ msgid "loading..."
1404
+ msgstr ""
1405
+
1406
+ #: src/class-bwp-gxs.php:1443 src/class-bwp-gxs.php:2011
1407
+ msgid "minute(s)"
1408
+ msgstr "minut(e)"
1409
+
1410
+ #: src/class-bwp-gxs.php:3073
1411
+ #, php-format
1412
+ msgid ""
1413
+ "news posts that are published within the last <strong>%d day(s)</strong>. To "
1414
+ "include news posts within a longer time period, change the \"News age\" "
1415
+ "setting via BWP Sitemaps >> Extensions >> Google News Sitemap >> Sitemap "
1416
+ "Contents"
1417
+ msgstr ""
1418
+
1419
+ #: src/class-bwp-gxs.php:1108
1420
+ msgid "overridden"
1421
+ msgstr ""
1422
+
1423
+ #: src/class-bwp-gxs.php:1442 src/class-bwp-gxs.php:2010
1424
+ msgid "second(s)"
1425
+ msgstr "secunda(e)"
1426
+
1427
+ #: src/class-bwp-gxs.php:1729
1428
+ msgid "selected terms."
1429
+ msgstr ""
1430
+
1431
+ #: src/class-bwp-gxs.php:1487
1432
+ msgid ""
1433
+ "time(s) per search engine per day. Increase this limit if you publish a lot "
1434
+ "of posts in a single day."
1435
+ msgstr ""
1436
+
1437
+ #: src/templates/provider/admin/external-page-modal.html.php:21
1438
+ msgid "working ..."
1439
+ msgstr ""
1440
+
1441
+ #~ msgid "%s"
1442
+ #~ msgstr "%s"
1443
+
1444
+ #~ msgid ""
1445
+ #~ "<a href=\"%s\" target=\"_blank\">%s</a> has been successfully built on "
1446
+ #~ "<strong>%s</strong>."
1447
+ #~ msgstr ""
1448
+ #~ "<a href=\"%s\" target=\"_blank\">%s</a> a fost creat cu succes pe <strong>"
1449
+ #~ "%s</strong>."
1450
+
1451
+ #, fuzzy
1452
+ #~ msgid ""
1453
+ #~ "<em>%s.xml</em> does not have any item. You can fix this easily by "
1454
+ #~ "excluding any post types / terms you do not use in <em>Sitemap Generator</"
1455
+ #~ "em> tab within your admin area. If you still see this error, consider "
1456
+ #~ "checking the module that generates this sitemap (<em>%s.php</em>)."
1457
+ #~ msgstr ""
1458
+ #~ "<em>%s.xml</em> este gol. Plugin-ul a afisat un header de 404 la motorul "
1459
+ #~ "de cautare care l-a cerut. Ar trebui sa verifici modulul care genereaza "
1460
+ #~ "sitemap-ul (<em>%s.php</em>)."
1461
+
1462
+ #~ msgid "<em>Basic information about all your sitemaps.</em>"
1463
+ #~ msgstr "<em>Informatii de baza despre sitemap-urile tale.</em>"
1464
+
1465
+ #~ msgid "<em>Cache your sitemaps for better performance.</em>"
1466
+ #~ msgstr "<em>Fa cache sitemap-ului pentru o mai buna performanta.</em>"
1467
+
1468
+ #~ msgid ""
1469
+ #~ "<em>This plugin uses modules to build sitemap data so it is recommended "
1470
+ #~ "that you extend this plugin using modules rather than hooks. Some of the "
1471
+ #~ "settings below only affect modules extending the base module class. Read "
1472
+ #~ "more about using modules <a href=\"%s#using-modules\">here</a>.</em>"
1473
+ #~ msgstr ""
1474
+ #~ "<em>Acest plugin foloseste module pentru a construi sitemap-ul deci este "
1475
+ #~ "recomandat sa extinzi plugin folosind module si nu hooks. Unele setari de "
1476
+ #~ "mai jos doar afecteaza modulele existente. Citeste mai mult despre module "
1477
+ #~ "<a href=\"%s#using-modules\">aici</a>.</em>"
1478
+
1479
+ #~ msgid ""
1480
+ #~ "After you activate this plugin, all sitemaps should be available right "
1481
+ #~ "away. The next step is to submit the sitemapindex to major search "
1482
+ #~ "engines. You only need the <strong>sitemapindex</strong> and nothing "
1483
+ #~ "else, those search engines will automatically recognize other included "
1484
+ #~ "sitemaps. You can read a small <a href=\"%s\">How-to</a> if you are "
1485
+ #~ "interested."
1486
+ #~ msgstr ""
1487
+ #~ "Dupa ce activezi acest plugin, toate sitemap-urile vor fi disponibile "
1488
+ #~ "imediat. Urmatorul pas este sa submiti sitemapindex in motoarele de "
1489
+ #~ "cautare. Nu ai nevoie decat de <strong>sitemapindex</strong> motoarele de "
1490
+ #~ "cautare vor recunoaste alte sitemap-uri incluse. Poti citi un mic <a href="
1491
+ #~ "\"%s\">ghid</a> daca te intereseaza."
1492
+
1493
+ #~ msgid "Ask.com"
1494
+ #~ msgstr "Ask.com"
1495
+
1496
+ #~ msgid "BWP Google XML Sitemaps Statistics"
1497
+ #~ msgstr "Statistici BWP Google XML Sitemaps"
1498
+
1499
+ #~ msgid "Cache directory (\"%s\") does not exist or is not writable."
1500
+ #~ msgstr "Directorul de cache (\"%s\") nu exista sau nu este accesibil."
1501
+
1502
+ #~ msgid ""
1503
+ #~ "Cache directory does not exist or is not writable. Please read more about "
1504
+ #~ "directory permission <a href='http://www.zzee.com/solutions/unix-"
1505
+ #~ "permissions.shtml'>here</a> (Unix)."
1506
+ #~ msgstr ""
1507
+ #~ "Directorul de cache nu exista sau nu este \"writable\". Va rugam citit "
1508
+ #~ "despre permisiunile directoarelor <a href='http://www.zzee.com/solutions/"
1509
+ #~ "unix-permissions.shtml'>aici</a> (Unix)."
1510
+
1511
+ #~ msgid ""
1512
+ #~ "Cache file for module <em>%s</em> is not found and will be built right "
1513
+ #~ "away."
1514
+ #~ msgstr ""
1515
+ #~ "Fisierul de cache pentru modulul <em>%s</em> nu a fost gasit si va fi "
1516
+ #~ "creat imediat."
1517
+
1518
+ #~ msgid "Cached sitemaps are stored in (auto detected)"
1519
+ #~ msgstr "Sitemap-urile din cache sunt stocate in (auto detectare)"
1520
+
1521
+ #~ msgid "Cached sitemaps will last for"
1522
+ #~ msgstr "Sitemap-urile din cache sunt valabile pana"
1523
+
1524
+ #~ msgid "Caching Options"
1525
+ #~ msgstr "Optiuni de cache"
1526
+
1527
+ #~ msgid ""
1528
+ #~ "Could not delete any cached sitemaps. Please manually check the cache "
1529
+ #~ "directory."
1530
+ #~ msgstr ""
1531
+ #~ "Nu s-au putut sterge sitemap-urile din cache. Va rugam verificati manual "
1532
+ #~ "directorul de cache."
1533
+
1534
+ #~ msgid ""
1535
+ #~ "Could not load module file: <strong>%s</strong> in both default and "
1536
+ #~ "custom module directory. Please recheck if that module file exists."
1537
+ #~ msgstr ""
1538
+ #~ "Nu a putut fi incarcat modulul: <strong>%s</strong> in directorul "
1539
+ #~ "prestabilit sau customizat. Va rog verificati daca modulul exista."
1540
+
1541
+ #~ msgid "Enable Gzip?"
1542
+ #~ msgstr "Activeaza Gzip?"
1543
+
1544
+ #~ msgid "Enable pinging functionality?"
1545
+ #~ msgstr "Activeaza functionalitate de ping"
1546
+
1547
+ #~ msgid "Enable pinging individual SE"
1548
+ #~ msgstr "Activeaza pinging invididual al motoarelor de cautare"
1549
+
1550
+ #~ msgid "Get no more than"
1551
+ #~ msgstr "Ia numai"
1552
+
1553
+ #, fuzzy
1554
+ #~ msgid ""
1555
+ #~ "In its simplest form, a Sitemap is an XML file that lists URLs for a site "
1556
+ #~ "along with additional metadata about each URL (when it was last updated, "
1557
+ #~ "how often it usually changes, and how important it is, relative to other "
1558
+ #~ "URLs in the site) so that search engines can more intelligently crawl the "
1559
+ #~ "site &mdash; <em>http://www.sitemaps.org/</em>"
1560
+ #~ msgstr ""
1561
+ #~ "In forma sa simpla, un sitemap e un fisier XML care listeaza toate URL-"
1562
+ #~ "urile unui site, impreuna cu meta data despre fiecare URL (cand a fost "
1563
+ #~ "actualizat, cat de des, importanta sa) pentru ca motoarele de cautare sa "
1564
+ #~ "indexeze mai bine site-ul - http://www.sitemaps.org/"
1565
+
1566
+ #~ msgid "In sitemapindex, include"
1567
+ #~ msgstr "In sitemapindex, include"
1568
+
1569
+ #~ msgid ""
1570
+ #~ "Input a full path to the directory where you put your own modules (e.g. "
1571
+ #~ "<code>/home/mysite/public_html/gxs-modules/</code>), you can also "
1572
+ #~ "override a built-in module by having a module with the same filename in "
1573
+ #~ "this directory. A filter is also available if you would like to use PHP "
1574
+ #~ "instead."
1575
+ #~ msgstr ""
1576
+ #~ "Introdu calea catre directoarele unde sunt modulele proprii (contoh "
1577
+ #~ "<code>/home/mysite/public_html/gxs-modules/</code>); poti suprascrie "
1578
+ #~ "modului preinstalat cu un modul avand acelasi nume. Un filtru este "
1579
+ #~ "disponibil daca doresti sa folosesti PHP."
1580
+
1581
+ #~ msgid "Loaded a custom module file: <strong>%s</strong>."
1582
+ #~ msgstr "A fost incarcat un modul customizat: <strong>%s</strong>."
1583
+
1584
+ #~ msgid "Loaded a custom sub-module file: <strong>%s</strong>."
1585
+ #~ msgstr "A fost incarcat un sub-modul customizat: <strong>%s</strong>."
1586
+
1587
+ #~ msgid ""
1588
+ #~ "Mapped sub-module file: <strong>%s</strong> is not available in both "
1589
+ #~ "default and custom module directory. The plugin will now try loading the "
1590
+ #~ "requested sub-module instead."
1591
+ #~ msgstr ""
1592
+ #~ "Sub-modului mapat: <strong>%s</strong> nu este disponibil in directorul "
1593
+ #~ "prestabilit sau customizat. Plugin-ul va incerca sa incarce modulul cerut."
1594
+
1595
+ #~ msgid ""
1596
+ #~ "Minor errors will be printed on screen. Also, when debug is on, no "
1597
+ #~ "caching is used, useful when you develop new modules."
1598
+ #~ msgstr ""
1599
+ #~ "Erori minore vor fi afisate. De asemenea, cand debugging-ul este activ "
1600
+ #~ "sau cand nu este facut cache."
1601
+
1602
+ #~ msgid "No additional load is needed so enabling this is recommended."
1603
+ #~ msgstr "Activarea acestei functii este recomandata."
1604
+
1605
+ #~ msgid ""
1606
+ #~ "Nothing here... yet! Try submitting your <a href=\"%s\">sitemapindex</a> "
1607
+ #~ "first!"
1608
+ #~ msgstr "Nimic aici... inca! Inscrie tu <a href=\"%s\">sitemap index</a> "
1609
+
1610
+ #~ msgid "Output no more than"
1611
+ #~ msgstr "Output pentru numai"
1612
+
1613
+ #~ msgid "Ping limit for today to %s has been reached, sorry!"
1614
+ #~ msgstr "Limita de ping pentru azi la %s a fost atinsa!"
1615
+
1616
+ #~ msgid "Show build stats in sitemaps?"
1617
+ #~ msgstr "Arata statisticile de la generare in sitemap-uri?"
1618
+
1619
+ #~ msgid "Style your sitemaps with an XSLT stylesheet?"
1620
+ #~ msgstr "Foloseste un stylesheet XSLT pentru sitemap-urile tale"
1621
+
1622
+ #~ msgid ""
1623
+ #~ "Sub-module file: <strong>%s</strong> is not available in both default and "
1624
+ #~ "custom module directory. The plugin will now try loading the parent "
1625
+ #~ "module instead."
1626
+ #~ msgstr ""
1627
+ #~ "Sub-modulul: <strong>%s</strong> nu este disponibil in directorul "
1628
+ #~ "prestabilit sau customizat. Plugin-ul va incerca sa incarce modulul "
1629
+ #~ "parinte"
1630
+
1631
+ #~ msgid "Submit your sitemaps"
1632
+ #~ msgstr "Inscrie un sitemap"
1633
+
1634
+ #, fuzzy
1635
+ #~ msgid "What is a Google News Sitemap?"
1636
+ #~ msgstr "Ce sunt sitemap-urile?"
1637
+
1638
+ #~ msgid "You do not have sufficient permissions to access this page."
1639
+ #~ msgstr "Nu aveti permisiuni suficiente pentru a accesa aceasta pagina."
1640
+
1641
+ #~ msgid ""
1642
+ #~ "item(s) in one SQL query. This helps you avoid running too heavy queries."
1643
+ #~ msgstr ""
1644
+ #~ "itemi intr-o interogare SQL. Acest lucru te ajuta sa eviti incarcaturile "
1645
+ #~ "mari."
1646
+
1647
+ #, fuzzy
1648
+ #~ msgid "item(s) in one sitemap. You can not go over 50,000."
1649
+ #~ msgstr ""
1650
+ #~ "itemi dintr-un sitemap. De fapt, 5000 ar fi ideal. Nu poti depasi 50,000 "
1651
+ #~ "itemi."
1652
+
1653
+ #~ msgid "log"
1654
+ #~ msgstr "log"
1655
+
1656
+ #~ msgid "make your sitemaps ~ 70% smaller."
1657
+ #~ msgstr "face sitemap-urile cu 70% mai mici."
1658
+
1659
+ #~ msgid "read more"
1660
+ #~ msgstr "citeste mai mult"
1661
+
1662
+ #~ msgid "static pages' sitemap."
1663
+ #~ msgstr "sitemap pentru pagini statice"
1664
+
1665
+ #~ msgid "tag archives' sitemaps."
1666
+ #~ msgstr "sitemap pentru tag-uri"
languages/bwp-google-xml-sitemaps-zh_TW.mo ADDED
Binary file
languages/bwp-google-xml-sitemaps-zh_TW.po ADDED
@@ -0,0 +1,1692 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: BWP Google XML Sitemaps(Malay Translation)\n"
4
+ "Report-Msgid-Bugs-To: contact@betterwp.net\n"
5
+ "POT-Creation-Date: 2016-01-14 21:05+0700\n"
6
+ "PO-Revision-Date: 2012-04-03 20:10+0700\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: <darkcry3r@gmail.com>\n"
9
+ "Language: \n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n"
14
+ "X-Poedit-Basepath: ./../\n"
15
+ "X-Poedit-SourceCharset: utf-8\n"
16
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
+ "X-Poedit-Language: Malay\n"
18
+ "X-Poedit-Country: MALAYSIA\n"
19
+ "X-Poedit-SearchPath-0: .\n"
20
+
21
+ #: vendor/kminh/bwp-framework/src/class-bwp-version.php:32
22
+ #, php-format
23
+ msgid ""
24
+ "%s requires WordPress <strong>%s</strong> or higher and PHP <strong>%s</"
25
+ "strong> or higher. The plugin will not function until you update your "
26
+ "software. Please deactivate this plugin."
27
+ msgstr ""
28
+
29
+ #: src/templates/provider/admin/exclude-posts.html.php:18
30
+ #: src/templates/provider/admin/external-pages.html.php:13
31
+ #: src/templates/provider/admin/exclude-terms.html.php:18
32
+ #: src/class-bwp-gxs.php:1740
33
+ msgid "... loading"
34
+ msgstr ""
35
+
36
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:411
37
+ msgid "... or any amount!"
38
+ msgstr "或者你開心的"
39
+
40
+ #: src/class-bwp-gxs.php:3641
41
+ #, php-format
42
+ msgid "<em>%s.xml</em> does not have any item."
43
+ msgstr ""
44
+
45
+ #: src/class-bwp-gxs.php:3675
46
+ #, php-format
47
+ msgid ""
48
+ "<em>%s.xml</em> was successfully generated but could not be served properly "
49
+ "because some headers have already been sent (something was printed on line "
50
+ "<strong>%s</strong> in file <strong>%s</strong>)."
51
+ msgstr ""
52
+
53
+ #: src/class-bwp-gxs.php:3349
54
+ #, php-format
55
+ msgid ""
56
+ "<em>%s.xml</em> will be served using module file <em>%s</em> in the custom "
57
+ "module directory."
58
+ msgstr ""
59
+
60
+ #: src/class-bwp-gxs.php:3366
61
+ #, fuzzy, php-format
62
+ msgid "<em>%s.xml</em> will be served using module file <em>%s</em>."
63
+ msgstr "成功的生成 <em>%s.xml</em> ,使用模組 <em>%s</em> "
64
+
65
+ #: src/class-bwp-gxs.php:2412
66
+ #, php-format
67
+ msgid "<strong>%d</strong> cached sitemaps have been flushed successfully!"
68
+ msgstr "成功的更新 <strong>%d</strong> sitemap 的快取檔案"
69
+
70
+ #: src/class-bwp-gxs.php:3373
71
+ #, php-format
72
+ msgid ""
73
+ "<strong>%s</strong> can not be served because of a missing module file: "
74
+ "<strong>%s</strong>."
75
+ msgstr ""
76
+
77
+ #: src/class-bwp-gxs.php:2528
78
+ msgid "<strong>BWP Google XML Sitemaps Error:</strong> "
79
+ msgstr "<strong>BWP Google XML Sitemaps 錯誤訊息:</strong> "
80
+
81
+ #: src/class-bwp-gxs.php:3974
82
+ #, php-format
83
+ msgid "<strong>Error %s</strong> from <em>%s</em>."
84
+ msgstr ""
85
+
86
+ #: src/class-bwp-gxs.php:1679
87
+ msgid ""
88
+ "A Google News Sitemap is a file that allows you to control which content you "
89
+ "submit to Google News. By creating and submitting a Google News Sitemap, "
90
+ "you're able to help Google News discover and crawl your site's news articles "
91
+ "&mdash; http://support.google.com/"
92
+ msgstr ""
93
+
94
+ #: src/templates/provider/admin/external-page-form.html.php:17
95
+ msgid "Absolute URL to page"
96
+ msgstr ""
97
+
98
+ #: src/templates/provider/admin/external-pages.html.php:26
99
+ msgid "Actions"
100
+ msgstr ""
101
+
102
+ #: src/class-bwp-gxs.php:1720
103
+ #, php-format
104
+ msgid ""
105
+ "Add <code>post_google_news.xml</code> to the main <a href=\"%s\" target="
106
+ "\"_blank\">sitemapindex.xml</a>."
107
+ msgstr ""
108
+
109
+ #: src/class-bwp-gxs.php:1982
110
+ #, fuzzy
111
+ msgid "Add a sitemap index entry to blog's robots.txt"
112
+ msgstr "加入 sitemap 索引 資訊到虛擬的 robots.txt 中"
113
+
114
+ #: src/class-bwp-gxs.php:1719
115
+ msgid ""
116
+ "Add an <code>&lt;image:image&gt;</code> entry to each sitemap item when "
117
+ "possible."
118
+ msgstr ""
119
+
120
+ #: src/class-bwp-gxs.php:1676
121
+ msgid "Add featured images to existing post-based sitemaps."
122
+ msgstr ""
123
+
124
+ #: src/templates/provider/admin/external-pages.html.php:7
125
+ msgid "Add new page"
126
+ msgstr ""
127
+
128
+ #: src/class-bwp-gxs.php:1394
129
+ #, php-format
130
+ msgid ""
131
+ "Add non-WordPress pages to the %s sitemap. You can also use %s to add "
132
+ "external pages programmatically."
133
+ msgstr ""
134
+
135
+ #: src/class-bwp-gxs.php:1983
136
+ #, fuzzy
137
+ msgid "Add sitemap index entries from all blogs to primary blog's robots.txt"
138
+ msgstr "加入所有部落格的 sitemap索引 到主網站的虛擬 robots.txt"
139
+
140
+ #: src/templates/provider/admin/external-page-modal.html.php:10
141
+ msgid "Add/Update an external page"
142
+ msgstr ""
143
+
144
+ #: src/class-bwp-gxs.php:347 src/class-bwp-gxs.php:998
145
+ #, fuzzy
146
+ msgid "Advanced Options"
147
+ msgstr "模組設定"
148
+
149
+ #: src/class-bwp-gxs.php:2459
150
+ msgid "All logs have been cleared successfully!"
151
+ msgstr "成功的清除所有的記錄!"
152
+
153
+ #: src/class-bwp-gxs.php:2442
154
+ #: vendor/kminh/bwp-framework/src/class-bwp-option-page-v3.php:439
155
+ msgid "All options have been saved."
156
+ msgstr ""
157
+
158
+ #: src/class-bwp-gxs.php:1458
159
+ msgid "Also exclude posts that belong to excluded terms."
160
+ msgstr ""
161
+
162
+ #: src/class-bwp-gxs.php:1787
163
+ #, php-format
164
+ msgid ""
165
+ "Also, if you notice that some non-news contents are indexed too, read <a "
166
+ "href=\"%sfaq#google-news\" target=\"_blank\">this</a>."
167
+ msgstr ""
168
+
169
+ #: src/class-bwp-gxs.php:1799
170
+ msgid "Articles that are older than specified day(s) will NOT be considered."
171
+ msgstr ""
172
+
173
+ #: src/class-bwp-gxs.php:3108
174
+ #, fuzzy
175
+ msgid "Author archive"
176
+ msgstr "作者彙整的 sitemap"
177
+
178
+ #: src/class-bwp-gxs.php:1456
179
+ #, fuzzy
180
+ msgid "Author archives"
181
+ msgstr "作者彙整的 sitemap"
182
+
183
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:521
184
+ msgid "BWP Gems"
185
+ msgstr ""
186
+
187
+ #: src/class-bwp-gxs.php:948
188
+ #, fuzzy
189
+ msgid "BWP Google News XML Sitemap"
190
+ msgstr "BWP Google XML Sitemaps"
191
+
192
+ #: src/class-bwp-gxs.php:941
193
+ msgid "BWP Google XML Sitemaps"
194
+ msgstr "BWP Google XML Sitemaps"
195
+
196
+ #: src/class-bwp-gxs.php:955
197
+ #, fuzzy
198
+ msgid "BWP Google XML Sitemaps - Advanced Options"
199
+ msgstr "BWP Google XML Sitemaps Generator"
200
+
201
+ #: src/class-bwp-gxs.php:2529
202
+ msgid "BWP Google XML Sitemaps Error"
203
+ msgstr "BWP Google XML Sitemaps 錯誤訊息:"
204
+
205
+ #: src/class-bwp-gxs.php:962
206
+ #, fuzzy
207
+ msgid "BWP Google XML Sitemaps Log"
208
+ msgstr "BWP Google XML Sitemaps"
209
+
210
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:531
211
+ msgid "BWP News"
212
+ msgstr ""
213
+
214
+ #: src/class-bwp-gxs.php:2126
215
+ #, fuzzy
216
+ msgid ""
217
+ "Below are messages logged when your sitemaps were generated, including <span "
218
+ "style=\"color: #999999;\">notices</span>, <span style=\"color: #FF0000;"
219
+ "\">errors</span> and <span style=\"color: #009900;\">success messages</span>."
220
+ msgstr ""
221
+ "<em>更多的關於你的 sitemap 生成的訊息:<span style=\"color: #999999;\">告知資"
222
+ "訊</span>, <span style=\"color: #FF0000;\">錯誤訊息</span> 和 <span style="
223
+ "\"color: #009900;\">成功訊息</span>.</em>"
224
+
225
+ #: src/class-bwp-gxs.php:989
226
+ #, fuzzy
227
+ msgid "Better WordPress Google News XML Sitemap"
228
+ msgstr "BWP Google XML Sitemaps"
229
+
230
+ #: src/class-bwp-gxs.php:972 src/class-bwp-gxs.php:981
231
+ #, fuzzy
232
+ msgid "Better WordPress Google XML Sitemaps"
233
+ msgstr "BWP Google XML Sitemaps"
234
+
235
+ #: src/class-bwp-gxs.php:997
236
+ #, fuzzy
237
+ msgid "Better WordPress Google XML Sitemaps Advanced Options"
238
+ msgstr "BWP Google XML Sitemaps Generator"
239
+
240
+ #: src/class-bwp-gxs.php:1005
241
+ #, fuzzy
242
+ msgid "Better WordPress Google XML Sitemaps Log"
243
+ msgstr "BWP Google XML Sitemaps"
244
+
245
+ #: src/class-bwp-gxs.php:1465
246
+ msgid "Bing"
247
+ msgstr "Bing"
248
+
249
+ #: src/class-bwp-gxs.php:1919
250
+ msgid "Cache directory"
251
+ msgstr ""
252
+
253
+ #: src/class-bwp-gxs.php:2186
254
+ #, php-format
255
+ msgid ""
256
+ "Cache directory (<code>%s</code>) does not exist or is not writable. Please "
257
+ "try CHMODing it to either 755 or 777, or disable caching to hide this "
258
+ "warning (not recommended)."
259
+ msgstr ""
260
+
261
+ #: src/class-bwp-gxs.php:3305
262
+ #, php-format
263
+ msgid ""
264
+ "Cache directory <strong>%s</strong> is not writable, no cache file was "
265
+ "created."
266
+ msgstr ""
267
+
268
+ #: src/class-bwp-gxs.php:1918
269
+ msgid "Cache expiry time"
270
+ msgstr ""
271
+
272
+ #: src/class-bwp-gxs.php:1953
273
+ msgid ""
274
+ "Cache your sitemaps for better performance. If you are still configuring the "
275
+ "plugin it's best to disable caching or you might have to manually flush the "
276
+ "cache for any changes to show up."
277
+ msgstr ""
278
+
279
+ #: src/templates/provider/admin/external-page-form.html.php:29
280
+ msgid "Calculate using \"Last modified\""
281
+ msgstr ""
282
+
283
+ #: src/templates/provider/admin/external-pages.html.php:23
284
+ #: src/templates/provider/admin/external-page-form.html.php:27
285
+ #, fuzzy
286
+ msgid "Change frequency"
287
+ msgstr "預設變更的頻率"
288
+
289
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:439
290
+ msgid "Check out this cool plugin"
291
+ msgstr ""
292
+
293
+ #: src/class-bwp-gxs.php:1381
294
+ msgid "Choose appropriate sitemaps to generate."
295
+ msgstr ""
296
+
297
+ #: src/class-bwp-gxs.php:2359
298
+ #, fuzzy
299
+ msgid "Clear Message Log"
300
+ msgstr "清除所有記錄"
301
+
302
+ #: src/templates/provider/admin/external-page-form.html.php:51
303
+ msgid "Click to open a calendar"
304
+ msgstr ""
305
+
306
+ #: src/templates/logger/admin/sitemap-log.html.php:39
307
+ msgid "Click to regenerate"
308
+ msgstr ""
309
+
310
+ #: src/templates/logger/admin/sitemap-log.html.php:34
311
+ msgid "Click to view"
312
+ msgstr ""
313
+
314
+ #: src/templates/provider/admin/external-page-modal.html.php:24
315
+ msgid "Close"
316
+ msgstr ""
317
+
318
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:387
319
+ msgid "Coffees"
320
+ msgstr ""
321
+
322
+ #: src/class-bwp-gxs.php:1911
323
+ #, fuzzy
324
+ msgid "Compress sitemaps"
325
+ msgstr "你的 sitemap"
326
+
327
+ #: src/handler/ajax/external-page.php:136
328
+ msgid "Could not add/update page, please try again."
329
+ msgstr ""
330
+
331
+ #: src/class-bwp-gxs.php:2425
332
+ #, php-format
333
+ msgid ""
334
+ "Could not flush the cache, cache directory is either not found or is not "
335
+ "writable. See <a href=\"%s\" target=\"_blank\">this FAQ entry</a> for a "
336
+ "possible solution."
337
+ msgstr ""
338
+
339
+ #: src/class-bwp-gxs.php:3318
340
+ #, php-format
341
+ msgid "Could not write sitemap file to cache directory <strong>%s</strong>"
342
+ msgstr ""
343
+
344
+ #: src/class-bwp-gxs.php:1346
345
+ msgid "Custom XSLT stylesheet URL"
346
+ msgstr "自行設定 XSLT 樣式的網址"
347
+
348
+ #: src/class-bwp-gxs.php:1922
349
+ #, fuzzy
350
+ msgid "Custom module directory"
351
+ msgstr "強化的模組目錄"
352
+
353
+ #: src/class-bwp-gxs.php:1416
354
+ msgid ""
355
+ "Customize the look and feel of your sitemaps. Note that no stylesheet will "
356
+ "be used for the Google News sitemap."
357
+ msgstr ""
358
+
359
+ #: src/class-bwp-gxs.php:1921
360
+ msgid "Database query limit"
361
+ msgstr ""
362
+
363
+ #: src/class-bwp-gxs.php:3104
364
+ #, fuzzy
365
+ msgid "Date archive"
366
+ msgstr "日期彙整的 sitemap"
367
+
368
+ #: src/class-bwp-gxs.php:1455
369
+ #, fuzzy
370
+ msgid "Date archives"
371
+ msgstr "日期彙整的 sitemap"
372
+
373
+ #: src/class-bwp-gxs.php:1923
374
+ #, fuzzy
375
+ msgid "Debugging"
376
+ msgstr "(啟用 偵錯模式)"
377
+
378
+ #: src/class-bwp-gxs.php:1460
379
+ #, fuzzy
380
+ msgid ""
381
+ "Default XSLT stylesheets will be used. Set your custom stylesheets below or "
382
+ "filter the <code>bwp_gxs_xslt</code> hook."
383
+ msgstr ""
384
+ "這會為你載入本外掛預設的樣式。你可以在下面設定你自己的樣式或使用過濾器 "
385
+ "<code>bwp_gxs_xslt</code> 來更改。"
386
+
387
+ #: src/class-bwp-gxs.php:1336
388
+ msgid "Default change frequency"
389
+ msgstr "預設變更的頻率"
390
+
391
+ #: src/class-bwp-gxs.php:1337
392
+ msgid "Default priority"
393
+ msgstr "預設的優先順序"
394
+
395
+ #: src/class-bwp-gxs.php:1335
396
+ msgid "Default values"
397
+ msgstr ""
398
+
399
+ #: src/class-bwp-gxs.php:1412
400
+ msgid "Default values are only used when valid ones can not be calculated."
401
+ msgstr ""
402
+
403
+ #: src/class-bwp-gxs.php:1978
404
+ msgid ""
405
+ "Disable this to use the local timezone setting in <em>Settings >> General</"
406
+ "em>."
407
+ msgstr ""
408
+
409
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:1530
410
+ msgid "Dismiss this notice."
411
+ msgstr ""
412
+
413
+ #: src/class-bwp-gxs.php:1818
414
+ msgid ""
415
+ "Due to performance reason, it is advised to NOT use a tag-like taxonomy "
416
+ "(such as <em>Post Tag</em>) as the news taxonomy."
417
+ msgstr ""
418
+
419
+ #: src/templates/provider/admin/external-page-form.html.php:19
420
+ msgid ""
421
+ "Each page must have a unique URL, so if you provide an existing URL, the "
422
+ "page with that URL will be updated with new data provided here."
423
+ msgstr ""
424
+
425
+ #: src/class-bwp-gxs.php:561
426
+ msgid "Edit this page"
427
+ msgstr ""
428
+
429
+ #: src/class-bwp-gxs.php:1917
430
+ #, fuzzy
431
+ msgid "Enable auto cache re-generation"
432
+ msgstr "允許自動更新快取"
433
+
434
+ #: src/class-bwp-gxs.php:1924
435
+ msgid "Enable build stats"
436
+ msgstr ""
437
+
438
+ #: src/class-bwp-gxs.php:1916
439
+ #, fuzzy
440
+ msgid "Enable caching"
441
+ msgstr "啟用快取"
442
+
443
+ #: src/class-bwp-gxs.php:1347
444
+ #, fuzzy
445
+ msgid "Enable credit"
446
+ msgstr "允許信任的?"
447
+
448
+ #: src/class-bwp-gxs.php:1926
449
+ #, fuzzy
450
+ msgid "Enable debugging mode"
451
+ msgstr "啟用 偵錯模式"
452
+
453
+ #: src/class-bwp-gxs.php:1640 src/class-bwp-gxs.php:1643
454
+ #, fuzzy
455
+ msgid "Enable extension"
456
+ msgstr "啟用 偵錯模式"
457
+
458
+ #: src/class-bwp-gxs.php:1927
459
+ #, fuzzy
460
+ msgid "Enable extra debugging mode"
461
+ msgstr "啟用 偵錯模式"
462
+
463
+ #: src/class-bwp-gxs.php:1324 src/class-bwp-gxs.php:1342
464
+ #, fuzzy
465
+ msgid "Enable following post types"
466
+ msgstr "排除下列的文章類型:"
467
+
468
+ #: src/class-bwp-gxs.php:1323
469
+ #, fuzzy
470
+ msgid "Enable following sitemaps"
471
+ msgstr "排除下列的文章類型:"
472
+
473
+ #: src/class-bwp-gxs.php:1325
474
+ #, fuzzy
475
+ msgid "Enable following taxonomies"
476
+ msgstr "排除下列的分類:"
477
+
478
+ #: src/class-bwp-gxs.php:1641
479
+ #, fuzzy
480
+ msgid "Enable for following post types"
481
+ msgstr "排除下列的文章類型:"
482
+
483
+ #: src/class-bwp-gxs.php:1653
484
+ msgid "Enable keywords support"
485
+ msgstr ""
486
+
487
+ #: src/class-bwp-gxs.php:1925
488
+ #, fuzzy
489
+ msgid "Enable message log"
490
+ msgstr "啟用記錄"
491
+
492
+ #: src/class-bwp-gxs.php:1652
493
+ msgid "Enable multi-term support"
494
+ msgstr ""
495
+
496
+ #: src/class-bwp-gxs.php:1914
497
+ msgid "Enable multisite robots.txt support"
498
+ msgstr ""
499
+
500
+ #: src/class-bwp-gxs.php:1340 src/class-bwp-gxs.php:1644
501
+ #, fuzzy
502
+ msgid "Enable pinging"
503
+ msgstr "啟用記錄"
504
+
505
+ #: src/class-bwp-gxs.php:1913
506
+ msgid "Enable robots.txt support"
507
+ msgstr ""
508
+
509
+ #: src/class-bwp-gxs.php:1723
510
+ msgid "Enable this if you have posts assigned to more than one terms."
511
+ msgstr ""
512
+
513
+ #: src/class-bwp-gxs.php:3647
514
+ msgid "Enable/disable sitemaps via <em>BWP Sitemaps >> XML Sitemaps</em>."
515
+ msgstr ""
516
+
517
+ #: src/class-bwp-gxs.php:1700
518
+ msgid "Exclude"
519
+ msgstr ""
520
+
521
+ #: src/class-bwp-gxs.php:1385
522
+ #, php-format
523
+ msgid ""
524
+ "Exclude individual items for each sitemap. You can also use <a href="
525
+ "\"%s#exclude-items\" target=\"_blank\">filters</a> to exclude items "
526
+ "programmatically."
527
+ msgstr ""
528
+
529
+ #: src/class-bwp-gxs.php:1326
530
+ msgid "Exclude items"
531
+ msgstr ""
532
+
533
+ #: src/class-bwp-gxs.php:1327
534
+ #, fuzzy
535
+ msgid "Exclude posts"
536
+ msgstr "排除下列的文章類型:"
537
+
538
+ #: src/class-bwp-gxs.php:1329
539
+ #, fuzzy
540
+ msgid "Exclude posts by terms"
541
+ msgstr "排除下列的文章類型:"
542
+
543
+ #: src/templates/provider/admin/exclude-posts.html.php:12
544
+ #: src/templates/provider/admin/exclude-terms.html.php:12
545
+ msgid "Exclude selected items"
546
+ msgstr ""
547
+
548
+ #: src/class-bwp-gxs.php:1328
549
+ msgid "Exclude terms"
550
+ msgstr ""
551
+
552
+ #: src/class-bwp-gxs.php:1543
553
+ #, fuzzy
554
+ msgid ""
555
+ "Expect an absolute URL, e.g. <code>http://example.com/my-stylesheet.xsl</"
556
+ "code>. You must also have a stylesheet for the sitemap index that can be "
557
+ "accessed through the above URL, e.g. <code>my-stylesheet.xsl</code> and "
558
+ "<code>my-stylesheetindex.xsl</code>. Leave blank to use provided stylesheets."
559
+ msgstr ""
560
+ "預設為一個完整的網址,例如<code>http://example.com/my-stylesheet.xsl</code>。"
561
+ "你還必須要有一個針對 sitemap索引 的樣式錶,例如<code>my-stylesheet.xsl</"
562
+ "code> and <code>my-stylesheetindex.xsl</code>。如果你不需要使用請留空白。"
563
+
564
+ #: src/class-bwp-gxs.php:2045
565
+ #, fuzzy
566
+ msgid ""
567
+ "Expect an absolute path to a writable directory (i.e. CHMOD to 755 or 777). "
568
+ msgstr "快取檔案所在地需要可以寫入的 (例如 CHMOD 為 755 或 777)."
569
+
570
+ #: src/class-bwp-gxs.php:2056
571
+ msgid ""
572
+ "Expect an absolute path to the directory where you put your custom modules "
573
+ "(e.g. <code>/home/mysite/public_html/gxs-modules/</code>). "
574
+ msgstr ""
575
+
576
+ #: src/class-bwp-gxs.php:1971
577
+ #, php-format
578
+ msgid ""
579
+ "Extend this plugin using customizable modules. More info <a href=\"%s#module-"
580
+ "api\">here</a>."
581
+ msgstr ""
582
+
583
+ #: src/class-bwp-gxs.php:338 src/class-bwp-gxs.php:990
584
+ msgid "Extensions"
585
+ msgstr ""
586
+
587
+ #: src/class-bwp-gxs.php:1457
588
+ msgid "External (non-WordPress) pages."
589
+ msgstr ""
590
+
591
+ #: src/class-bwp-gxs.php:3094
592
+ msgid "External page"
593
+ msgstr ""
594
+
595
+ #: src/handler/ajax/external-page.php:131
596
+ msgid "External page has been successfully added/updated."
597
+ msgstr ""
598
+
599
+ #: src/class-bwp-gxs.php:1330 src/class-bwp-gxs.php:1397
600
+ msgid "External pages"
601
+ msgstr ""
602
+
603
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:371
604
+ msgid "FAQ"
605
+ msgstr "問與答"
606
+
607
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:409
608
+ msgid "Five cups! $25.00"
609
+ msgstr "五杯! $25.00"
610
+
611
+ #: src/class-bwp-gxs.php:2348
612
+ #, fuzzy
613
+ msgid "Flush Cache"
614
+ msgstr "清空快取檔案"
615
+
616
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:548
617
+ msgid "Follow"
618
+ msgstr ""
619
+
620
+ #: src/class-bwp-gxs.php:1519
621
+ #, fuzzy
622
+ msgid ""
623
+ "For a multi-site installation of WordPress, this sitemap will list all "
624
+ "appropriate blogs' addresses within your network, not just the main blog's."
625
+ msgstr ""
626
+ "網站首頁的 sitemap。當使用 多網站的WordPress ,這個 sitemap 會列出所有網站的"
627
+ "連結,不只有主要的網站。這也支援 WPMU 的網站映射功能。"
628
+
629
+ #: src/class-bwp-gxs.php:1238
630
+ #, php-format
631
+ msgid ""
632
+ "For more details, see <a target=\"_blank\" href=\"%1$s\">this article</a>."
633
+ msgstr ""
634
+
635
+ #: src/class-bwp-gxs.php:1909
636
+ msgid "Formatting"
637
+ msgstr ""
638
+
639
+ #: src/class-bwp-gxs.php:1321
640
+ #, fuzzy
641
+ msgid "Generated Sitemaps"
642
+ msgstr "什麼是 Sitemap?"
643
+
644
+ #: src/templates/provider/admin/news-contents.html.php:11
645
+ msgid "Genres"
646
+ msgstr ""
647
+
648
+ #: src/class-bwp-gxs.php:1332
649
+ msgid "Global limit"
650
+ msgstr ""
651
+
652
+ #: src/class-bwp-gxs.php:1464
653
+ msgid "Google"
654
+ msgstr "Google"
655
+
656
+ #: src/class-bwp-gxs.php:1639
657
+ #, fuzzy
658
+ msgid "Google Image Sitemap"
659
+ msgstr "BWP Google XML Sitemaps"
660
+
661
+ #: src/class-bwp-gxs.php:1642
662
+ #, fuzzy
663
+ msgid "Google News Sitemap"
664
+ msgstr "BWP Google XML Sitemaps"
665
+
666
+ #: src/class-bwp-gxs.php:3082
667
+ msgid "Google News posts"
668
+ msgstr ""
669
+
670
+ #: src/class-bwp-gxs.php:2332
671
+ #, php-format
672
+ msgid ""
673
+ "Google News sitemap could not be generated, please check <a href=\"%s"
674
+ "\">Sitemap Log</a> for possible errors."
675
+ msgstr ""
676
+
677
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:374
678
+ msgid "Got a problem with this plugin? Please say it out loud!"
679
+ msgstr ""
680
+
681
+ #: src/templates/provider/admin/exclude-posts.html.php:27
682
+ #: src/templates/provider/admin/exclude-terms.html.php:27
683
+ msgid "ID"
684
+ msgstr ""
685
+
686
+ #: src/class-bwp-gxs.php:1812
687
+ msgid ""
688
+ "If you enable the \"Google Image Extension\" for selected post type, "
689
+ "featured image will also be added automatically to the news sitemap."
690
+ msgstr ""
691
+
692
+ #: src/class-bwp-gxs.php:2038
693
+ #, fuzzy, php-format
694
+ msgid ""
695
+ "If you have for example 50 blogs, 50 sitemap index entries will be added to "
696
+ "your primary blog's <a href=\"%s\" target=\"_blank\">robots.txt</a>."
697
+ msgstr ""
698
+ "如果你有 50個部落格, 50行 <code>Sitemap: http://example.com/sitemapindex."
699
+ "xml</code> 將會加入到你主站的 robots.txt 當中。<code>%s</code>"
700
+
701
+ #: src/class-bwp-gxs.php:2027
702
+ #, fuzzy, php-format
703
+ msgid ""
704
+ "If you're on a Multi-site installation with <strong>Sub-domain</strong> "
705
+ "enabled, each blog will have its own robots.txt. Blogs in <strong>sub-"
706
+ "directory</strong> will not, however. Please read the <a href=\"%s#robots.txt"
707
+ "\" target=\"_blank\">documentation</a> for more info."
708
+ msgstr ""
709
+ "如果你使用 多網站的WordPress, 在一個子域名中的每一個網站將有自己的 robots."
710
+ "txt,如果在子資料夾就不會。請參考 <a href=\"%s#toc-robots\" target=\"_blank"
711
+ "\">說明文件</a> 以得到更多的訊息。"
712
+
713
+ #: src/templates/provider/admin/external-page-form.html.php:55
714
+ #: src/class-bwp-gxs.php:1770
715
+ msgid "Important"
716
+ msgstr ""
717
+
718
+ #: src/class-bwp-gxs.php:1699
719
+ msgid "Include"
720
+ msgstr ""
721
+
722
+ #: src/handler/ajax/external-page.php:91
723
+ msgid "Invalid frequency or priority."
724
+ msgstr ""
725
+
726
+ #: src/class-bwp-gxs.php:1187
727
+ msgid "It appears that no sitemap has been generated yet"
728
+ msgstr ""
729
+
730
+ #: src/class-bwp-gxs.php:1331
731
+ msgid "Item limits"
732
+ msgstr ""
733
+
734
+ #: src/class-bwp-gxs.php:1654
735
+ msgid "Keyword source"
736
+ msgstr ""
737
+
738
+ #: src/templates/logger/admin/sitemap-log.html.php:11
739
+ msgid "Last generated on"
740
+ msgstr ""
741
+
742
+ #: src/templates/provider/admin/external-pages.html.php:25
743
+ msgid "Last modified"
744
+ msgstr ""
745
+
746
+ #: src/templates/provider/admin/external-page-form.html.php:46
747
+ msgid "Last modified (time is optional)"
748
+ msgstr ""
749
+
750
+ #: src/class-bwp-gxs.php:1766
751
+ #, fuzzy, php-format
752
+ msgid "Learn more about <a href=\"%s\" target=\"_blank\">Image sitemaps</a>."
753
+ msgstr "Yahoo &mdash; <a href=\"%s\" target=\"_blank\">資訊</a>"
754
+
755
+ #: src/class-bwp-gxs.php:2049
756
+ #, php-format
757
+ msgid "Leave empty to use <code>%s</code>."
758
+ msgstr ""
759
+
760
+ #: src/class-bwp-gxs.php:1405
761
+ msgid "Limit the number of items to output in one sitemap. "
762
+ msgstr ""
763
+
764
+ #: src/class-bwp-gxs.php:1985
765
+ #, php-format
766
+ msgid ""
767
+ "Log useful messages when sitemaps are generated. The log can be viewed <a "
768
+ "href=\"%s\">here</a>."
769
+ msgstr ""
770
+
771
+ #: src/class-bwp-gxs.php:2132
772
+ msgid ""
773
+ "Logging is not currently enabled. You can enable this feature by checking "
774
+ "\"Enable logging\" in <strong>XML Sitemaps >> Sitemap log & debug</strong>."
775
+ msgstr ""
776
+
777
+ #: src/class-bwp-gxs.php:1344
778
+ msgid "Look and Feel"
779
+ msgstr ""
780
+
781
+ #: src/templates/logger/admin/sitemap-log.html.php:23
782
+ #: src/templates/logger/admin/message-log.html.php:11
783
+ #, fuzzy
784
+ msgid "M d, Y h:i:s A"
785
+ msgstr "M j, Y : H:i:s"
786
+
787
+ #: src/class-bwp-gxs.php:1345
788
+ msgid "Make sitemaps look pretty"
789
+ msgstr ""
790
+
791
+ #: src/class-bwp-gxs.php:1475
792
+ msgid "Maximum is <strong>50,000</strong>. Set to 0 to use the Global limit."
793
+ msgstr ""
794
+
795
+ #: src/class-bwp-gxs.php:1470
796
+ msgid ""
797
+ "Maximum is <strong>50,000</strong>. This setting is applied to all sitemaps."
798
+ msgstr ""
799
+
800
+ #: src/class-bwp-gxs.php:2002
801
+ msgid ""
802
+ "Maximum number of items to fetch in each query to database. This helps when "
803
+ "a sitemap has thousands of items and host is low on memory."
804
+ msgstr ""
805
+
806
+ #: src/class-bwp-gxs.php:2118
807
+ msgid "Message Log"
808
+ msgstr ""
809
+
810
+ #: src/class-bwp-gxs.php:1338
811
+ msgid "Minimum priority"
812
+ msgstr "最小的優先順序"
813
+
814
+ #: src/templates/provider/admin/news-contents.html.php:9
815
+ #: src/templates/provider/admin/exclude-terms.html.php:28
816
+ #: src/templates/logger/admin/sitemap-log.html.php:10
817
+ msgid "Name"
818
+ msgstr ""
819
+
820
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:503
821
+ msgid "Need a highly customizable theme?"
822
+ msgstr ""
823
+
824
+ #: src/class-bwp-gxs.php:1648
825
+ #, fuzzy
826
+ msgid "News age"
827
+ msgstr "什麼是 Sitemap?"
828
+
829
+ #: src/class-bwp-gxs.php:1647
830
+ msgid "News language"
831
+ msgstr ""
832
+
833
+ #: src/class-bwp-gxs.php:1646
834
+ msgid "News name"
835
+ msgstr ""
836
+
837
+ #: src/class-bwp-gxs.php:1649
838
+ msgid "News post type"
839
+ msgstr ""
840
+
841
+ #: src/class-bwp-gxs.php:1650
842
+ msgid "News taxonomy"
843
+ msgstr ""
844
+
845
+ #: src/class-bwp-gxs.php:1651
846
+ msgid "News terms and genres"
847
+ msgstr ""
848
+
849
+ #: src/templates/logger/admin/message-log.html.php:23
850
+ msgid "No log yet!"
851
+ msgstr "還沒有任何的記錄!"
852
+
853
+ #: src/class-bwp-gxs.php:1745
854
+ msgid "Note:"
855
+ msgstr ""
856
+
857
+ #: src/class-bwp-gxs.php:2458
858
+ msgid "Notice"
859
+ msgstr "注意"
860
+
861
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:410
862
+ msgid "One LL-cup!!! $50.00"
863
+ msgstr "特大杯的 $50.00"
864
+
865
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:407
866
+ msgid "One cup $5.00"
867
+ msgstr "一杯 $5.00"
868
+
869
+ #: src/class-bwp-gxs.php:2060
870
+ msgid ""
871
+ "Override a built-in module by having a module with the same filename in "
872
+ "specified directory."
873
+ msgstr ""
874
+
875
+ #: src/class-bwp-gxs.php:3096
876
+ msgid "Page"
877
+ msgstr ""
878
+
879
+ #: src/class-bwp-gxs.php:1343
880
+ msgid "Ping limit"
881
+ msgstr ""
882
+
883
+ #: src/class-bwp-gxs.php:3985
884
+ #, php-format
885
+ msgid ""
886
+ "Ping limit for today to <em>%s</em> has been reached, consider increasing "
887
+ "the ping limit via <em>XML Sitemaps >> Ping search engines >> \"Ping limit "
888
+ "for each search engine\"</em>"
889
+ msgstr ""
890
+
891
+ #: src/class-bwp-gxs.php:1339
892
+ #, fuzzy
893
+ msgid "Ping search engines"
894
+ msgstr "主動告知搜尋引擎"
895
+
896
+ #: src/class-bwp-gxs.php:1722
897
+ msgid "Ping search engines when a news article is published."
898
+ msgstr ""
899
+
900
+ #: src/class-bwp-gxs.php:1463
901
+ #, fuzzy
902
+ msgid "Ping search engines when you publish new posts."
903
+ msgstr "在下面選擇的 搜尋引擎 將會在你發表新文章之時主動告知"
904
+
905
+ #: src/class-bwp-gxs.php:3964
906
+ #, fuzzy, php-format
907
+ msgid "Pinged <em>%s</em> with <em>%s</em> successfully!"
908
+ msgstr "成功的主動通知 %s。"
909
+
910
+ #: src/class-bwp-gxs.php:3658
911
+ msgid ""
912
+ "Please make sure that you have at least one sitemap enabled in <em>BWP "
913
+ "Sitemaps >> XML Sitemaps >> Sitemaps to generate</em>."
914
+ msgstr ""
915
+
916
+ #: src/class-bwp-gxs.php:1759
917
+ #, php-format
918
+ msgid ""
919
+ "Please make sure you have enabled the <a href=\"%s\" target=\"_blank\">Post "
920
+ "Thumbnails feature</a> in your theme before enabling this extension."
921
+ msgstr ""
922
+
923
+ #: src/handler/ajax/external-page.php:107
924
+ msgid "Please provide a valid last modified date time."
925
+ msgstr ""
926
+
927
+ #: src/handler/ajax/external-page.php:63
928
+ msgid "Please provide all required fields."
929
+ msgstr ""
930
+
931
+ #: src/handler/ajax/external-page.php:78
932
+ #, php-format
933
+ msgid "Please provide an absolute URL under your domain, for example: %s."
934
+ msgstr ""
935
+
936
+ #: src/class-bwp-gxs.php:2484 src/class-bwp-gxs.php:2498
937
+ msgid "Please select at least one item to exclude."
938
+ msgstr ""
939
+
940
+ #: src/templates/provider/admin/external-page-form.html.php:56
941
+ #, php-format
942
+ msgid ""
943
+ "Please specify \"Last modified\" in your <a href=\"%s\" target=\"_blank"
944
+ "\">local timezone</a>."
945
+ msgstr ""
946
+
947
+ #: src/class-bwp-gxs.php:1780
948
+ #, php-format
949
+ msgid ""
950
+ "Please take a look at <a href=\"%s\" target=\"_blank\">Google News's "
951
+ "guidelines</a> before enabling this feature."
952
+ msgstr ""
953
+
954
+ #: src/class-bwp-gxs.php:1804
955
+ #, php-format
956
+ msgid ""
957
+ "Please take a look at <a href=\"%s\" target=\"_blank\">Google News's "
958
+ "guidelines</a> for more info."
959
+ msgstr ""
960
+
961
+ #: vendor/kminh/bwp-framework/src/class-bwp-option-page-v3.php:93
962
+ msgid "Plugin Configurations"
963
+ msgstr "外掛設定"
964
+
965
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:375
966
+ msgid "Plugin Support"
967
+ msgstr ""
968
+
969
+ #: src/class-bwp-gxs.php:3087
970
+ msgid "Post"
971
+ msgstr ""
972
+
973
+ #: src/class-bwp-gxs.php:1984
974
+ #, fuzzy
975
+ msgid ""
976
+ "Print useful information such as build time, memory usage, SQL queries, etc."
977
+ msgstr "告訴你一些有用的資訊,如生成時間、記憶體使用量、 SQL 次數等"
978
+
979
+ #: src/templates/provider/admin/external-pages.html.php:24
980
+ #: src/templates/provider/admin/external-page-form.html.php:37
981
+ msgid "Priority"
982
+ msgstr ""
983
+
984
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:378
985
+ msgid "Rate this plugin 5 stars if you like it, thank you!"
986
+ msgstr ""
987
+
988
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:379
989
+ msgid "Rate this plugin 5 stars!"
990
+ msgstr ""
991
+
992
+ #: src/class-bwp-gxs.php:1981
993
+ #, fuzzy
994
+ msgid ""
995
+ "Re-generate sitemap cache when expired. If you disable this, remember to "
996
+ "manually flush the cache once in a while."
997
+ msgstr ""
998
+ "當 sitemap 的快取資料過期,系統將嘗試建立新的快取資料. 如果你不允許, 記得每隔"
999
+ "一動時間清空你的快取檔案。"
1000
+
1001
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:370
1002
+ msgid "Read this first before asking any question!"
1003
+ msgstr ""
1004
+
1005
+ #: src/templates/provider/admin/exclude-posts.html.php:29
1006
+ #: src/templates/provider/admin/exclude-terms.html.php:29
1007
+ msgid "Remove"
1008
+ msgstr ""
1009
+
1010
+ #: src/class-bwp-gxs.php:557
1011
+ msgid "Remove from exclusion"
1012
+ msgstr ""
1013
+
1014
+ #: src/class-bwp-gxs.php:562
1015
+ msgid "Remove this page"
1016
+ msgstr ""
1017
+
1018
+ #: src/class-bwp-gxs.php:3489
1019
+ #, fuzzy, php-format
1020
+ msgid "Requested sitemap (<em>%s.xml</em>) was not found or not enabled."
1021
+ msgstr "請求的模組 (<em>%s</em>) 不存在或是不允許使用。"
1022
+
1023
+ #: src/templates/provider/admin/external-page-modal.html.php:27
1024
+ msgid "Reset"
1025
+ msgstr ""
1026
+
1027
+ #: src/class-bwp-gxs.php:1912
1028
+ msgid "Robots.txt"
1029
+ msgstr ""
1030
+
1031
+ #: src/templates/provider/admin/external-page-modal.html.php:33
1032
+ #: vendor/kminh/bwp-framework/src/class-bwp-option-page-v3.php:306
1033
+ msgid "Save Changes"
1034
+ msgstr "儲存變更"
1035
+
1036
+ #: src/class-bwp-gxs.php:2346
1037
+ #, fuzzy
1038
+ msgid "Save Changes and Flush Cache"
1039
+ msgstr "儲存變更"
1040
+
1041
+ #: src/class-bwp-gxs.php:1341
1042
+ msgid "Search engines to ping"
1043
+ msgstr ""
1044
+
1045
+ #: src/templates/provider/admin/exclude-posts.html.php:5
1046
+ msgid "Search for posts to exclude"
1047
+ msgstr ""
1048
+
1049
+ #: src/templates/provider/admin/exclude-terms.html.php:5
1050
+ msgid "Search for terms to exclude"
1051
+ msgstr ""
1052
+
1053
+ #: src/templates/provider/admin/news-contents.html.php:8
1054
+ msgid "Select"
1055
+ msgstr ""
1056
+
1057
+ #: src/class-bwp-gxs.php:1248
1058
+ msgid "Select a post type"
1059
+ msgstr ""
1060
+
1061
+ #: src/class-bwp-gxs.php:1262
1062
+ msgid "Select a taxonomy"
1063
+ msgstr ""
1064
+
1065
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:386
1066
+ msgid "Send"
1067
+ msgstr ""
1068
+
1069
+ #: src/class-bwp-gxs.php:1794
1070
+ msgid ""
1071
+ "Set a different name for your news sitemap. By default, your <em>Site Title</"
1072
+ "em> is used."
1073
+ msgstr ""
1074
+
1075
+ #: src/class-bwp-gxs.php:1801
1076
+ msgid "Set to <code>0</code> to disable (not recommended)."
1077
+ msgstr ""
1078
+
1079
+ #: src/class-bwp-gxs.php:1406
1080
+ #, php-format
1081
+ msgid ""
1082
+ "Setting too high limits might lead to white page error due to timeout or "
1083
+ "memory issue. Refer to this plugin's <a target=\"_blank\" href=\"%s\">FAQ "
1084
+ "section</a> for more info."
1085
+ msgstr ""
1086
+
1087
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:1315
1088
+ msgid "Settings"
1089
+ msgstr "設定"
1090
+
1091
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:431
1092
+ msgid "Share the love for this plugin!"
1093
+ msgstr ""
1094
+
1095
+ #: src/templates/provider/admin/exclude-posts.html.php:17
1096
+ #: src/templates/provider/admin/exclude-terms.html.php:17
1097
+ msgid "Show/Hide excluded items"
1098
+ msgstr ""
1099
+
1100
+ #: src/templates/provider/admin/external-pages.html.php:12
1101
+ msgid "Show/Hide external pages"
1102
+ msgstr ""
1103
+
1104
+ #: src/class-bwp-gxs.php:1737
1105
+ msgid "Show/Hide selected terms"
1106
+ msgstr ""
1107
+
1108
+ #: src/class-bwp-gxs.php:1462
1109
+ msgid "Site Address"
1110
+ msgstr ""
1111
+
1112
+ #: src/class-bwp-gxs.php:1915
1113
+ #, fuzzy
1114
+ msgid "Sitemap Cache"
1115
+ msgstr "Sitemap 統計"
1116
+
1117
+ #: src/class-bwp-gxs.php:1645
1118
+ #, fuzzy
1119
+ msgid "Sitemap Contents"
1120
+ msgstr "Sitemap 生成設定"
1121
+
1122
+ #: src/class-bwp-gxs.php:350 src/class-bwp-gxs.php:1006
1123
+ #, fuzzy
1124
+ msgid "Sitemap Log"
1125
+ msgstr "Sitemap 生成的紀錄檔"
1126
+
1127
+ #: src/class-bwp-gxs.php:1920
1128
+ #, fuzzy
1129
+ msgid "Sitemap modules"
1130
+ msgstr "Sitemap 索引 設定"
1131
+
1132
+ #: src/class-bwp-gxs.php:1461
1133
+ msgid ""
1134
+ "Sitemaps like <code>post.xml</code> are split into <code>post_part1.xml</"
1135
+ "code>, <code>post_part2.xml</code>, etc. when limit reached."
1136
+ msgstr ""
1137
+
1138
+ #: src/class-bwp-gxs.php:1322
1139
+ #, fuzzy
1140
+ msgid "Sitemaps to generate"
1141
+ msgstr "Sitemap 生成設定"
1142
+
1143
+ #: src/class-bwp-gxs.php:1459
1144
+ #, fuzzy
1145
+ msgid "Some copyrighted info is added to your sitemaps."
1146
+ msgstr "一些版權保護的訊息也會加入 sitemap 中。感謝!"
1147
+
1148
+ #: src/class-bwp-gxs.php:1333
1149
+ msgid "Split <strong>post-based</strong> sitemaps"
1150
+ msgstr ""
1151
+
1152
+ #: src/class-bwp-gxs.php:1334
1153
+ msgid "Split limit"
1154
+ msgstr ""
1155
+
1156
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:541
1157
+ msgid "Subscribe"
1158
+ msgstr ""
1159
+
1160
+ #: src/class-bwp-gxs.php:2472
1161
+ #, php-format
1162
+ msgid "Successfully excluded <strong>%d</strong> items."
1163
+ msgstr ""
1164
+
1165
+ #: src/class-bwp-gxs.php:3627
1166
+ #, fuzzy, php-format
1167
+ msgid ""
1168
+ "Successfully generated <em>%s.xml</em> using custom module file <em>%s</em>."
1169
+ msgstr "成功的生成 <em>%s.xml</em> ,使用模組 <em>%s</em> "
1170
+
1171
+ #: src/class-bwp-gxs.php:3628
1172
+ #, fuzzy, php-format
1173
+ msgid "Successfully generated <em>%s.xml</em> using module file <em>%s</em>."
1174
+ msgstr "成功的生成 <em>%s.xml</em> ,使用模組 <em>%s</em> "
1175
+
1176
+ #: src/class-bwp-gxs.php:3271
1177
+ #, php-format
1178
+ msgid "Successfully served a cached version of <em>%s.xml</em>."
1179
+ msgstr "成功的儲存 <em>%s.xml</em> 的快取檔案。"
1180
+
1181
+ #: src/class-bwp-gxs.php:1454
1182
+ #, fuzzy
1183
+ msgid "Taxonomy (including custom taxonomies)"
1184
+ msgstr "分類彙整的 sitemap,包含自行定義的。"
1185
+
1186
+ #: src/class-bwp-gxs.php:2416
1187
+ msgid "There are no cached sitemaps to flush."
1188
+ msgstr ""
1189
+
1190
+ #: src/class-bwp-gxs.php:3652
1191
+ #, php-format
1192
+ msgid "There are no public <em>%s</em>."
1193
+ msgstr ""
1194
+
1195
+ #: src/class-bwp-gxs.php:3597
1196
+ #, php-format
1197
+ msgid ""
1198
+ "There is no class named <strong>%s</strong> in the module file <strong>%s</"
1199
+ "strong>."
1200
+ msgstr ""
1201
+
1202
+ #: src/class-bwp-gxs.php:558 src/class-bwp-gxs.php:563
1203
+ msgid "This action can not be undone, are you sure?"
1204
+ msgstr ""
1205
+
1206
+ #: src/class-bwp-gxs.php:1771
1207
+ msgid ""
1208
+ "This extension has an effect on performance, if you notice any slowdown "
1209
+ "please try disabling it first."
1210
+ msgstr ""
1211
+
1212
+ #: src/class-bwp-gxs.php:1827
1213
+ msgid ""
1214
+ "This ping works separately from the sitemap index ping, and only occurs when "
1215
+ "you publish an article in one of the news categories set below."
1216
+ msgstr ""
1217
+
1218
+ #: src/class-bwp-gxs.php:379
1219
+ #, php-format
1220
+ msgid ""
1221
+ "This sitemap was originally generated in %s second(s) (Memory usage: %s) - "
1222
+ "%s queries - %s URL(s) listed"
1223
+ msgstr ""
1224
+ "This sitemap was originally generated in %s second(s) (Memory usage: %s) - "
1225
+ "%s queries - %s URL(s) listed"
1226
+
1227
+ #: src/templates/provider/admin/exclude-posts.html.php:28
1228
+ msgid "Title"
1229
+ msgstr ""
1230
+
1231
+ #: src/class-bwp-gxs.php:1231
1232
+ #, fuzzy, php-format
1233
+ msgid ""
1234
+ "To proceed, submit your <a href=\"%s\" target=\"_blank\">sitemapindex</a> to "
1235
+ "major search engines like <a href=\"%s\" target=\"_blank\">Google</a> or <a "
1236
+ "href=\"%s\" target=\"_blank\">Bing</a>."
1237
+ msgstr ""
1238
+ "<em>提交你的 sitemap 索引檔給主要的搜尋引擎。例如: <a href=\"%s\" target="
1239
+ "\"_blank\">Google</a>, <a href=\"%s\" target=\"_blank\">Yahoo</a>, <a href="
1240
+ "\"%s\" target=\"_blank\">Bing</a> 或 <a href=\"%s\" target=\"_blank\">Ask</"
1241
+ "a>.</em>"
1242
+
1243
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:408
1244
+ msgid "Two cups $10.00"
1245
+ msgstr "兩杯 $10.00"
1246
+
1247
+ #: src/class-bwp-gxs.php:3959
1248
+ msgid "Unknown response code from search engines. Ping failed."
1249
+ msgstr ""
1250
+
1251
+ #: src/templates/provider/admin/external-pages.html.php:22
1252
+ msgid "Url"
1253
+ msgstr ""
1254
+
1255
+ #: src/class-bwp-gxs.php:1910
1256
+ #, fuzzy
1257
+ msgid "Use GMT for Last Modified date"
1258
+ msgstr "在最後更新時間使用 GMT 時間"
1259
+
1260
+ #: src/class-bwp-gxs.php:1979
1261
+ #, fuzzy, php-format
1262
+ msgid ""
1263
+ "Use gzip to make sitemaps ~70% smaller. If you see an error after enabling "
1264
+ "this, it's very likely that you have gzip active on your server already."
1265
+ msgstr ""
1266
+ "使你的 sitrmap 縮小約 70%。<strong>重要:</strong> 如果有錯誤產生的話,很可能"
1267
+ "是因為你的伺服器上已經有設定 GZIP 了。"
1268
+
1269
+ #: src/class-bwp-gxs.php:1706
1270
+ msgid "Use the selected \"News taxonomy\""
1271
+ msgstr ""
1272
+
1273
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:416
1274
+ msgid "Via"
1275
+ msgstr ""
1276
+
1277
+ #: src/templates/provider/admin/news-contents.html.php:13
1278
+ #: vendor/kminh/bwp-framework/src/class-bwp-option-page-v3.php:828
1279
+ msgid "View more info in a separate tab"
1280
+ msgstr ""
1281
+
1282
+ #: src/class-bwp-gxs.php:2185
1283
+ msgid "Warning"
1284
+ msgstr "警告"
1285
+
1286
+ #: src/class-bwp-gxs.php:1525
1287
+ msgid ""
1288
+ "When a post belongs to multiple terms, it will be excluded if <strong>ANY</"
1289
+ "strong> of those terms is currently excluded."
1290
+ msgstr ""
1291
+
1292
+ #: src/class-bwp-gxs.php:1986
1293
+ msgid ""
1294
+ "When this is on, NO caching is used and <code>WP_DEBUG</code> is respected, "
1295
+ "useful when developing new modules."
1296
+ msgstr ""
1297
+
1298
+ #: src/class-bwp-gxs.php:1987
1299
+ #, php-format
1300
+ msgid ""
1301
+ "When this is on, NO headers are sent and sitemaps are NOT compressed, useful "
1302
+ "when debugging <em>Content Encoding Error</em>. More info <a href="
1303
+ "\"%s#sitemap-log-debug\" target=\"_blank\">here</a>."
1304
+ msgstr ""
1305
+
1306
+ #: src/class-bwp-gxs.php:1421
1307
+ #, fuzzy
1308
+ msgid ""
1309
+ "Whenever you post something new to your blog, you can <em>ping</em> search "
1310
+ "engines with your sitemap index to tell them your blog just got updated."
1311
+ msgstr ""
1312
+ "<em>當你發表什麼東西到你的部落格之時, 你可以 <em>ping (主動告知)</em> 搜尋引"
1313
+ "擎你的部落格剛剛更新. 你可能認為 ping 是不太有效的,但你應該讓他這麼做.</em>"
1314
+
1315
+ #: src/class-bwp-gxs.php:1959
1316
+ #, php-format
1317
+ msgid ""
1318
+ "WordPress generates a %svirtual robots.txt%s file for your blog by default. "
1319
+ "You can add the sitemap index file to that robots.txt file using settings "
1320
+ "below."
1321
+ msgstr ""
1322
+
1323
+ #: src/class-bwp-gxs.php:963
1324
+ msgid "XML Sitemap Log"
1325
+ msgstr ""
1326
+
1327
+ #: src/class-bwp-gxs.php:335 src/class-bwp-gxs.php:942
1328
+ #: src/class-bwp-gxs.php:982
1329
+ #, fuzzy
1330
+ msgid "XML Sitemaps"
1331
+ msgstr "BWP Google XML Sitemaps"
1332
+
1333
+ #: src/class-bwp-gxs.php:956
1334
+ #, fuzzy
1335
+ msgid "XML Sitemaps - Advanced Options"
1336
+ msgstr "Sitemap 索引 設定"
1337
+
1338
+ #: src/class-bwp-gxs.php:949
1339
+ #, fuzzy
1340
+ msgid "XML Sitemaps - Extensions"
1341
+ msgstr "Sitemap 索引 設定"
1342
+
1343
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:565
1344
+ #, php-format
1345
+ msgid "You are using version %s!"
1346
+ msgstr "你正在使用 %s 版本!"
1347
+
1348
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:391
1349
+ msgid ""
1350
+ "You can buy me some special coffees if you appreciate my work, thank you!"
1351
+ msgstr "如果你欣賞我的工作,請幫我買些咖啡吧!感謝你!"
1352
+
1353
+ #: src/class-bwp-gxs.php:1748
1354
+ #, fuzzy, php-format
1355
+ msgid ""
1356
+ "You can only select post types that <a href=\"%s\" target=\"_blank\">support "
1357
+ "the thumbnail feature</a>."
1358
+ msgstr "Yahoo &mdash; <a href=\"%s\" target=\"_blank\">資訊</a>"
1359
+
1360
+ #: src/class-bwp-gxs.php:1980
1361
+ #, fuzzy
1362
+ msgid "Your sitemaps are generated and then cached to reduce unnecessary work."
1363
+ msgstr "將你生成的 sitemap 快取,以減少不必要的工作."
1364
+
1365
+ #: src/class-bwp-gxs.php:1191
1366
+ msgid "click to generate your Sitemap Index"
1367
+ msgstr ""
1368
+
1369
+ #: src/class-bwp-gxs.php:1445 src/class-bwp-gxs.php:2013
1370
+ msgid "day(s)"
1371
+ msgstr "天"
1372
+
1373
+ #: src/class-bwp-gxs.php:1715
1374
+ #, fuzzy
1375
+ msgid "day(s)."
1376
+ msgstr "天"
1377
+
1378
+ #: src/class-bwp-gxs.php:2573
1379
+ #, fuzzy
1380
+ msgid "debugging was on"
1381
+ msgstr "(啟用 偵錯模式)"
1382
+
1383
+ #: src/class-bwp-gxs.php:2572
1384
+ msgid "extra debugging was on"
1385
+ msgstr ""
1386
+
1387
+ #: src/class-bwp-gxs.php:1400
1388
+ msgid "filter"
1389
+ msgstr ""
1390
+
1391
+ #: src/class-bwp-gxs.php:1444 src/class-bwp-gxs.php:2012
1392
+ msgid "hour(s)"
1393
+ msgstr "小時"
1394
+
1395
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:524
1396
+ #: vendor/kminh/bwp-framework/src/class-bwp-framework-v3.php:534
1397
+ msgid "loading..."
1398
+ msgstr ""
1399
+
1400
+ #: src/class-bwp-gxs.php:1443 src/class-bwp-gxs.php:2011
1401
+ msgid "minute(s)"
1402
+ msgstr "分鐘"
1403
+
1404
+ #: src/class-bwp-gxs.php:3073
1405
+ #, php-format
1406
+ msgid ""
1407
+ "news posts that are published within the last <strong>%d day(s)</strong>. To "
1408
+ "include news posts within a longer time period, change the \"News age\" "
1409
+ "setting via BWP Sitemaps >> Extensions >> Google News Sitemap >> Sitemap "
1410
+ "Contents"
1411
+ msgstr ""
1412
+
1413
+ #: src/class-bwp-gxs.php:1108
1414
+ msgid "overridden"
1415
+ msgstr ""
1416
+
1417
+ #: src/class-bwp-gxs.php:1442 src/class-bwp-gxs.php:2010
1418
+ msgid "second(s)"
1419
+ msgstr "秒"
1420
+
1421
+ #: src/class-bwp-gxs.php:1729
1422
+ msgid "selected terms."
1423
+ msgstr ""
1424
+
1425
+ #: src/class-bwp-gxs.php:1487
1426
+ msgid ""
1427
+ "time(s) per search engine per day. Increase this limit if you publish a lot "
1428
+ "of posts in a single day."
1429
+ msgstr ""
1430
+
1431
+ #: src/templates/provider/admin/external-page-modal.html.php:21
1432
+ msgid "working ..."
1433
+ msgstr ""
1434
+
1435
+ #~ msgid "%s"
1436
+ #~ msgstr "%s"
1437
+
1438
+ #~ msgid ""
1439
+ #~ "<a href=\"%s\" target=\"_blank\">%s</a> has been successfully built on "
1440
+ #~ "<strong>%s</strong>."
1441
+ #~ msgstr ""
1442
+ #~ "<a href=\"%s\" target=\"_blank\">%s</a> 於 <strong>%s</strong> 成功的生成"
1443
+
1444
+ #, fuzzy
1445
+ #~ msgid ""
1446
+ #~ "<em>%s.xml</em> does not have any item. You can fix this easily by "
1447
+ #~ "excluding any post types / terms you do not use in <em>Sitemap Generator</"
1448
+ #~ "em> tab within your admin area. If you still see this error, consider "
1449
+ #~ "checking the module that generates this sitemap (<em>%s.php</em>)."
1450
+ #~ msgstr ""
1451
+ #~ "<em>%s.xml</em> 不包含任何的項目。本外掛將針對收尋引擎的請求送出 404 錯"
1452
+ #~ "誤。你應該要檢查負責生成本 sitemap 的檔案(<em>%s.php</em>)。"
1453
+
1454
+ #~ msgid ""
1455
+ #~ "<em><strong>Note:</strong> If you encounter white page problem, please "
1456
+ #~ "refer to the <a target=\"_blank\" href=\"%s\">FAQ section</a> to know how "
1457
+ #~ "to change this limit appropriately to make this plugin work. Also note "
1458
+ #~ "that, for post-based sitemaps, this option will be overridden by the "
1459
+ #~ "limit you set in the Sitemap Index Options below.</em>"
1460
+ #~ msgstr ""
1461
+ #~ "<em><strong>注意:</strong> 如果有空白頁面的問題,請參考 <a target="
1462
+ #~ "\"_blank\" href=\"%s\">常見問題</a> 以瞭解如何是當的修改限制讓外掛順利運"
1463
+ #~ "作。也請注意,再以文章為基礎的 sitemap,這個設定值會被你在之後【Sitemap 索"
1464
+ #~ "引 設定】中的設定複寫。</em>"
1465
+
1466
+ #~ msgid "<em>Basic information about all your sitemaps.</em>"
1467
+ #~ msgstr "<em>關於你全部的 sitemap 的基本資訊</em>"
1468
+
1469
+ #~ msgid "<em>Cache your sitemaps for better performance.</em>"
1470
+ #~ msgstr "<em>快取你的 sitemap 可有更好的性能</em>"
1471
+
1472
+ #~ msgid ""
1473
+ #~ "<em>Here you can change some settings that affect the default Sitemap "
1474
+ #~ "Index file.</em>"
1475
+ #~ msgstr "<em>這裡你可以改變一些預設的 sitemap 索引 設定.</em>"
1476
+
1477
+ #~ msgid ""
1478
+ #~ "<em>This plugin uses modules to build sitemap data so it is recommended "
1479
+ #~ "that you extend this plugin using modules rather than hooks. Some of the "
1480
+ #~ "settings below only affect modules extending the base module class. Read "
1481
+ #~ "more about using modules <a href=\"%s#using-modules\">here</a>.</em>"
1482
+ #~ msgstr ""
1483
+ #~ "<em>本外掛使用模組的方式來生成 sitemap, 所以建議你在強化本外掛時使用 模"
1484
+ #~ "組 而不是 hooks. 底下的設定只會影響到以基本模組擴展而來的模組。於 <a href="
1485
+ #~ "\"%s#using-modules\">這裡</a> 取得更多關於模組的資訊。</em>"
1486
+
1487
+ #~ msgid ""
1488
+ #~ "After you activate this plugin, all sitemaps should be available right "
1489
+ #~ "away. The next step is to submit the sitemapindex to major search "
1490
+ #~ "engines. You only need the <strong>sitemapindex</strong> and nothing "
1491
+ #~ "else, those search engines will automatically recognize other included "
1492
+ #~ "sitemaps. You can read a small <a href=\"%s\">How-to</a> if you are "
1493
+ #~ "interested."
1494
+ #~ msgstr ""
1495
+ #~ "在你啟用本外掛之後, 所有的 sitemap索引 應該已經準備妥當. 下一步是向各大搜"
1496
+ #~ "尋引擎提供你的 sitemap索引 . 你只需要提供 <strong>sitemapindex</strong> 就"
1497
+ #~ "好, 搜尋引擎應該會自動抓取包含在內的 sitemap 檔案. 如果你感興趣的話,可以"
1498
+ #~ "觀看 <a href=\"%s\">操作手冊</a> "
1499
+
1500
+ #~ msgid "Ask.com"
1501
+ #~ msgstr "Ask.com"
1502
+
1503
+ #~ msgid "Automatically split post-based sitemaps into smaller sitemaps?"
1504
+ #~ msgstr "自動分割以文章為基礎的 sitemap 成更小的 sitemap"
1505
+
1506
+ #~ msgid "BWP Google XML Sitemaps Statistics"
1507
+ #~ msgstr "BWP Google XML Sitemaps Statistics"
1508
+
1509
+ #~ msgid "Cache directory (\"%s\") does not exist or is not writable."
1510
+ #~ msgstr "快取資料夾 (\"%s\") 不存在或是不允許寫入"
1511
+
1512
+ #~ msgid ""
1513
+ #~ "Cache file for module <em>%s</em> is not found and will be built right "
1514
+ #~ "away."
1515
+ #~ msgstr "沒有找到模組 <em>%s</em> 的快取檔案,系統將會建立一個。"
1516
+
1517
+ #~ msgid "Cached sitemaps are stored in (auto detected)"
1518
+ #~ msgstr "快取檔案的所在地 (自動填寫)"
1519
+
1520
+ #~ msgid "Cached sitemaps will last for"
1521
+ #~ msgstr "快取的有效期"
1522
+
1523
+ #~ msgid "Caching Options"
1524
+ #~ msgstr "快取設定"
1525
+
1526
+ #~ msgid "Clean unexpected output before sitemap generation?"
1527
+ #~ msgstr "在產生 sitemap 之前清理非預期的輸出"
1528
+
1529
+ #~ msgid "Contact"
1530
+ #~ msgstr "聯絡我"
1531
+
1532
+ #~ msgid ""
1533
+ #~ "Could not load module file: <strong>%s</strong> in both default and "
1534
+ #~ "custom module directory. Please recheck if that module file exists."
1535
+ #~ msgstr "無法載入模組檔案 <strong>%s</strong> 。請檢查模組檔案是否存在。"
1536
+
1537
+ #~ msgid "Development Log"
1538
+ #~ msgstr "研發記錄"
1539
+
1540
+ #, fuzzy
1541
+ #~ msgid "Donate to %s"
1542
+ #~ msgstr "贊助"
1543
+
1544
+ #~ msgid "Enable Gzip?"
1545
+ #~ msgstr "啟用 GZIP"
1546
+
1547
+ #~ msgid "Enable pinging functionality?"
1548
+ #~ msgstr "啟用 ping 的功能"
1549
+
1550
+ #~ msgid "Enable pinging individual SE"
1551
+ #~ msgstr "允許告知的 搜尋引擎"
1552
+
1553
+ #~ msgid "Error %s from %s"
1554
+ #~ msgstr "錯誤 %s 來至於 %s"
1555
+
1556
+ #~ msgid "Follow me on Twitter!"
1557
+ #~ msgstr "追隨我的 Twitter!"
1558
+
1559
+ #~ msgid "Frequently Asked Questions"
1560
+ #~ msgstr "常見問題"
1561
+
1562
+ #~ msgid "Get no more than"
1563
+ #~ msgstr "得到不超過"
1564
+
1565
+ #~ msgid "Got a problem? Send me a feedback!"
1566
+ #~ msgstr "有問題嗎?通知我吧!"
1567
+
1568
+ #~ msgid ""
1569
+ #~ "If you disable this, make sure you also use "
1570
+ #~ "<code>date_default_timezone_set</code> to correctly set up a timezone for "
1571
+ #~ "your application."
1572
+ #~ msgstr ""
1573
+ #~ "如果你停用這選項,請確定你有使用 <code>date_default_timezone_set</code> 來"
1574
+ #~ "正確的設定網站的時區。"
1575
+
1576
+ #~ msgid ""
1577
+ #~ "In its simplest form, a Sitemap is an XML file that lists URLs for a site "
1578
+ #~ "along with additional metadata about each URL (when it was last updated, "
1579
+ #~ "how often it usually changes, and how important it is, relative to other "
1580
+ #~ "URLs in the site) so that search engines can more intelligently crawl the "
1581
+ #~ "site &mdash; <em>http://www.sitemaps.org/</em>"
1582
+ #~ msgstr ""
1583
+ #~ "簡單的說, Sitemap 是一個 XML 檔案將網站的網址及與各網址相關的其他中繼資料 "
1584
+ #~ "(上次更新日期、變更頻率,以及相對於網站中其他網址的重要性) 列在 XML 檔中,"
1585
+ #~ "讓搜尋引擎能夠更有效地檢索該網站 &mdash; <em>http://www.sitemaps.org/</em>"
1586
+
1587
+ #~ msgid "In sitemapindex, include"
1588
+ #~ msgstr "在 sitemap 索引中包含"
1589
+
1590
+ #~ msgid ""
1591
+ #~ "Input a full path to the directory where you put your own modules (e.g. "
1592
+ #~ "<code>/home/mysite/public_html/gxs-modules/</code>), you can also "
1593
+ #~ "override a built-in module by having a module with the same filename in "
1594
+ #~ "this directory. A filter is also available if you would like to use PHP "
1595
+ #~ "instead."
1596
+ #~ msgstr ""
1597
+ #~ "輸入你的模組所在的資料夾的絕對目錄 (例如 <code>/home/mysite/public_html/"
1598
+ #~ "gxs-modules/</code>), 你可以藉由使用跟預設模組相同的名稱來改寫內建的模組內"
1599
+ #~ "容. A filter is also available if you would like to use PHP instead."
1600
+
1601
+ #~ msgid "Latest updates from BetterWP.net!"
1602
+ #~ msgstr "BetterWP.net 的最新訊息"
1603
+
1604
+ #~ msgid ""
1605
+ #~ "Minor errors will be printed on screen. Also, when debug is on, no "
1606
+ #~ "caching is used, useful when you develop new modules."
1607
+ #~ msgstr ""
1608
+ #~ "錯誤將顯示是在螢幕上. 當啟用偵錯模式,將不會使用快取系統,當你在寫新的 模"
1609
+ #~ "組 時是很有用的。"
1610
+
1611
+ #~ msgid "No additional load is needed so enabling this is recommended."
1612
+ #~ msgstr "如果沒有額外的負載需求建議啟用。"
1613
+
1614
+ #~ msgid ""
1615
+ #~ "Nothing here... yet! Try submitting your <a href=\"%s\">sitemapindex</a> "
1616
+ #~ "first!"
1617
+ #~ msgstr "還沒有任何的東西! 請先嘗試連結 <a href=\"%s\">sitemapindex</a>!"
1618
+
1619
+ #~ msgid "Output no more than"
1620
+ #~ msgstr "輸出不超過"
1621
+
1622
+ #~ msgid "Ping limit for today to %s has been reached, sorry!"
1623
+ #~ msgstr "對不起!已超過本日的限額 %s。"
1624
+
1625
+ #~ msgid "Show build stats in sitemaps?"
1626
+ #~ msgstr "添加生成狀態在 sitemap 中"
1627
+
1628
+ #~ msgid "Style your sitemaps with an XSLT stylesheet?"
1629
+ #~ msgstr "為你的 sitemap 加上 XSLT 樣式"
1630
+
1631
+ #~ msgid ""
1632
+ #~ "Sub-module file: <strong>%s</strong> is not available in both default and "
1633
+ #~ "custom module directory. The plugin will now try loading the parent "
1634
+ #~ "module instead."
1635
+ #~ msgstr ""
1636
+ #~ "子模組 <strong>%s</strong> 檔案並不存在於預設或是自行定義的模組資料夾中。"
1637
+ #~ "外掛將會嘗試以其父模組取代他的作用。"
1638
+
1639
+ #~ msgid "Submit your sitemaps"
1640
+ #~ msgstr "提交你的 sitemap"
1641
+
1642
+ #~ msgid ""
1643
+ #~ "This plugin helps you generate both Sitemap Index files as well as normal "
1644
+ #~ "Sitemap files. A Sitemap Index, as its name suggests, is one kind of "
1645
+ #~ "sitemaps that allows you to group multiple sitemap files inside it."
1646
+ #~ msgstr ""
1647
+ #~ "本外掛協助你生成 sitemap 的索引檔與 sitemap 的內容. sitemap 索引檔, 就如同"
1648
+ #~ "他的名稱,他也是一種 sitemap 檔案包含了很多 sitemap 檔案的資訊在其中。"
1649
+
1650
+ #, fuzzy
1651
+ #~ msgid "What is a Google News Sitemap?"
1652
+ #~ msgstr "什麼是 Sitemap?"
1653
+
1654
+ #~ msgid "You do not have sufficient permissions to access this page."
1655
+ #~ msgstr "你沒有足夠的權限來閱讀本頁面。"
1656
+
1657
+ #~ msgid "e.g. post1.xml, post2.xml, etc. And each sitemap will contain"
1658
+ #~ msgstr "例如:post1.xml, post2.xml 等。而且每一個 sitemap 包含"
1659
+
1660
+ #~ msgid ""
1661
+ #~ "external pages' sitemap. This allows you to add links to pages that do "
1662
+ #~ "not belong to WordPress to the sitemap."
1663
+ #~ msgstr "外部頁面的 sitemap。使你可以添加一些不屬於 WordPress 生成的頁面。"
1664
+
1665
+ #~ msgid ""
1666
+ #~ "item(s) in one SQL query. This helps you avoid running too heavy queries."
1667
+ #~ msgstr "項目在一個 SQL 查詢中。 這可以避免過慢的查詢。"
1668
+
1669
+ #~ msgid "item(s) in one sitemap. You can not go over 50,000."
1670
+ #~ msgstr "項目在一個 sitemap 中。不能超過 50,000。"
1671
+
1672
+ #~ msgid "item(s). Again , you can not go over 50,000."
1673
+ #~ msgstr "項目。再次重申,不可以超過 50,000"
1674
+
1675
+ #~ msgid "log"
1676
+ #~ msgstr "log"
1677
+
1678
+ #~ msgid "make your sitemaps ~ 70% smaller."
1679
+ #~ msgstr "make your sitemaps ~ 70% smaller."
1680
+
1681
+ #~ msgid ""
1682
+ #~ "only disable this when sitemaps appear in either blank page or plain text."
1683
+ #~ msgstr "只有在 sitemap 出現一片空白或純文字呈現的時候才要停用。"
1684
+
1685
+ #~ msgid "read more"
1686
+ #~ msgstr "更多資訊"
1687
+
1688
+ #~ msgid "static pages' sitemap."
1689
+ #~ msgstr "static pages' sitemap."
1690
+
1691
+ #~ msgid "tag archives' sitemaps."
1692
+ #~ msgstr "tag archives' sitemaps."
languages/bwp-simple-gxs-es_ES.mo DELETED
Binary file
languages/bwp-simple-gxs-es_ES.po DELETED
@@ -1,1035 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: BWP Google XML Sitemaps\n"
4
- "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2012-04-03 20:10+0700\n"
6
- "PO-Revision-Date: 2013-11-04 15:26+0100\n"
7
- "Last-Translator: ruben <info@usitility.com>\n"
8
- "Language-Team: \n"
9
- "MIME-Version: 1.0\n"
10
- "Content-Type: text/plain; charset=UTF-8\n"
11
- "Content-Transfer-Encoding: 8bit\n"
12
- "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n"
13
- "X-Poedit-Basepath: .\n"
14
- "X-Poedit-SourceCharset: UTF-8\n"
15
- "Language: ES_es\n"
16
- "X-Generator: Poedit 1.5.4\n"
17
- "X-Poedit-SearchPath-0: .\n"
18
-
19
- #: includes/class-bwp-framework.php:177
20
- #, php-format
21
- msgid ""
22
- "%s requires WordPress <strong>%s</strong> or higher and PHP <strong>%s</"
23
- "strong> or higher. The plugin will not function until you update your "
24
- "software. Please deactivate this plugin."
25
- msgstr ""
26
- "%s requiere WordPress <strong>%s</strong> o superior y PHP <strong>%s</"
27
- "strong> o superior. El plugin no funcionará hasta que no actualices tu "
28
- "software. Por favor, desactiva el plugin."
29
-
30
- #: includes/class-bwp-framework.php:188
31
- msgid "Development Log"
32
- msgstr "Log de Desarrollo"
33
-
34
- #: includes/class-bwp-framework.php:188
35
- msgid "Frequently Asked Questions"
36
- msgstr "Preguntas Más Frecuentes"
37
-
38
- #: includes/class-bwp-framework.php:188
39
- msgid "FAQ"
40
- msgstr "Preguntas frecuentes"
41
-
42
- #: includes/class-bwp-framework.php:188
43
- msgid "Got a problem? Send me a feedback!"
44
- msgstr "¿Tienes algún problema? !Mánda un comentario!"
45
-
46
- #: includes/class-bwp-framework.php:188
47
- msgid "Contact"
48
- msgstr "Contacto"
49
-
50
- #: includes/class-bwp-framework.php:195
51
- msgid ""
52
- "You can buy me some special coffees if you appreciate my work, thank you!"
53
- msgstr ""
54
- "Puedes comprarme algñun cafe especial si aprecias mi trabajo, !Gracias!"
55
-
56
- #: includes/class-bwp-framework.php:209
57
- msgid "Donate to "
58
- msgstr "Donar a"
59
-
60
- #: includes/class-bwp-framework.php:211
61
- msgid "One cup $5.00"
62
- msgstr "Una taza $5.00"
63
-
64
- #: includes/class-bwp-framework.php:212
65
- msgid "Two cups $10.00"
66
- msgstr "Dos tazas $10"
67
-
68
- #: includes/class-bwp-framework.php:213
69
- msgid "Five cups! $25.00"
70
- msgstr "Cinco tazas! $25"
71
-
72
- #: includes/class-bwp-framework.php:214
73
- msgid "One LL-cup!!! $50.00"
74
- msgstr "Una Taza ExtraGrande!!! $50"
75
-
76
- #: includes/class-bwp-framework.php:215
77
- msgid "... or any amount!"
78
- msgstr "... o cualquier cantidad!"
79
-
80
- #: includes/class-bwp-framework.php:230
81
- msgid "Latest updates from BetterWP.net!"
82
- msgstr "¡Ultimas actualizaciones de BetterWP.net!"
83
-
84
- #: includes/class-bwp-framework.php:231
85
- msgid "Follow me on Twitter!"
86
- msgstr "¡Sígueme en Twitter!"
87
-
88
- #: includes/class-bwp-framework.php:240
89
- #, php-format
90
- msgid "You are using version %s!"
91
- msgstr "Estás usando la versión %s!"
92
-
93
- #: includes/class-bwp-framework.php:385
94
- msgid "Settings"
95
- msgstr "Configuración"
96
-
97
- #: includes/class-bwp-gxs-cache.php:34
98
- #, php-format
99
- msgid "Cache directory (\"%s\") does not exist or is not writable."
100
- msgstr "El directorio (\"%s\") no existe o no se puede escribir en él."
101
-
102
- #: includes/class-bwp-gxs-cache.php:56
103
- #, php-format
104
- msgid ""
105
- "Cache file for module <em>%s</em> is not found and will be built right away."
106
- msgstr ""
107
- "Fichero Caché para el módulo <em>%s</em> no ha sido encontrado y será "
108
- "generado de inmediato."
109
-
110
- #: includes/class-bwp-gxs-cache.php:108 includes/class-bwp-simple-gxs.php:1341
111
- #, php-format
112
- msgid "Successfully served a cached version of <em>%s.xml</em>."
113
- msgstr ""
114
- "Se ha servido satisfactoriamente una versión cacheada de <em>%s.xml</em>."
115
-
116
- #: includes/class-bwp-simple-gxs.php:141 includes/class-bwp-simple-gxs.php:347
117
- #: includes/class-bwp-simple-gxs.php:354
118
- msgid "Sitemap Statistics"
119
- msgstr "Estadísticas de Sitemap"
120
-
121
- #: includes/class-bwp-simple-gxs.php:142 includes/class-bwp-simple-gxs.php:348
122
- #: includes/class-bwp-simple-gxs.php:355
123
- msgid "Sitemap Generator"
124
- msgstr "Generador de Sitemap"
125
-
126
- #: includes/class-bwp-simple-gxs.php:143 includes/class-bwp-simple-gxs.php:349
127
- #: includes/class-bwp-simple-gxs.php:356
128
- msgid "News Sitemap"
129
- msgstr "Nuevo Sitemap"
130
-
131
- #: includes/class-bwp-simple-gxs.php:174
132
- #, php-format
133
- msgid ""
134
- "This sitemap was originally generated in %s second(s) (Memory usage: %s) - "
135
- "%s queries - %s URL(s) listed"
136
- msgstr ""
137
- "Este sitemap fue originalmente generado en %s segundo(s) (Uso de Memoria: "
138
- "%s) - %s consultas - %s URL(s) listadas"
139
-
140
- #: includes/class-bwp-simple-gxs.php:347 includes/class-bwp-simple-gxs.php:354
141
- msgid "BWP Google XML Sitemaps Statistics"
142
- msgstr "BWP Google XML Sitemaps Estadísticas"
143
-
144
- #: includes/class-bwp-simple-gxs.php:348 includes/class-bwp-simple-gxs.php:355
145
- msgid "BWP Google XML Sitemaps Generator"
146
- msgstr "BWP Google XML Sitemaps Generador"
147
-
148
- #: includes/class-bwp-simple-gxs.php:349 includes/class-bwp-simple-gxs.php:356
149
- msgid "BWP Google News XML Sitemap"
150
- msgstr "BWP Google Sitemap de Noticias XML"
151
-
152
- #: includes/class-bwp-simple-gxs.php:353
153
- msgid "BWP Google XML Sitemaps"
154
- msgstr "BWP Google XML Sitemaps"
155
-
156
- #: includes/class-bwp-simple-gxs.php:368
157
- msgid "You do not have sufficient permissions to access this page."
158
- msgstr "No tienes permisos suficientes para acceder a esta página."
159
-
160
- #: includes/class-bwp-simple-gxs.php:389 includes/class-bwp-simple-gxs.php:736
161
- #: includes/class-bwp-simple-gxs.php:738
162
- msgid "Notice"
163
- msgstr "Noticia"
164
-
165
- #: includes/class-bwp-simple-gxs.php:389
166
- msgid "All logs have been cleared successfully!"
167
- msgstr "Todos los logs se han limpiado con éxito!"
168
-
169
- #: includes/class-bwp-simple-gxs.php:396
170
- msgid "What are Sitemaps?"
171
- msgstr "¿Qué son los Sitemap?"
172
-
173
- #: includes/class-bwp-simple-gxs.php:397
174
- msgid "Your sitemaps"
175
- msgstr "Tus sitemaps"
176
-
177
- #: includes/class-bwp-simple-gxs.php:398
178
- msgid "Submit your sitemaps"
179
- msgstr "Envía tus sitemaps"
180
-
181
- #: includes/class-bwp-simple-gxs.php:399
182
- msgid "Pinging search engines"
183
- msgstr "Motores de búsqueda"
184
-
185
- #: includes/class-bwp-simple-gxs.php:400
186
- msgid "Enable pinging functionality?"
187
- msgstr "¿Activar funcionalidad de ping?"
188
-
189
- #: includes/class-bwp-simple-gxs.php:401
190
- msgid "Enable pinging individual SE"
191
- msgstr "Activar ping a MB individuales"
192
-
193
- #: includes/class-bwp-simple-gxs.php:402
194
- msgid "Sitemap Generator's Log"
195
- msgstr "Log de Sitemap Generator"
196
-
197
- #: includes/class-bwp-simple-gxs.php:403
198
- msgid "Enable logging?"
199
- msgstr "¿Habilitar registro?"
200
-
201
- #: includes/class-bwp-simple-gxs.php:404
202
- msgid "Enable debugging?"
203
- msgstr "¿Habilitar la Depuración?"
204
-
205
- #: includes/class-bwp-simple-gxs.php:413
206
- msgid ""
207
- "In its simplest form, a Sitemap is an XML file that lists URLs for a site "
208
- "along with additional metadata about each URL (when it was last updated, how "
209
- "often it usually changes, and how important it is, relative to other URLs in "
210
- "the site) so that search engines can more intelligently crawl the site "
211
- "&mdash; <em>http://www.sitemaps.org/</em>"
212
- msgstr ""
213
- "En su forma más sencilla, un Sitemap es un fichero XML que lista URLs de un "
214
- "sitio junto con metadatos adicionales sobre cada URL (cuando fue la última "
215
- "actualización, con que frecuencia cambia, y cuan importante es en relación "
216
- "con otras URLs del sitio) por lo que los motores de búsqueda pueden rastrear "
217
- "de forma más inteligente el sitio &mdash; <em>http://www.sitemaps.org/</em>"
218
-
219
- #: includes/class-bwp-simple-gxs.php:413
220
- msgid ""
221
- "This plugin helps you generate both Sitemap Index files as well as normal "
222
- "Sitemap files. A Sitemap Index, as its name suggests, is one kind of "
223
- "sitemaps that allows you to group multiple sitemap files inside it."
224
- msgstr ""
225
- "Este plugin te ayuda a generar tanto ficheros Index de Sitemap como ficheros "
226
- "normales de Sitemap. Un Index de Sitemap es un tipo de sitemap que te "
227
- "permite agrupar múltiples ficheros sitemap dentro de él."
228
-
229
- #: includes/class-bwp-simple-gxs.php:414
230
- msgid "<em>Basic information about all your sitemaps.</em>"
231
- msgstr "<em>Información básica sobre todos tus sitemaps.</em>"
232
-
233
- #: includes/class-bwp-simple-gxs.php:415
234
- msgid ""
235
- "<em>More detailed information about how your sitemaps are generated "
236
- "including <span style=\"color: #999999;\">notices</span>, <span style="
237
- "\"color: #FF0000;\">errors</span> and <span style=\"color: #009900;"
238
- "\">success messages</span>.</em>"
239
- msgstr ""
240
- "<em>Más información detallada sobre como tus sitemaps han sido generados "
241
- "incluyendo <span style=\"color: #999999;\">noticias</span>, <span style="
242
- "\"color: #FF0000;\">errores</span> and <span style=\"color: #009900;"
243
- "\">mensajes satisfactorios</span>.</em>"
244
-
245
- #: includes/class-bwp-simple-gxs.php:416
246
- #, php-format
247
- msgid ""
248
- "<em>Submit your sitemapindex to major search engines like <a href=\"%s\" "
249
- "target=\"_blank\">Google</a>, <a href=\"%s\" target=\"_blank\">Bing</a> or "
250
- "<a href=\"%s\" target=\"_blank\">Ask</a>.</em>"
251
- msgstr ""
252
- "<em>Enviar tu sitemapindex a los principales motores de búsqueda como <a "
253
- "href=\"%s\" target=\"_blank\">Google</a>, <a href=\"%s\" target=\"_blank"
254
- "\">Bing</a> o <a href=\"%s\" target=\"_blank\">Ask</a>.</em>"
255
-
256
- #: includes/class-bwp-simple-gxs.php:417
257
- msgid ""
258
- "<em>Now when you post something new to your blog, you can <em>ping</em> "
259
- "those search engines to tell them your blog just got updated. Pinging could "
260
- "be less effective than you think it is but you should enable such feature "
261
- "anyway.</em>"
262
- msgstr ""
263
- "<em>Ahora, cada vez que escribas algo nuevo en tu blog, podraás hacer "
264
- "<em>ping</em> a los motores de búsqueda e informarles de que tu blog ha sido "
265
- "actualizado. Hacer Ping puede ser menos efectivo de lo que piensas, pero aun "
266
- "así deberías habilitar esta característica.</em>"
267
-
268
- #: includes/class-bwp-simple-gxs.php:422
269
- msgid "Selected SE below will be pinged when you publish new posts."
270
- msgstr ""
271
- "Lo MB seleccionados abajo serán informados (Ping) cuando publiques nuevas "
272
- "entradas."
273
-
274
- #: includes/class-bwp-simple-gxs.php:423
275
- msgid "No additional load is needed so enabling this is recommended."
276
- msgstr ""
277
- "\"Sin carga adicional\" es necesario, por lo que habilitarlo está recomendado"
278
-
279
- #: includes/class-bwp-simple-gxs.php:424
280
- msgid ""
281
- "Minor errors will be printed on screen. Also, when debug is on, no caching "
282
- "is used, useful when you develop new modules."
283
- msgstr ""
284
- "Pequeños errores serán mostrados en pantalla. También, si la depuración "
285
- "(debug) está activa, no se usará la caché, lo cual es útil cuando "
286
- "desarrollas nuevos módulos."
287
-
288
- #: includes/class-bwp-simple-gxs.php:425
289
- msgid "Google"
290
- msgstr "Google"
291
-
292
- #: includes/class-bwp-simple-gxs.php:426
293
- msgid "Bing"
294
- msgstr "Bing"
295
-
296
- #: includes/class-bwp-simple-gxs.php:427
297
- msgid "Ask.com"
298
- msgstr "Ask.com"
299
-
300
- #: includes/class-bwp-simple-gxs.php:430
301
- #, php-format
302
- msgid ""
303
- "After you activate this plugin, all sitemaps should be available right away. "
304
- "The next step is to submit the sitemapindex to major search engines. You "
305
- "only need the <strong>sitemapindex</strong> and nothing else, those search "
306
- "engines will automatically recognize other included sitemaps. You can read a "
307
- "small <a href=\"%s\">How-to</a> if you are interested."
308
- msgstr ""
309
- "Después de activar este plugin, todos los sitemaps estarán disponibles de "
310
- "inmediato. El siguiente paso es enviar el sitemapindex a los principales "
311
- "motores de búsqueda. Solo necesitas el <strong>sitemapindex</strong> y nada "
312
- "más, los motores de búsqueda reconocerán los sitemaps incluidos dentro de "
313
- "él. Puedes leer un pequeño <a href=\"%s\">Manual</a> si estás interesado."
314
-
315
- #: includes/class-bwp-simple-gxs.php:458
316
- msgid "Output no more than"
317
- msgstr "Mostrar no más de"
318
-
319
- #: includes/class-bwp-simple-gxs.php:459
320
- msgid "Default change frequency"
321
- msgstr "Frecuencia de cambio por defecto"
322
-
323
- #: includes/class-bwp-simple-gxs.php:460
324
- msgid "Default priority"
325
- msgstr "Prioridad por defecto"
326
-
327
- #: includes/class-bwp-simple-gxs.php:461
328
- msgid "Minimum priority"
329
- msgstr "Prioridad mínima"
330
-
331
- #: includes/class-bwp-simple-gxs.php:462
332
- msgid "Use GMT for Last Modified date?"
333
- msgstr "¿Usar GMT para la Última Fecha de modificación?"
334
-
335
- #: includes/class-bwp-simple-gxs.php:463
336
- msgid "Style your sitemaps with an XSLT stylesheet?"
337
- msgstr "¿Dar estilo a tus sitemaps con una hoja de estilos XSLT?"
338
-
339
- #: includes/class-bwp-simple-gxs.php:464
340
- msgid "Custom XSLT stylesheet URL"
341
- msgstr "URL para la hoja de estilo XSLT"
342
-
343
- #: includes/class-bwp-simple-gxs.php:465
344
- msgid "Show build stats in sitemaps?"
345
- msgstr "¿Ver las estadísticas de construcción en los sitemaps?"
346
-
347
- #: includes/class-bwp-simple-gxs.php:466
348
- msgid "Enable credit?"
349
- msgstr "¿Activar crédito?"
350
-
351
- #: includes/class-bwp-simple-gxs.php:467
352
- msgid "Enable Gzip?"
353
- msgstr "¿Activar Gzip?"
354
-
355
- #: includes/class-bwp-simple-gxs.php:468
356
- msgid "Clean unexpected output before sitemap generation?"
357
- msgstr "¿Limpiar la salida inesperada antes de que se genere el sitemap?"
358
-
359
- #: includes/class-bwp-simple-gxs.php:469
360
- msgid "Sitemap Index Options"
361
- msgstr "Opciones del Index Sitemap"
362
-
363
- #: includes/class-bwp-simple-gxs.php:470
364
- msgid "Automatically split post-based sitemaps into smaller sitemaps?"
365
- msgstr ""
366
- "¿Dividir automáticamente los sitemaps de entradas en sitemaps más pequeños?"
367
-
368
- #: includes/class-bwp-simple-gxs.php:471
369
- msgid "Add sitemapindex to individual blog's virtual robots.txt?"
370
- msgstr ""
371
- "¿Añadir sitemapindex al fichero robots.txt de los blog virtuales "
372
- "individuales?"
373
-
374
- #: includes/class-bwp-simple-gxs.php:472
375
- msgid ""
376
- "Add sitemapindex from all blogs within network to primary blog's virtual "
377
- "robots.txt?"
378
- msgstr ""
379
- "¿Añadir sitemapindex de todos los blogs pertenecientes a la red, al fichero "
380
- "robots.txt del blog virtual primario?"
381
-
382
- #: includes/class-bwp-simple-gxs.php:473
383
- msgid "In sitemapindex, include"
384
- msgstr "En sitemapindex, incluir"
385
-
386
- #: includes/class-bwp-simple-gxs.php:474
387
- msgid "Exclude following post types:"
388
- msgstr "Excluir los siguientes tipos de entradas:"
389
-
390
- #: includes/class-bwp-simple-gxs.php:475
391
- msgid "Exclude following taxonomies:"
392
- msgstr "Excluir las siguientes taxonomías:"
393
-
394
- #: includes/class-bwp-simple-gxs.php:476
395
- msgid "Module Options"
396
- msgstr "Opciones del Módulo"
397
-
398
- #: includes/class-bwp-simple-gxs.php:477
399
- msgid "Alternate module directory"
400
- msgstr "Directorio alternativo del módulo"
401
-
402
- #: includes/class-bwp-simple-gxs.php:478
403
- msgid "Get no more than"
404
- msgstr "No recibir más de"
405
-
406
- #: includes/class-bwp-simple-gxs.php:479
407
- msgid "Caching Options"
408
- msgstr "Opciones de Caché"
409
-
410
- #: includes/class-bwp-simple-gxs.php:480
411
- msgid "Enable caching?"
412
- msgstr "¿Habilitar caché?"
413
-
414
- #: includes/class-bwp-simple-gxs.php:481
415
- msgid "Enable auto cache re-generation?"
416
- msgstr "¿Habilitar auto regeneración de la caché?"
417
-
418
- #: includes/class-bwp-simple-gxs.php:482
419
- msgid "Cached sitemaps will last for"
420
- msgstr "El sitemap estará en caché durante"
421
-
422
- #: includes/class-bwp-simple-gxs.php:483
423
- msgid "Cached sitemaps are stored in (auto detected)"
424
- msgstr "Lo sitemap cacheados serán almacenados en (autodetectados)"
425
-
426
- #: includes/class-bwp-simple-gxs.php:487
427
- msgid "<em>Cache your sitemaps for better performance.</em>"
428
- msgstr "<em>Cachea tu sitemap para un mejor rendimiento.</em>"
429
-
430
- #: includes/class-bwp-simple-gxs.php:488
431
- #, php-format
432
- msgid ""
433
- "<em>This plugin uses modules to build sitemap data so it is recommended that "
434
- "you extend this plugin using modules rather than hooks. Some of the settings "
435
- "below only affect modules extending the base module class. Read more about "
436
- "using modules <a href=\"%s#using-modules\">here</a>.</em>"
437
- msgstr ""
438
- "<em>Este plugin hace uso de módulos para construir los datos del sitemap, "
439
- "por lo que es recomendable que extiendas este plugin haciendo uso de módulos "
440
- "y no de ganchos (hooks). Algunas de las configuraciones de abajo solo "
441
- "afectan a los módulos que han extendido de la clase básica módulo. Lee más "
442
- "sobre el uso de módulos <a href=\"%s#using-modules\">aquí</a>.</em>"
443
-
444
- #: includes/class-bwp-simple-gxs.php:489
445
- msgid ""
446
- "<em>Here you can change some settings that affect the default Sitemap Index "
447
- "file.</em>"
448
- msgstr ""
449
- "<em>Aquí puedes cambiar algunas configuraciones que afectan al fichero por "
450
- "defecto Sitemap Index.</em>"
451
-
452
- #: includes/class-bwp-simple-gxs.php:503 includes/class-bwp-simple-gxs.php:509
453
- msgid "second(s)"
454
- msgstr "segundo(s)"
455
-
456
- #: includes/class-bwp-simple-gxs.php:504 includes/class-bwp-simple-gxs.php:510
457
- msgid "minute(s)"
458
- msgstr "minuto(s)"
459
-
460
- #: includes/class-bwp-simple-gxs.php:505 includes/class-bwp-simple-gxs.php:511
461
- msgid "hour(s)"
462
- msgstr "hora(s)"
463
-
464
- #: includes/class-bwp-simple-gxs.php:506 includes/class-bwp-simple-gxs.php:512
465
- msgid "day(s)"
466
- msgstr "día(s)"
467
-
468
- #: includes/class-bwp-simple-gxs.php:519 includes/class-bwp-simple-gxs.php:520
469
- #: includes/class-bwp-simple-gxs.php:521
470
- msgid "read more"
471
- msgstr "Leer más"
472
-
473
- #: includes/class-bwp-simple-gxs.php:524
474
- msgid "your sitemaps are generated and then cached to reduce unnecessary work."
475
- msgstr ""
476
- "tu sitemaps han sido generados y cacheados para reducir el trabajo "
477
- "innecesario."
478
-
479
- #: includes/class-bwp-simple-gxs.php:525
480
- msgid ""
481
- "when a cached sitemap expires, this plugin will try to generate the cache "
482
- "again. If you disable this, remember to manually flush the cache once in a "
483
- "while."
484
- msgstr ""
485
- "cuando la caché de un sitemap caduca, este plugin intentará generar la caché "
486
- "de nuevo. Si desactivas esto, recuerda el limpiar la caché manualmente de "
487
- "vez en cuando."
488
-
489
- #: includes/class-bwp-simple-gxs.php:525
490
- msgid "Flush the cache"
491
- msgstr "Vaciar la caché"
492
-
493
- #: includes/class-bwp-simple-gxs.php:526
494
- msgid ""
495
- "tell you useful information such as build time, memory usage, SQL queries, "
496
- "etc."
497
- msgstr ""
498
- "te muestra información útil como tiempo de construcción, uso de memoria, "
499
- "consultas SQL, etc."
500
-
501
- #: includes/class-bwp-simple-gxs.php:527
502
- #, php-format
503
- msgid ""
504
- "make your sitemaps ~ 70% smaller. <strong>Important:</strong> If you see an "
505
- "error after enabling this, it's very likely that you have gzip active on "
506
- "your server already."
507
- msgstr ""
508
- "reduce tu sitemap ~ 70% más pequeño. <strong>Importante:</strong> si ves "
509
- "un error después de activar esto, es muy probable que ya tengas activado "
510
- "gzip en tu servidor."
511
-
512
- #: includes/class-bwp-simple-gxs.php:528
513
- msgid ""
514
- "only disable this when sitemaps appear in either blank page or plain text."
515
- msgstr ""
516
- "solo deshabiliat esto cuando los sitemaps aparecen en blanco o con texto "
517
- "plano."
518
-
519
- #: includes/class-bwp-simple-gxs.php:529
520
- #, php-format
521
- msgid ""
522
- "If you have like 50 blogs, 50 <code>Sitemap: http://example.com/sitemapindex."
523
- "xml</code> entries will be added to your primary blog's robots.txt, i.e. "
524
- "<code>%s</code>."
525
- msgstr ""
526
- "Si te gusta 50 blogs, 50 entradas <code>Sitemap: http://ejemplo.com/"
527
- "sitemapindex.xml</code> serán agregadas al fichero robots.txt de tu blog "
528
- "principal, ej: <code>%s</code>."
529
-
530
- #: includes/class-bwp-simple-gxs.php:530
531
- msgid "taxonomy archives' sitemaps, including custom taxonomies."
532
- msgstr ""
533
- "sitemap de los archivos de taxonomía, incluyendo taxonomías personalizadas."
534
-
535
- #: includes/class-bwp-simple-gxs.php:532
536
- msgid "date archives' sitemaps."
537
- msgstr "Archivos de datos de los sitemaps."
538
-
539
- #: includes/class-bwp-simple-gxs.php:533
540
- msgid ""
541
- "external pages' sitemap. This allows you to add links to pages that do not "
542
- "belong to WordPress to the sitemap."
543
- msgstr ""
544
- "sitemap de páginas externas. Esto permite agregar enlaces ha páginas que no "
545
- "pertenecen al sitemap de WordPress."
546
-
547
- #: includes/class-bwp-simple-gxs.php:534
548
- msgid "some copyrighted info is also added to your sitemaps. Thanks!"
549
- msgstr ""
550
- "alguna información relativa al copyright será agregara a tus sitemaps. "
551
- "¡Gracias!"
552
-
553
- #: includes/class-bwp-simple-gxs.php:535
554
- msgid ""
555
- "This will load the default style sheet provided by this plugin. You can set "
556
- "a custom style sheet below or filter the <code>bwp_gxs_xslt</code> hook."
557
- msgstr ""
558
- "Esto cargará la hoja de estilos por defecto de este plugin. Podrás usar una "
559
- "hoja de estilos personalizada más abajo o usar el gancho (hook) "
560
- "<code>bwp_gxs_xslt</code>."
561
-
562
- #: includes/class-bwp-simple-gxs.php:536
563
- #, php-format
564
- msgid ""
565
- "If you're on a Multi-site installation with Sub-domain enabled, each site "
566
- "will have its own robots.txt, sites in sub-directory will not. Please read "
567
- "the <a href=\"%s#toc-robots\" target=\"_blank\">documentation</a> for more "
568
- "info."
569
- msgstr ""
570
- "Si estás usando una instalación de Multi-Sitio con subdominios activados, "
571
- "cada sitio tendrá su robots.txt, mientras que los sitios en subdirectorios "
572
- "no lo tendrán. Por favor lee la <a href=\"%s#toc-robots\" target=\"_blank"
573
- "\">documentación</a> para más información."
574
-
575
- #: includes/class-bwp-simple-gxs.php:537
576
- msgid "e.g. post1.xml, post2.xml, etc. And each sitemap will contain"
577
- msgstr "ej: post1.xml, post2.xml, etc. Y cada sitemap contendrá"
578
-
579
- #: includes/class-bwp-simple-gxs.php:538
580
- msgid ""
581
- "If you disable this, make sure you also use <code>date_default_timezone_set</"
582
- "code> to correctly set up a timezone for your application."
583
- msgstr ""
584
- "Si desactivas esto, asegúrate de que usas <code>date_default_timezone_set</"
585
- "code> para configurar correctamente la zona horaria de tu aplicación."
586
-
587
- #: includes/class-bwp-simple-gxs.php:539
588
- msgid "author archives' sitemap."
589
- msgstr "archivos de autor de sitemap"
590
-
591
- #: includes/class-bwp-simple-gxs.php:540
592
- msgid ""
593
- "site's home URL sitemap. For a multi-site installation of WordPress, this "
594
- "sitemap will list all domains within your network, not just the main blog. "
595
- "This also supports WPMU Domain Mapping plugin."
596
- msgstr ""
597
- "URL del sitemap principal. Para instalaciones multi-sitio de WordPress, este "
598
- "sitemap listará todos los dominios dentro de tu red, no solo el blog "
599
- "principal. Esto también soporta el plugin WPMU Domain Mapping."
600
-
601
- #: includes/class-bwp-simple-gxs.php:543
602
- msgid "item(s) in one sitemap. You can not go over 50,000."
603
- msgstr "item(s) en un sitemap. No pueden ser más de 50.000."
604
-
605
- #: includes/class-bwp-simple-gxs.php:544
606
- msgid "item(s). Again , you can not go over 50,000."
607
- msgstr "item(s). De nuevo, no pueden ser más de 50.000."
608
-
609
- #: includes/class-bwp-simple-gxs.php:545
610
- msgid ""
611
- "Input a full path to the directory where you put your own modules (e.g. "
612
- "<code>/home/mysite/public_html/gxs-modules/</code>), you can also override a "
613
- "built-in module by having a module with the same filename in this directory. "
614
- "A filter is also available if you would like to use PHP instead."
615
- msgstr ""
616
- "Introduce la ruta completa del directorio donde están tus módulos, (ej: "
617
- "<code>/home/misitio/public_html/gxs-modules/</code>), también puedes "
618
- "sobreescribir un modulo pre-construido, poniendo en este directorio un "
619
- "fichero con el mismo nombre del modulo original. Puedes utilizar un filtro "
620
- "si quieres usar PHP en su lugar."
621
-
622
- #: includes/class-bwp-simple-gxs.php:546
623
- msgid "The cache directory must be writable (i.e. CHMOD to 755 or 777)."
624
- msgstr ""
625
- "El directorio caché debe tener permisos de escritura (ej: CHMOD 755 o 777)."
626
-
627
- #: includes/class-bwp-simple-gxs.php:547
628
- msgid ""
629
- "item(s) in one SQL query. This helps you avoid running too heavy queries."
630
- msgstr ""
631
- "item(s) en una consulta SQL. Esto te ayuda a evitar consultas demasiado "
632
- "pesadas."
633
-
634
- #: includes/class-bwp-simple-gxs.php:550
635
- msgid ""
636
- "expected to be an absolute URL, e.g. <code>http://example.com/my-stylesheet."
637
- "xsl</code>. You must also have a style sheet for the sitemapindex that can "
638
- "be accessed through the above URL, e.g. <code>my-stylesheet.xsl</code> and "
639
- "<code>my-stylesheetindex.xsl</code>). Please leave blank if you do not wish "
640
- "to use."
641
- msgstr ""
642
- "se esperaba una URL absoluta, ej: <code>http://ejemplo.com/mi-stylesheet."
643
- "xsl</code>. Debes tener una hoja de estilos para el sitemapindex que sea "
644
- "accesible mediante la URL anterior, ej: <code>mi-stylesheet.xsl</code> y "
645
- "<code>mi-stylesheetindex.xsl</code>). Por favor, déjalo en blanco si no lo "
646
- "quieres usar."
647
-
648
- #: includes/class-bwp-simple-gxs.php:557
649
- #, php-format
650
- msgid ""
651
- "<em><strong>Note:</strong> If you encounter white page problem, please refer "
652
- "to the <a target=\"_blank\" href=\"%s\">FAQ section</a> to know how to "
653
- "change this limit appropriately to make this plugin work. Also note that, "
654
- "for post-based sitemaps, this option will be overridden by the limit you set "
655
- "in the Sitemap Index Options below.</em>"
656
- msgstr ""
657
- "<em><strong>Nota:</strong> Si encuentras un problema de página en blanco, "
658
- "por favor visita <a target=\"_blank\" href=\"%s\">sección de preguntas "
659
- "frecuente</a> para saber como cambiar adecuadamente este límite para hacer "
660
- "que el plugin funcione. Ten en cuenta, que para los sitemaps basados en "
661
- "post, esta opción será sobreescrita por el limite introducido en la casilla "
662
- "de más abajo de Opciones de Sitemap Index</em>"
663
-
664
- #: includes/class-bwp-simple-gxs.php:659
665
- msgid "What is a Google News Sitemap?"
666
- msgstr "¿Qué es un Sitemap de Noticias Google?"
667
-
668
- #: includes/class-bwp-simple-gxs.php:660
669
- msgid "Enable this module?"
670
- msgstr "¿Activar este módulo?"
671
-
672
- #: includes/class-bwp-simple-gxs.php:661
673
- msgid "Enable Multi-category Mode?"
674
- msgstr "¿Habilitar el Modo Multi-categoriía?"
675
-
676
- #: includes/class-bwp-simple-gxs.php:662
677
- msgid "Ping Search Engines when you publish a news article?"
678
- msgstr ""
679
- "¿Hacer ping a los Motores de Búsqueda cuando publiques un nuevo artículo?"
680
-
681
- #: includes/class-bwp-simple-gxs.php:663
682
- msgid "Use keywords in News Sitemap?"
683
- msgstr "¿Utilizar palabras claves en los Sitemap de Noticias?"
684
-
685
- #: includes/class-bwp-simple-gxs.php:664
686
- msgid "News Sitemap's language"
687
- msgstr "Idioma del Sitemap de Noticias"
688
-
689
- #: includes/class-bwp-simple-gxs.php:665
690
- msgid "News Categories"
691
- msgstr "Categorías de Noticias"
692
-
693
- #: includes/class-bwp-simple-gxs.php:666
694
- msgid "This module will"
695
- msgstr "Este módulo hará"
696
-
697
- #: includes/class-bwp-simple-gxs.php:670
698
- msgid ""
699
- "A Google News Sitemap is a file that allows you to control which content you "
700
- "submit to Google News. By creating and submitting a Google News Sitemap, "
701
- "you're able to help Google News discover and crawl your site's articles "
702
- "&mdash; <em>http://support.google.com/</em>"
703
- msgstr ""
704
- "Un Sitemap de Noticias Google es un fichero que te permite controlar que "
705
- "contenido envías a Goole Noticias. Creando y enviando un Sitemap de Noticias "
706
- "Google, podrás ayudar a Google Noticias a que descubra y rastree los "
707
- "artículos de tu sitio &mdash; <em>http://support.google.com/</em>"
708
-
709
- #: includes/class-bwp-simple-gxs.php:671
710
- msgid ""
711
- "<em>Below you will be able to choose what categories to use (or not use) in "
712
- "the news sitemap. You can also assign genres to a specific category.</em>"
713
- msgstr ""
714
- "<em>Abajo podrás elegir que categorías usar (o no usar) e el sitemap de "
715
- "noticias. También podrás asignar géneros a una categoría específica.</em>"
716
-
717
- #: includes/class-bwp-simple-gxs.php:674
718
- msgid "below selected categories in the news sitemap."
719
- msgstr "categorías seleccionadas más abajo en el sitemap de noticias."
720
-
721
- #: includes/class-bwp-simple-gxs.php:679
722
- msgid "English"
723
- msgstr "Inglés"
724
-
725
- #: includes/class-bwp-simple-gxs.php:680
726
- msgid "French"
727
- msgstr "Francés"
728
-
729
- #: includes/class-bwp-simple-gxs.php:681
730
- msgid "Spanish"
731
- msgstr "Español"
732
-
733
- #: includes/class-bwp-simple-gxs.php:682
734
- msgid "German"
735
- msgstr "Alemán"
736
-
737
- #: includes/class-bwp-simple-gxs.php:683
738
- msgid "Portuguese"
739
- msgstr "Portugués"
740
-
741
- #: includes/class-bwp-simple-gxs.php:684
742
- msgid "Polish"
743
- msgstr "Polaco"
744
-
745
- #: includes/class-bwp-simple-gxs.php:685
746
- msgid "Norwegian"
747
- msgstr "Noruego"
748
-
749
- #: includes/class-bwp-simple-gxs.php:686
750
- msgid "Dutch"
751
- msgstr "Holandés"
752
-
753
- #: includes/class-bwp-simple-gxs.php:687
754
- msgid "Italian"
755
- msgstr "Italiano"
756
-
757
- #: includes/class-bwp-simple-gxs.php:688
758
- msgid "Vietnamese"
759
- msgstr "Vietnamita "
760
-
761
- #: includes/class-bwp-simple-gxs.php:689
762
- msgid "Simplified Chinese"
763
- msgstr "Chino simplificado"
764
-
765
- #: includes/class-bwp-simple-gxs.php:692
766
- msgid "include"
767
- msgstr "Incluir"
768
-
769
- #: includes/class-bwp-simple-gxs.php:693
770
- msgid "exclude"
771
- msgstr "excluir"
772
-
773
- #: includes/class-bwp-simple-gxs.php:696
774
- msgid "news categories"
775
- msgstr "categorías de noticias"
776
-
777
- #: includes/class-bwp-simple-gxs.php:697
778
- msgid "news tags"
779
- msgstr "etiquetas de noticias"
780
-
781
- #: includes/class-bwp-simple-gxs.php:703
782
- msgid ""
783
- "A new <code>post_google_news.xml</code> sitemap will be added to the main "
784
- "<code>sitemapindex.xml</code>."
785
- msgstr ""
786
- "Un nuevo <code>post_google_news.xml</code> sitemap se agregará al fichero "
787
- "<code>sitemapindex.xml</code>."
788
-
789
- #: includes/class-bwp-simple-gxs.php:704
790
- msgid "Keywords are derived from"
791
- msgstr "Las palabras claves derivan de"
792
-
793
- #: includes/class-bwp-simple-gxs.php:705
794
- msgid ""
795
- "This ping works separately from the sitemapindex ping, and only occurs when "
796
- "you publish an article in one of the news categories set below."
797
- msgstr ""
798
- "Este ping funciona separadamente del sitemapindex ping, y se ejecuta "
799
- "únicamente cuando publicas un artículo en una de las categorías de noticias "
800
- "seleccionadas abajo."
801
-
802
- #: includes/class-bwp-simple-gxs.php:706
803
- msgid ""
804
- "This mode is meant for News Blogs that have posts assigned to more than one "
805
- "categories. It is an advanced feature and should only be enabled if you do "
806
- "have similar blogs."
807
- msgstr ""
808
- "Este modo es para los Blogs de Noticias que tiene posts asignados a más de "
809
- "una categoría. Esta es una opción avanzada y solo debe ser activada si "
810
- "tienes un blog similar."
811
-
812
- #: includes/class-bwp-simple-gxs.php:712
813
- msgid ""
814
- ". Do <strong>NOT</strong> use news tags if your news sitemap contains a lot "
815
- "of posts as it can be very inefficient to do so. This will be improved in "
816
- "future versions."
817
- msgstr ""
818
- ". <strong>NO</strong> uses tags de noticias si tu sitemap de noticias "
819
- "contiene muchos posts, ya que esto puede ser muy ineficiente. Esto se "
820
- "mejorará en versiones futuras."
821
-
822
- #: includes/class-bwp-simple-gxs.php:736
823
- #, php-format
824
- msgid "<strong>%d</strong> cached sitemaps have been flushed successfully!"
825
- msgstr ""
826
- "<strong>%d</strong> los sitemaps cacheados han sido borrados correctamente!"
827
-
828
- #: includes/class-bwp-simple-gxs.php:738
829
- msgid ""
830
- "Could not delete any cached sitemaps. Please manually check the cache "
831
- "directory."
832
- msgstr ""
833
- "No se ha podido borrar ningún sitemap cacheado. Por favor, comprueba "
834
- "manualmente el directorio caché."
835
-
836
- #: includes/class-bwp-simple-gxs.php:787
837
- msgid "All options have been saved."
838
- msgstr "Todas las opciones han sido guardadas."
839
-
840
- #: includes/class-bwp-simple-gxs.php:809
841
- msgid "Warning"
842
- msgstr "Aviso"
843
-
844
- #: includes/class-bwp-simple-gxs.php:809
845
- msgid ""
846
- "Cache directory does not exist or is not writable. Please read more about "
847
- "directory permission <a href='http://www.zzee.com/solutions/unix-permissions."
848
- "shtml'>here</a> (Unix)."
849
- msgstr ""
850
- "El directorio caché no existe o no tiene permisos de escritura. Lee más "
851
- "acerca de los permisos de directorio <a href='http://www.zzee.com/solutions/"
852
- "unix-permissions.shtml'>aquí</a> (Unix)."
853
-
854
- #: includes/class-bwp-simple-gxs.php:820
855
- msgid "Clear All Logs"
856
- msgstr "Limpiar todos los registros"
857
-
858
- #: includes/class-bwp-simple-gxs.php:874
859
- msgid "(Debug is on)"
860
- msgstr "(Debug está activado)"
861
-
862
- #: includes/class-bwp-simple-gxs.php:887
863
- msgid "<strong>BWP Google XML Sitemaps Error:</strong> "
864
- msgstr "<strong>BWP Google XML Sitemaps Error:</strong> "
865
-
866
- #: includes/class-bwp-simple-gxs.php:887
867
- msgid "BWP Google XML Sitemaps Error"
868
- msgstr "BWP Google XML Sitemaps Error"
869
-
870
- #: includes/class-bwp-simple-gxs.php:910
871
- #, php-format
872
- msgid ""
873
- "Nothing here... yet! Try submitting your <a href=\"%s\">sitemapindex</a> "
874
- "first!"
875
- msgstr ""
876
- "Nada por aquí... de momento! Primero intenta enviar tu <a href=\"%s"
877
- "\">sitemapindex</a>!"
878
-
879
- #: includes/class-bwp-simple-gxs.php:910
880
- msgid "No log yet!"
881
- msgstr "Aún no hay log"
882
-
883
- #: includes/class-bwp-simple-gxs.php:921
884
- #, php-format
885
- msgid ""
886
- "<a href=\"%s\" target=\"_blank\">%s</a> has been successfully built on "
887
- "<strong>%s</strong>."
888
- msgstr ""
889
- "<a href=\"%s\" target=\"_blank\">%s</a> ha sido construido "
890
- "satisfactoriamente <strong>%s</strong>."
891
-
892
- #: includes/class-bwp-simple-gxs.php:932 includes/class-bwp-simple-gxs.php:949
893
- msgid "M j, Y : H:i:s"
894
- msgstr "j M, Y : H:i:s"
895
-
896
- #: includes/class-bwp-simple-gxs.php:1018
897
- msgid "Category's name"
898
- msgstr "Nombre de la categoría"
899
-
900
- #: includes/class-bwp-simple-gxs.php:1018
901
- #, php-format
902
- msgid ""
903
- "<span>Genres used for this category</span> (more info <a href=\"%s\" target="
904
- "\"_blank\">here</a>)"
905
- msgstr ""
906
- "<span>Géneros usados para esta categoría</span> (más informaciín <a href=\"%s"
907
- "\" target=\"_blank\">aquí</a>)"
908
-
909
- #: includes/class-bwp-simple-gxs.php:1309
910
- #, php-format
911
- msgid "Requested module (<em>%s</em>) not found or not allowed."
912
- msgstr "Modulo requerido (<em>%s</em>) no encontrado o no permitido."
913
-
914
- #: includes/class-bwp-simple-gxs.php:1368
915
- #: includes/class-bwp-simple-gxs.php:1389
916
- #, php-format
917
- msgid "Loaded a custom sub-module file: <strong>%s</strong>."
918
- msgstr "Cargado un fichero personalizado de sub-modulo: <strong>%s</strong>."
919
-
920
- #: includes/class-bwp-simple-gxs.php:1377
921
- #, php-format
922
- msgid ""
923
- "Mapped sub-module file: <strong>%s</strong> is not available in both default "
924
- "and custom module directory. The plugin will now try loading the requested "
925
- "sub-module instead."
926
- msgstr ""
927
- "Fichero Mapeado de sub-modulo: <strong>%s</strong> no está disponible en el "
928
- "directorio default ni en el de modulos personalizados. El plugin va a "
929
- "intentar cargar el sub-modulo requerido en su lugar."
930
-
931
- #: includes/class-bwp-simple-gxs.php:1397
932
- #, php-format
933
- msgid ""
934
- "Sub-module file: <strong>%s</strong> is not available in both default and "
935
- "custom module directory. The plugin will now try loading the parent module "
936
- "instead."
937
- msgstr ""
938
- "Fichero Sub-módulo: <strong>%s</strong> no está disponible en el directorio "
939
- "default ni en el de modulos personalizados. El plugin va a intentar cargar "
940
- "el módulo padre en su lugar."
941
-
942
- #: includes/class-bwp-simple-gxs.php:1411
943
- #, php-format
944
- msgid "Loaded a custom module file: <strong>%s</strong>."
945
- msgstr "Cargado un fichero de módulo personalizado: <strong>%s</strong>."
946
-
947
- #: includes/class-bwp-simple-gxs.php:1417
948
- #, php-format
949
- msgid ""
950
- "Could not load module file: <strong>%s</strong> in both default and custom "
951
- "module directory. Please recheck if that module file exists."
952
- msgstr ""
953
- "No se puede cargar el fichero del módulo: <strong>%s</strong> en el "
954
- "directorio default ni en el de módulos personalizados. Por favor, comprueba "
955
- "que este módulo existe."
956
-
957
- #: includes/class-bwp-simple-gxs.php:1437
958
- #, php-format
959
- msgid ""
960
- "There is no class named <strong>%s</strong> in the module file <strong>%s</"
961
- "strong>."
962
- msgstr ""
963
- "No existe una clase llamada <strong>%s</strong> en el fichero del módulo "
964
- "<strong>%s</strong>."
965
-
966
- #: includes/class-bwp-simple-gxs.php:1446
967
- #, php-format
968
- msgid "Loaded a custom sitemapindex module file: <strong>%s</strong>."
969
- msgstr ""
970
- "Cargado un fichero personalizado de módulo sitemapindex: <strong>%s</strong>."
971
-
972
- #: includes/class-bwp-simple-gxs.php:1469
973
- #, php-format
974
- msgid "Successfully generated <em>%s.xml</em> using module <em>%s</em>."
975
- msgstr ""
976
- "Se ha generado satisfactoriamente <em>%s.xml</em> usando el módulo <em>%s</"
977
- "em>."
978
-
979
- #: includes/class-bwp-simple-gxs.php:1500
980
- msgid ""
981
- "<strong>BWP Google XML Sitemap Message:</strong> Unexpected output (most of "
982
- "the time PHP errors) is preventing BWP GXS from showing any sitemap "
983
- "contents. Try disabling <code>WP_DEBUG</code> or this plugin's debug mode, "
984
- "whichever is on. All unexpected outputs should be shown just above this "
985
- "message. If you don't see any, contact me and I might be able to help."
986
- msgstr ""
987
- "<strong>Mensaje de BWP Google XML Sitemap:</strong> Una salida inesperada "
988
- "(normalmente por errores PHP) está evitando que BWP GXS muestre el contenido "
989
- "del sitemap, Intenta desactivando <code>WP_DEBUG</code> o el modo debug de "
990
- "este plugin, si es que está activo. Todos las salidas inesperadas serán "
991
- "mostradas justo debajo de este mensaje. Si no ves ninguna, contacta conmigo "
992
- "y te echaré una mano."
993
-
994
- #: includes/class-bwp-simple-gxs.php:1630
995
- msgid "Unknown response code from search engines. Ping failed."
996
- msgstr ""
997
- "Código de respuesta desconocido de los motores de búsqueda. Fallo al hacer "
998
- "Ping."
999
-
1000
- #: includes/class-bwp-simple-gxs.php:1632
1001
- #, php-format
1002
- msgid "Pinged %s with %s successfully!"
1003
- msgstr "Se ha hecho Ping %s con %s satisfactoriamente!"
1004
-
1005
- #: includes/class-bwp-simple-gxs.php:1637
1006
- #, php-format
1007
- msgid "Error %s from %s"
1008
- msgstr "Error %s desde %s"
1009
-
1010
- #: includes/class-bwp-simple-gxs.php:1642
1011
- #, php-format
1012
- msgid "Ping limit for today to %s has been reached, sorry!"
1013
- msgstr "El limite de Ping para hoy de %s ha sido alcanzado, lo sentimos!"
1014
-
1015
- #: includes/class-bwp-simple-gxs.php:1670
1016
- #, php-format
1017
- msgid ""
1018
- "<em>%s.xml</em> does not have any item. You can fix this easily by excluding "
1019
- "any post types / terms you do not use in <em>Sitemap Generator</em> tab "
1020
- "within your admin area. If you still see this error, consider checking the "
1021
- "module that generates this sitemap (<em>%s.php</em>)."
1022
- msgstr ""
1023
- "<em>%s.xml</em> no contiene ningún item. Puedes solucionar esto fácilmente "
1024
- "excluyendo cualquier tipo de post / término que no uses en la pestaña de "
1025
- "<em>Sitemap Generator</em> dentro del área de administración. Si continuar "
1026
- "viendo este error, considera revisar el módulo que genera este sitemap (<em>"
1027
- "%s.php</em>)."
1028
-
1029
- #: includes/bwp-option-page/includes/class-bwp-option-page.php:80
1030
- msgid "Plugin Configurations"
1031
- msgstr "Configuraciones de Plugin"
1032
-
1033
- #: includes/bwp-option-page/includes/class-bwp-option-page.php:398
1034
- msgid "Save Changes"
1035
- msgstr "Guardar cambios"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
languages/bwp-simple-gxs-ms_MY.mo DELETED
Binary file
languages/bwp-simple-gxs-ms_MY.po DELETED
@@ -1,793 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: BWP Google XML Sitemaps(Malay Translation)\n"
4
- "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2012-04-03 20:10+0700\n"
6
- "PO-Revision-Date: 2012-04-03 20:10+0700\n"
7
- "Last-Translator: \n"
8
- "Language-Team: <darkcry3r@gmail.com>\n"
9
- "MIME-Version: 1.0\n"
10
- "Content-Type: text/plain; charset=UTF-8\n"
11
- "Content-Transfer-Encoding: 8bit\n"
12
- "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n"
13
- "X-Poedit-Basepath: .\n"
14
- "X-Poedit-SourceCharset: utf-8\n"
15
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
16
- "X-Poedit-Language: Malay\n"
17
- "X-Poedit-Country: MALAYSIA\n"
18
- "X-Poedit-SearchPath-0: .\n"
19
-
20
- #: includes/class-bwp-framework.php:177
21
- #, php-format
22
- msgid "%s requires WordPress <strong>%s</strong> or higher and PHP <strong>%s</strong> or higher. The plugin will not function until you update your software. Please deactivate this plugin."
23
- msgstr "%s memerlukan WordPress <strong>%s</strong> atau yang terbaharu dan PHP <strong>%s</strong> atau yang terbaharu . Plugin ini tidak akan berfungsi sehingga anda menaiktaraf perisian. Sila nyahaktifkan plugin ini."
24
-
25
- #: includes/class-bwp-framework.php:188
26
- msgid "Development Log"
27
- msgstr ""
28
-
29
- #: includes/class-bwp-framework.php:188
30
- msgid "Frequently Asked Questions"
31
- msgstr ""
32
-
33
- #: includes/class-bwp-framework.php:188
34
- msgid "FAQ"
35
- msgstr ""
36
-
37
- #: includes/class-bwp-framework.php:188
38
- msgid "Got a problem? Send me a feedback!"
39
- msgstr ""
40
-
41
- #: includes/class-bwp-framework.php:188
42
- msgid "Contact"
43
- msgstr ""
44
-
45
- #: includes/class-bwp-framework.php:195
46
- #, fuzzy
47
- msgid "You can buy me some special coffees if you appreciate my work, thank you!"
48
- msgstr "Anda boleh menderma jika anda hargai kerja saya, terima kasih!"
49
-
50
- #: includes/class-bwp-framework.php:209
51
- msgid "Donate to "
52
- msgstr ""
53
-
54
- #: includes/class-bwp-framework.php:211
55
- msgid "One cup $5.00"
56
- msgstr ""
57
-
58
- #: includes/class-bwp-framework.php:212
59
- msgid "Two cups $10.00"
60
- msgstr ""
61
-
62
- #: includes/class-bwp-framework.php:213
63
- msgid "Five cups! $25.00"
64
- msgstr ""
65
-
66
- #: includes/class-bwp-framework.php:214
67
- msgid "One LL-cup!!! $50.00"
68
- msgstr ""
69
-
70
- #: includes/class-bwp-framework.php:215
71
- msgid "... or any amount!"
72
- msgstr ""
73
-
74
- #: includes/class-bwp-framework.php:230
75
- msgid "Latest updates from BetterWP.net!"
76
- msgstr ""
77
-
78
- #: includes/class-bwp-framework.php:231
79
- msgid "Follow me on Twitter!"
80
- msgstr ""
81
-
82
- #: includes/class-bwp-framework.php:240
83
- #, php-format
84
- msgid "You are using version %s!"
85
- msgstr "Anda menggunakan versi %s!"
86
-
87
- #: includes/class-bwp-framework.php:385
88
- msgid "Settings"
89
- msgstr "Tetapan"
90
-
91
- #: includes/class-bwp-gxs-cache.php:34
92
- #, php-format
93
- msgid "Cache directory (\"%s\") does not exist or is not writable."
94
- msgstr "Direktori cache (\"%s\") tidak wujud atau tidak boleh dibaca."
95
-
96
- #: includes/class-bwp-gxs-cache.php:56
97
- #, php-format
98
- msgid "Cache file for module <em>%s</em> is not found and will be built right away."
99
- msgstr "Fail cache untuk modul <em>%s</em> tidak dijumpai dan akan dibina segera."
100
-
101
- #: includes/class-bwp-gxs-cache.php:108
102
- #: includes/class-bwp-simple-gxs.php:1341
103
- #, php-format
104
- msgid "Successfully served a cached version of <em>%s.xml</em>."
105
- msgstr "Berjaya melayan versi cache untuk <em>%s.xml</em>."
106
-
107
- #: includes/class-bwp-simple-gxs.php:141
108
- #: includes/class-bwp-simple-gxs.php:347
109
- #: includes/class-bwp-simple-gxs.php:354
110
- msgid "Sitemap Statistics"
111
- msgstr "Statistik Pelan Tapak"
112
-
113
- #: includes/class-bwp-simple-gxs.php:142
114
- #: includes/class-bwp-simple-gxs.php:348
115
- #: includes/class-bwp-simple-gxs.php:355
116
- msgid "Sitemap Generator"
117
- msgstr "Penghasilan Pelan Tapak"
118
-
119
- #: includes/class-bwp-simple-gxs.php:143
120
- #: includes/class-bwp-simple-gxs.php:349
121
- #: includes/class-bwp-simple-gxs.php:356
122
- #, fuzzy
123
- msgid "News Sitemap"
124
- msgstr "Apa itu Pelan tapak?"
125
-
126
- #: includes/class-bwp-simple-gxs.php:174
127
- #, php-format
128
- msgid "This sitemap was originally generated in %s second(s) (Memory usage: %s) - %s queries - %s URL(s) listed"
129
- msgstr "Peta tapak ini asalnya telah dihasilkan selama %s saat (Penggunaan memori: %s) - %s maklumat - %s URL(s) telah disenaraikan"
130
-
131
- #: includes/class-bwp-simple-gxs.php:347
132
- #: includes/class-bwp-simple-gxs.php:354
133
- msgid "BWP Google XML Sitemaps Statistics"
134
- msgstr "Statistik Pelan Tapak Google XML BWP "
135
-
136
- #: includes/class-bwp-simple-gxs.php:348
137
- #: includes/class-bwp-simple-gxs.php:355
138
- msgid "BWP Google XML Sitemaps Generator"
139
- msgstr "Penghasilan Pelan Tapak Google XML BWP"
140
-
141
- #: includes/class-bwp-simple-gxs.php:349
142
- #: includes/class-bwp-simple-gxs.php:356
143
- #, fuzzy
144
- msgid "BWP Google News XML Sitemap"
145
- msgstr "Pelan Tapak Google XML BWP "
146
-
147
- #: includes/class-bwp-simple-gxs.php:353
148
- msgid "BWP Google XML Sitemaps"
149
- msgstr "Pelan Tapak Google XML BWP "
150
-
151
- #: includes/class-bwp-simple-gxs.php:368
152
- msgid "You do not have sufficient permissions to access this page."
153
- msgstr "Anda tidak mempunyai cukup kebenaran untuk mengakses muka ini."
154
-
155
- #: includes/class-bwp-simple-gxs.php:389
156
- #: includes/class-bwp-simple-gxs.php:736
157
- #: includes/class-bwp-simple-gxs.php:738
158
- msgid "Notice"
159
- msgstr "Notis"
160
-
161
- #: includes/class-bwp-simple-gxs.php:389
162
- msgid "All logs have been cleared successfully!"
163
- msgstr ""
164
-
165
- #: includes/class-bwp-simple-gxs.php:396
166
- msgid "What are Sitemaps?"
167
- msgstr "Apa itu Pelan tapak?"
168
-
169
- #: includes/class-bwp-simple-gxs.php:397
170
- msgid "Your sitemaps"
171
- msgstr "Pelan tapak anda"
172
-
173
- #: includes/class-bwp-simple-gxs.php:398
174
- msgid "Submit your sitemaps"
175
- msgstr "Serah pelan tapak anda"
176
-
177
- #: includes/class-bwp-simple-gxs.php:399
178
- msgid "Pinging search engines"
179
- msgstr "Penghantaran ke enjin carian"
180
-
181
- #: includes/class-bwp-simple-gxs.php:400
182
- msgid "Enable pinging functionality?"
183
- msgstr "Benarkan keberkesanan penghantaran? "
184
-
185
- #: includes/class-bwp-simple-gxs.php:401
186
- msgid "Enable pinging individual SE"
187
- msgstr "Benarkan penghantaran SE individu"
188
-
189
- #: includes/class-bwp-simple-gxs.php:402
190
- msgid "Sitemap Generator's Log"
191
- msgstr "Log Penghasilan Pelan Tapak"
192
-
193
- #: includes/class-bwp-simple-gxs.php:403
194
- msgid "Enable logging?"
195
- msgstr "Benarkan log?"
196
-
197
- #: includes/class-bwp-simple-gxs.php:404
198
- msgid "Enable debugging?"
199
- msgstr "Benarkan debugging?"
200
-
201
- #: includes/class-bwp-simple-gxs.php:413
202
- #, fuzzy
203
- msgid "In its simplest form, a Sitemap is an XML file that lists URLs for a site along with additional metadata about each URL (when it was last updated, how often it usually changes, and how important it is, relative to other URLs in the site) so that search engines can more intelligently crawl the site &mdash; <em>http://www.sitemaps.org/</em>"
204
- msgstr "Dalam erti kata mudah, sebuah pelan tapak adalah fail XML yang mengandungi senarai URL untuk halaman bersama-sama dengan metadata tambahan tentang setiap URL (saat terakhir dikemaskinikan, seberapa kerap perubahan biasanya, dan betapa pentingnya, berkait rapat dengan URL lain di tapak ) jadi enjin carian akan lebih berkesan mencari tapak tersebut - http://www.sitemaps.org/"
205
-
206
- #: includes/class-bwp-simple-gxs.php:413
207
- msgid "This plugin helps you generate both Sitemap Index files as well as normal Sitemap files. A Sitemap Index, as its name suggests, is one kind of sitemaps that allows you to group multiple sitemap files inside it."
208
- msgstr ""
209
-
210
- #: includes/class-bwp-simple-gxs.php:414
211
- msgid "<em>Basic information about all your sitemaps.</em>"
212
- msgstr "<em>Maklumat asas tentang keseluruhan pelan tapak anda.</em>"
213
-
214
- #: includes/class-bwp-simple-gxs.php:415
215
- msgid "<em>More detailed information about how your sitemaps are generated including <span style=\"color: #999999;\">notices</span>, <span style=\"color: #FF0000;\">errors</span> and <span style=\"color: #009900;\">success messages</span>.</em>"
216
- msgstr "<em>Maklumat lebih lanjut tentang bagaimana pelan tapak anda telah dihasilkan termasuk <span style=\"color: #999999;\">notices</span>, <span style=\"color: #FF0000;\">ralat</span> dan juga <span style=\"color: #009900;\">mesej berjaya</span>.</em>"
217
-
218
- #: includes/class-bwp-simple-gxs.php:416
219
- #, fuzzy, php-format
220
- msgid "<em>Submit your sitemapindex to major search engines like <a href=\"%s\" target=\"_blank\">Google</a>, <a href=\"%s\" target=\"_blank\">Bing</a> or <a href=\"%s\" target=\"_blank\">Ask</a>.</em>"
221
- msgstr "<em>Hantar indeks pelan tapak anda kepada enjin carian biasa seperti <a href=\"%s\" target=\"_blank\">Google</a>, <a href=\"%s\" target=\"_blank\">Yahoo</a>, <a href=\"%s\" target=\"_blank\">Bing</a> atau <a href=\"%s\" target=\"_blank\">Ask</a>.</em>"
222
-
223
- #: includes/class-bwp-simple-gxs.php:417
224
- msgid "<em>Now when you post something new to your blog, you can <em>ping</em> those search engines to tell them your blog just got updated. Pinging could be less effective than you think it is but you should enable such feature anyway.</em>"
225
- msgstr "<em>Sekarang apabila anda menghantar sesuatu yang baru pada blog anda, anda boleh <em>menguji</em> enjin carian untuk memberitahu mereka bahawa blog anda baru dikemaskinikan. Penghantaran mungkin kurang efektif dari yang anda fikir tetapi anda harus juga benarkan fungsi ini.</em>"
226
-
227
- #: includes/class-bwp-simple-gxs.php:422
228
- msgid "Selected SE below will be pinged when you publish new posts."
229
- msgstr "SE yang dipilih dibawah akan dihantar apabila anda menerbitkan pos baharu."
230
-
231
- #: includes/class-bwp-simple-gxs.php:423
232
- msgid "No additional load is needed so enabling this is recommended."
233
- msgstr "Tiada beban tambahan diperlukan jadi membenarkan ini adalah digalakkan."
234
-
235
- #: includes/class-bwp-simple-gxs.php:424
236
- msgid "Minor errors will be printed on screen. Also, when debug is on, no caching is used, useful when you develop new modules."
237
- msgstr "Ralat kecil akan dicetak pada skrin. Juga, apabila debug diaktifkan, tiada caching akan digunakan, berguna apabila anda mengembangkan modul baharu."
238
-
239
- #: includes/class-bwp-simple-gxs.php:425
240
- msgid "Google"
241
- msgstr "Google"
242
-
243
- #: includes/class-bwp-simple-gxs.php:426
244
- msgid "Bing"
245
- msgstr "Bing"
246
-
247
- #: includes/class-bwp-simple-gxs.php:427
248
- msgid "Ask.com"
249
- msgstr "Ask.com"
250
-
251
- #: includes/class-bwp-simple-gxs.php:430
252
- #, php-format
253
- msgid "After you activate this plugin, all sitemaps should be available right away. The next step is to submit the sitemapindex to major search engines. You only need the <strong>sitemapindex</strong> and nothing else, those search engines will automatically recognize other included sitemaps. You can read a small <a href=\"%s\">How-to</a> if you are interested."
254
- msgstr "Apabila anda aktifkan plugin ini, semua pelan tapak sepatutnya sudah berada. Langkah seterusnya ialah dengan menghantar indeks pelan tapak kepada enjin carian. Anda cuma perlu <strong>indeks pelan tapak</strong> dan selain itu, enjin carian secara automatik mengenalpasti pelan tapak yang lain. Anda boleh merujuk <a href=\"%s\">Langkah-langkah</a> jika anda berminat."
255
-
256
- #: includes/class-bwp-simple-gxs.php:458
257
- msgid "Output no more than"
258
- msgstr "Output tidak lebih dari"
259
-
260
- #: includes/class-bwp-simple-gxs.php:459
261
- msgid "Default change frequency"
262
- msgstr "Ubah frekuensi lalai"
263
-
264
- #: includes/class-bwp-simple-gxs.php:460
265
- msgid "Default priority"
266
- msgstr "Keutamaan lalai"
267
-
268
- #: includes/class-bwp-simple-gxs.php:461
269
- msgid "Minimum priority"
270
- msgstr "Keutamaan minimum"
271
-
272
- #: includes/class-bwp-simple-gxs.php:462
273
- msgid "Use GMT for Last Modified date?"
274
- msgstr ""
275
-
276
- #: includes/class-bwp-simple-gxs.php:463
277
- msgid "Style your sitemaps with an XSLT stylesheet?"
278
- msgstr "Ubah pelan tapak anda dengan gaya lembar XSLT?"
279
-
280
- #: includes/class-bwp-simple-gxs.php:464
281
- msgid "Custom XSLT stylesheet URL"
282
- msgstr "URL gaya lembar XSLT yang diubah"
283
-
284
- #: includes/class-bwp-simple-gxs.php:465
285
- msgid "Show build stats in sitemaps?"
286
- msgstr "Papar status bina dalam pelan tapak?"
287
-
288
- #: includes/class-bwp-simple-gxs.php:466
289
- msgid "Enable credit?"
290
- msgstr "Paparkan penghargaan?"
291
-
292
- #: includes/class-bwp-simple-gxs.php:467
293
- msgid "Enable Gzip?"
294
- msgstr "Benarkan Gzip?"
295
-
296
- #: includes/class-bwp-simple-gxs.php:468
297
- msgid "Clean unexpected output before sitemap generation?"
298
- msgstr ""
299
-
300
- #: includes/class-bwp-simple-gxs.php:469
301
- #, fuzzy
302
- msgid "Sitemap Index Options"
303
- msgstr "Penghasilan Pelan Tapak"
304
-
305
- #: includes/class-bwp-simple-gxs.php:470
306
- msgid "Automatically split post-based sitemaps into smaller sitemaps?"
307
- msgstr ""
308
-
309
- #: includes/class-bwp-simple-gxs.php:471
310
- #, fuzzy
311
- msgid "Add sitemapindex to individual blog's virtual robots.txt?"
312
- msgstr "Tambah indeks pelan tapak kepada WordPress's robots.txt?"
313
-
314
- #: includes/class-bwp-simple-gxs.php:472
315
- #, fuzzy
316
- msgid "Add sitemapindex from all blogs within network to primary blog's virtual robots.txt?"
317
- msgstr "Tambah indeks pelan tapak kepada WordPress's robots.txt?"
318
-
319
- #: includes/class-bwp-simple-gxs.php:473
320
- msgid "In sitemapindex, include"
321
- msgstr "Di dalam indeks pelan tapak, termasuk"
322
-
323
- #: includes/class-bwp-simple-gxs.php:474
324
- msgid "Exclude following post types:"
325
- msgstr ""
326
-
327
- #: includes/class-bwp-simple-gxs.php:475
328
- msgid "Exclude following taxonomies:"
329
- msgstr ""
330
-
331
- #: includes/class-bwp-simple-gxs.php:476
332
- msgid "Module Options"
333
- msgstr "Tetapan modul"
334
-
335
- #: includes/class-bwp-simple-gxs.php:477
336
- msgid "Alternate module directory"
337
- msgstr "Direktori pengganti modul"
338
-
339
- #: includes/class-bwp-simple-gxs.php:478
340
- msgid "Get no more than"
341
- msgstr "Dapat tidak lebih daripada"
342
-
343
- #: includes/class-bwp-simple-gxs.php:479
344
- msgid "Caching Options"
345
- msgstr "Tetapan Caching"
346
-
347
- #: includes/class-bwp-simple-gxs.php:480
348
- msgid "Enable caching?"
349
- msgstr "Benarkan caching?"
350
-
351
- #: includes/class-bwp-simple-gxs.php:481
352
- msgid "Enable auto cache re-generation?"
353
- msgstr "Benarkan auto cache di-generasi?"
354
-
355
- #: includes/class-bwp-simple-gxs.php:482
356
- msgid "Cached sitemaps will last for"
357
- msgstr "Pelan tapak yang di-cache-kan akan bertahan selama"
358
-
359
- #: includes/class-bwp-simple-gxs.php:483
360
- msgid "Cached sitemaps are stored in (auto detected)"
361
- msgstr "Pelan tapak yang di-cache-kan akan disimpan di dalam (auto carian)"
362
-
363
- #: includes/class-bwp-simple-gxs.php:487
364
- msgid "<em>Cache your sitemaps for better performance.</em>"
365
- msgstr "<em>Cache pelan tapak anda untuk prestasi yang memberangsangkan.</em>"
366
-
367
- #: includes/class-bwp-simple-gxs.php:488
368
- #, php-format
369
- msgid "<em>This plugin uses modules to build sitemap data so it is recommended that you extend this plugin using modules rather than hooks. Some of the settings below only affect modules extending the base module class. Read more about using modules <a href=\"%s#using-modules\">here</a>.</em>"
370
- msgstr "<em>Plugin ini menggunakan modul untuk membina data pelan tapak jadi digalakkan untuk anda mengembangkan plugin ini menggunakan modul-modul berbanding dikait. Salah satu daripada tetapan dibawah hanya mempengaruhi dalam memperluas kelas modul asas.Lebih lanjut tentang penggunaan modul <a href=\"%s#using-modules\">disini</a>.</em>"
371
-
372
- #: includes/class-bwp-simple-gxs.php:489
373
- msgid "<em>Here you can change some settings that affect the default Sitemap Index file.</em>"
374
- msgstr ""
375
-
376
- #: includes/class-bwp-simple-gxs.php:503
377
- #: includes/class-bwp-simple-gxs.php:509
378
- msgid "second(s)"
379
- msgstr "saat"
380
-
381
- #: includes/class-bwp-simple-gxs.php:504
382
- #: includes/class-bwp-simple-gxs.php:510
383
- msgid "minute(s)"
384
- msgstr "minit"
385
-
386
- #: includes/class-bwp-simple-gxs.php:505
387
- #: includes/class-bwp-simple-gxs.php:511
388
- msgid "hour(s)"
389
- msgstr "jam"
390
-
391
- #: includes/class-bwp-simple-gxs.php:506
392
- #: includes/class-bwp-simple-gxs.php:512
393
- msgid "day(s)"
394
- msgstr "hari"
395
-
396
- #: includes/class-bwp-simple-gxs.php:519
397
- #: includes/class-bwp-simple-gxs.php:520
398
- #: includes/class-bwp-simple-gxs.php:521
399
- msgid "read more"
400
- msgstr "lebih lanjut"
401
-
402
- #: includes/class-bwp-simple-gxs.php:524
403
- msgid "your sitemaps are generated and then cached to reduce unnecessary work."
404
- msgstr "pelan tapak anda telah dihasilkan dan kemudian di-cache-kan untuk mengurangkan kerja yang diperlukan."
405
-
406
- #: includes/class-bwp-simple-gxs.php:525
407
- msgid "when a cached sitemap expires, this plugin will try to generate the cache again. If you disable this, remember to manually flush the cache once in a while."
408
- msgstr "apabila cache pelan tapak luput, plugin ini akan cuba untuk menghasilkan cache lagi. Jika anda tidak membenarkan ini, waspada untuk membuang cache secara manual sekali sekala."
409
-
410
- #: includes/class-bwp-simple-gxs.php:525
411
- msgid "Flush the cache"
412
- msgstr "Buang cache"
413
-
414
- #: includes/class-bwp-simple-gxs.php:526
415
- msgid "tell you useful information such as build time, memory usage, SQL queries, etc."
416
- msgstr "beritahu anda maklumat seperti masa bina, pengunaan memori, maklumat SQL dan lain-lain."
417
-
418
- #: includes/class-bwp-simple-gxs.php:527
419
- #, php-format
420
- msgid "make your sitemaps ~ 70% smaller. <strong>Important:</strong> If you see an error after enabling this, it's very likely that you have gzip active on your server already."
421
- msgstr ""
422
-
423
- #: includes/class-bwp-simple-gxs.php:528
424
- msgid "only disable this when sitemaps appear in either blank page or plain text."
425
- msgstr ""
426
-
427
- #: includes/class-bwp-simple-gxs.php:529
428
- #, php-format
429
- msgid "If you have like 50 blogs, 50 <code>Sitemap: http://example.com/sitemapindex.xml</code> entries will be added to your primary blog's robots.txt, i.e. <code>%s</code>."
430
- msgstr ""
431
-
432
- #: includes/class-bwp-simple-gxs.php:530
433
- msgid "taxonomy archives' sitemaps, including custom taxonomies."
434
- msgstr "menamakan arkib pelan tapak, termasuk yang diubahsuai."
435
-
436
- #: includes/class-bwp-simple-gxs.php:532
437
- msgid "date archives' sitemaps."
438
- msgstr "tarikh arkib pelan tapak."
439
-
440
- #: includes/class-bwp-simple-gxs.php:533
441
- msgid "external pages' sitemap. This allows you to add links to pages that do not belong to WordPress to the sitemap."
442
- msgstr ""
443
-
444
- #: includes/class-bwp-simple-gxs.php:534
445
- msgid "some copyrighted info is also added to your sitemaps. Thanks!"
446
- msgstr "sedikit maklumat hakcipta juga akan ditambah pada pelan tapak anda. Terima kasih! "
447
-
448
- #: includes/class-bwp-simple-gxs.php:535
449
- #, fuzzy
450
- msgid "This will load the default style sheet provided by this plugin. You can set a custom style sheet below or filter the <code>bwp_gxs_xslt</code> hook."
451
- msgstr "Ini akan menambah gaya lembar lalai yang dibekalkan dengan plugin ini. Anda boleh menetapkan gaya lembar yang diubahsuai di bawah atau dengan menapis <code>bwp_gxs_xslt</code>."
452
-
453
- #: includes/class-bwp-simple-gxs.php:536
454
- #, php-format
455
- msgid "If you're on a Multi-site installation with Sub-domain enabled, each site will have its own robots.txt, sites in sub-directory will not. Please read the <a href=\"%s#toc-robots\" target=\"_blank\">documentation</a> for more info."
456
- msgstr "Jika anda di dalam Multi-tapak pemasangan dengan Sub-domain digunakan, setiap tapak akan ada setiap robot.txt sendiri, manakala tapak di dalam sub- direktori adalah sebaliknya. Sila rujuk <a href=\"%s#toc-robots\" target=\"_blank\">dokumentasi</a> untuk maklumat terperinci."
457
-
458
- #: includes/class-bwp-simple-gxs.php:537
459
- msgid "e.g. post1.xml, post2.xml, etc. And each sitemap will contain"
460
- msgstr ""
461
-
462
- #: includes/class-bwp-simple-gxs.php:538
463
- msgid "If you disable this, make sure you also use <code>date_default_timezone_set</code> to correctly set up a timezone for your application."
464
- msgstr ""
465
-
466
- #: includes/class-bwp-simple-gxs.php:539
467
- #, fuzzy
468
- msgid "author archives' sitemap."
469
- msgstr "tarikh arkib pelan tapak."
470
-
471
- #: includes/class-bwp-simple-gxs.php:540
472
- msgid "site's home URL sitemap. For a multi-site installation of WordPress, this sitemap will list all domains within your network, not just the main blog. This also supports WPMU Domain Mapping plugin."
473
- msgstr ""
474
-
475
- #: includes/class-bwp-simple-gxs.php:543
476
- #, fuzzy
477
- msgid "item(s) in one sitemap. You can not go over 50,000."
478
- msgstr "item di dalam satu pelan tapak. Akan tetapi, 5000 adalah lebih sesuai. Anda tidak boleh melebihi 50,000, walaubagaimanapun."
479
-
480
- #: includes/class-bwp-simple-gxs.php:544
481
- msgid "item(s). Again , you can not go over 50,000."
482
- msgstr ""
483
-
484
- #: includes/class-bwp-simple-gxs.php:545
485
- msgid "Input a full path to the directory where you put your own modules (e.g. <code>/home/mysite/public_html/gxs-modules/</code>), you can also override a built-in module by having a module with the same filename in this directory. A filter is also available if you would like to use PHP instead."
486
- msgstr "Masuk ruang penuh untuk direktori dimana anda meletak modul anda sendiri (contoh <code>/home/mysite/public_html/gxs-modules/</code>), anda juga boleh melebih-naik modul yang terbina dengan mendapat nama modul fail yang sama di dalam direktori. Penapis juga tersedia jika anda mahu menggunakan PHP."
487
-
488
- #: includes/class-bwp-simple-gxs.php:546
489
- msgid "The cache directory must be writable (i.e. CHMOD to 755 or 777)."
490
- msgstr "Cache direktori harus boleh ditulis (i.e. CHMOD to 755 or 777)."
491
-
492
- #: includes/class-bwp-simple-gxs.php:547
493
- msgid "item(s) in one SQL query. This helps you avoid running too heavy queries."
494
- msgstr "item-item di dalam satu maklumat SQL. Ini membantu anda untuk menghindar dari menggunakan maklumat terlalu banyak."
495
-
496
- #: includes/class-bwp-simple-gxs.php:550
497
- msgid "expected to be an absolute URL, e.g. <code>http://example.com/my-stylesheet.xsl</code>. You must also have a style sheet for the sitemapindex that can be accessed through the above URL, e.g. <code>my-stylesheet.xsl</code> and <code>my-stylesheetindex.xsl</code>). Please leave blank if you do not wish to use."
498
- msgstr "jangkaan untuk menjadi URL tetap, contohnya <code>http://example.com/my-stylesheet.xsl</code>. Anda juga harus mempunyai gaya lembar untuk indeks pelan tapak yang mana boleh di akses melalui URL di atas, contohnya <code>my-stylesheet.xsl</code> dan <code>my-stylesheetindex.xsl</code>). Sila tinggalkan kosong sekiranya anda tidak berhasrat untuk menggunakannya."
499
-
500
- #: includes/class-bwp-simple-gxs.php:557
501
- #, php-format
502
- msgid "<em><strong>Note:</strong> If you encounter white page problem, please refer to the <a target=\"_blank\" href=\"%s\">FAQ section</a> to know how to change this limit appropriately to make this plugin work. Also note that, for post-based sitemaps, this option will be overridden by the limit you set in the Sitemap Index Options below.</em>"
503
- msgstr ""
504
-
505
- #: includes/class-bwp-simple-gxs.php:659
506
- #, fuzzy
507
- msgid "What is a Google News Sitemap?"
508
- msgstr "Apa itu Pelan tapak?"
509
-
510
- #: includes/class-bwp-simple-gxs.php:660
511
- msgid "Enable this module?"
512
- msgstr ""
513
-
514
- #: includes/class-bwp-simple-gxs.php:661
515
- msgid "Enable Multi-category Mode?"
516
- msgstr ""
517
-
518
- #: includes/class-bwp-simple-gxs.php:662
519
- msgid "Ping Search Engines when you publish a news article?"
520
- msgstr ""
521
-
522
- #: includes/class-bwp-simple-gxs.php:663
523
- msgid "Use keywords in News Sitemap?"
524
- msgstr ""
525
-
526
- #: includes/class-bwp-simple-gxs.php:664
527
- msgid "News Sitemap's language"
528
- msgstr ""
529
-
530
- #: includes/class-bwp-simple-gxs.php:665
531
- msgid "News Categories"
532
- msgstr ""
533
-
534
- #: includes/class-bwp-simple-gxs.php:666
535
- msgid "This module will"
536
- msgstr ""
537
-
538
- #: includes/class-bwp-simple-gxs.php:670
539
- msgid "A Google News Sitemap is a file that allows you to control which content you submit to Google News. By creating and submitting a Google News Sitemap, you're able to help Google News discover and crawl your site's articles &mdash; <em>http://support.google.com/</em>"
540
- msgstr ""
541
-
542
- #: includes/class-bwp-simple-gxs.php:671
543
- msgid "<em>Below you will be able to choose what categories to use (or not use) in the news sitemap. You can also assign genres to a specific category.</em>"
544
- msgstr ""
545
-
546
- #: includes/class-bwp-simple-gxs.php:674
547
- msgid "below selected categories in the news sitemap."
548
- msgstr ""
549
-
550
- #: includes/class-bwp-simple-gxs.php:679
551
- msgid "English"
552
- msgstr ""
553
-
554
- #: includes/class-bwp-simple-gxs.php:680
555
- msgid "French"
556
- msgstr ""
557
-
558
- #: includes/class-bwp-simple-gxs.php:681
559
- msgid "Spanish"
560
- msgstr ""
561
-
562
- #: includes/class-bwp-simple-gxs.php:682
563
- msgid "German"
564
- msgstr ""
565
-
566
- #: includes/class-bwp-simple-gxs.php:683
567
- msgid "Portuguese"
568
- msgstr ""
569
-
570
- #: includes/class-bwp-simple-gxs.php:684
571
- msgid "Polish"
572
- msgstr ""
573
-
574
- #: includes/class-bwp-simple-gxs.php:685
575
- msgid "Norwegian"
576
- msgstr ""
577
-
578
- #: includes/class-bwp-simple-gxs.php:686
579
- msgid "Dutch"
580
- msgstr ""
581
-
582
- #: includes/class-bwp-simple-gxs.php:687
583
- msgid "Italian"
584
- msgstr ""
585
-
586
- #: includes/class-bwp-simple-gxs.php:688
587
- msgid "Vietnamese"
588
- msgstr ""
589
-
590
- #: includes/class-bwp-simple-gxs.php:689
591
- msgid "Simplified Chinese"
592
- msgstr ""
593
-
594
- #: includes/class-bwp-simple-gxs.php:692
595
- msgid "include"
596
- msgstr ""
597
-
598
- #: includes/class-bwp-simple-gxs.php:693
599
- msgid "exclude"
600
- msgstr ""
601
-
602
- #: includes/class-bwp-simple-gxs.php:696
603
- msgid "news categories"
604
- msgstr ""
605
-
606
- #: includes/class-bwp-simple-gxs.php:697
607
- msgid "news tags"
608
- msgstr ""
609
-
610
- #: includes/class-bwp-simple-gxs.php:703
611
- msgid "A new <code>post_google_news.xml</code> sitemap will be added to the main <code>sitemapindex.xml</code>."
612
- msgstr ""
613
-
614
- #: includes/class-bwp-simple-gxs.php:704
615
- msgid "Keywords are derived from"
616
- msgstr ""
617
-
618
- #: includes/class-bwp-simple-gxs.php:705
619
- msgid "This ping works separately from the sitemapindex ping, and only occurs when you publish an article in one of the news categories set below."
620
- msgstr ""
621
-
622
- #: includes/class-bwp-simple-gxs.php:706
623
- msgid "This mode is meant for News Blogs that have posts assigned to more than one categories. It is an advanced feature and should only be enabled if you do have similar blogs."
624
- msgstr ""
625
-
626
- #: includes/class-bwp-simple-gxs.php:712
627
- msgid ". Do <strong>NOT</strong> use news tags if your news sitemap contains a lot of posts as it can be very inefficient to do so. This will be improved in future versions."
628
- msgstr ""
629
-
630
- #: includes/class-bwp-simple-gxs.php:736
631
- #, php-format
632
- msgid "<strong>%d</strong> cached sitemaps have been flushed successfully!"
633
- msgstr "<strong>%d</strong> pelan tapak yang di-cache-kan telah di buang!"
634
-
635
- #: includes/class-bwp-simple-gxs.php:738
636
- msgid "Could not delete any cached sitemaps. Please manually check the cache directory."
637
- msgstr "Tidak boleh buang mana-mana pelan tapak yang telah di-cache-kan. Sila rujuk cache direktori secara manual."
638
-
639
- #: includes/class-bwp-simple-gxs.php:787
640
- msgid "All options have been saved."
641
- msgstr ""
642
-
643
- #: includes/class-bwp-simple-gxs.php:809
644
- msgid "Warning"
645
- msgstr "Amaran"
646
-
647
- #: includes/class-bwp-simple-gxs.php:809
648
- msgid "Cache directory does not exist or is not writable. Please read more about directory permission <a href='http://www.zzee.com/solutions/unix-permissions.shtml'>here</a> (Unix)."
649
- msgstr "Direktori cache tidak wujud atau tidak boleh dibaca. Sila rujuk direktori berkenaan kebenaran <a href='http://www.zzee.com/solutions/unix-permissions.shtml'>disini</a> (Unix)."
650
-
651
- #: includes/class-bwp-simple-gxs.php:820
652
- msgid "Clear All Logs"
653
- msgstr ""
654
-
655
- #: includes/class-bwp-simple-gxs.php:874
656
- msgid "(Debug is on)"
657
- msgstr "(Debug dibuka)"
658
-
659
- #: includes/class-bwp-simple-gxs.php:887
660
- msgid "<strong>BWP Google XML Sitemaps Error:</strong> "
661
- msgstr "<strong>Google XML Pelan tapak BWP Ralat:</strong>"
662
-
663
- #: includes/class-bwp-simple-gxs.php:887
664
- msgid "BWP Google XML Sitemaps Error"
665
- msgstr "Google XML Pelan tapak BWP Ralat"
666
-
667
- #: includes/class-bwp-simple-gxs.php:910
668
- #, php-format
669
- msgid "Nothing here... yet! Try submitting your <a href=\"%s\">sitemapindex</a> first!"
670
- msgstr "Tiada disini...lagi! Cuba hantar <a href=\"%s\">indeks pelan tapak</a> anda dahulu!"
671
-
672
- #: includes/class-bwp-simple-gxs.php:910
673
- msgid "No log yet!"
674
- msgstr "Tiada log lagi!"
675
-
676
- #: includes/class-bwp-simple-gxs.php:921
677
- #, php-format
678
- msgid "<a href=\"%s\" target=\"_blank\">%s</a> has been successfully built on <strong>%s</strong>."
679
- msgstr "<a href=\"%s\" target=\"_blank\">%s</a> telah berjaya dibina <strong>%s</strong>."
680
-
681
- #: includes/class-bwp-simple-gxs.php:932
682
- #: includes/class-bwp-simple-gxs.php:949
683
- msgid "M j, Y : H:i:s"
684
- msgstr "M j, Y : H:i:s"
685
-
686
- #: includes/class-bwp-simple-gxs.php:1018
687
- msgid "Category's name"
688
- msgstr ""
689
-
690
- #: includes/class-bwp-simple-gxs.php:1018
691
- #, php-format
692
- msgid "<span>Genres used for this category</span> (more info <a href=\"%s\" target=\"_blank\">here</a>)"
693
- msgstr ""
694
-
695
- #: includes/class-bwp-simple-gxs.php:1309
696
- #, php-format
697
- msgid "Requested module (<em>%s</em>) not found or not allowed."
698
- msgstr "Modul yang diminta (<em>%s</em>) tidak dijumpai atau tidak dibenarkan."
699
-
700
- #: includes/class-bwp-simple-gxs.php:1368
701
- #: includes/class-bwp-simple-gxs.php:1389
702
- #, php-format
703
- msgid "Loaded a custom sub-module file: <strong>%s</strong>."
704
- msgstr "Lain-lain fail sub-modul telah dibekalkan: <strong>%s</strong>."
705
-
706
- #: includes/class-bwp-simple-gxs.php:1377
707
- #, php-format
708
- msgid "Mapped sub-module file: <strong>%s</strong> is not available in both default and custom module directory. The plugin will now try loading the requested sub-module instead."
709
- msgstr "Fail sub-module yang dikategorikan: <strong>%s</strong> tidak terdapat di dalam kedua-dua lalai dan lain-lain direktori modul. Plugin sekarang akan cuba untuk menggunakan sub-modul."
710
-
711
- #: includes/class-bwp-simple-gxs.php:1397
712
- #, php-format
713
- msgid "Sub-module file: <strong>%s</strong> is not available in both default and custom module directory. The plugin will now try loading the parent module instead."
714
- msgstr "Fail sub-modul: <strong>%s</strong> tidak terdapat di dalam kedua-dua lalai dan juga lain-lain direktori modul. Plugin akan cuba menggunakan modul utama."
715
-
716
- #: includes/class-bwp-simple-gxs.php:1411
717
- #, php-format
718
- msgid "Loaded a custom module file: <strong>%s</strong>."
719
- msgstr "Menggunakan lain-lain fail modul: <strong>%s</strong>."
720
-
721
- #: includes/class-bwp-simple-gxs.php:1417
722
- #, php-format
723
- msgid "Could not load module file: <strong>%s</strong> in both default and custom module directory. Please recheck if that module file exists."
724
- msgstr "Tidak boleh menggunakan fail modul: <strong>%s</strong> di kedua-dua lalai dan juga lain-lain direktori modul. Sila semak semula jika fail modul itu wujud."
725
-
726
- #: includes/class-bwp-simple-gxs.php:1437
727
- #, php-format
728
- msgid "There is no class named <strong>%s</strong> in the module file <strong>%s</strong>."
729
- msgstr "Tiada kelas dinamakan <strong>%s</strong> di dalam fail modul <strong>%s</strong>."
730
-
731
- #: includes/class-bwp-simple-gxs.php:1446
732
- #, php-format
733
- msgid "Loaded a custom sitemapindex module file: <strong>%s</strong>."
734
- msgstr "Menggunakan lain-lain fail modul indeks pelan tapak: <strong>%s</strong>."
735
-
736
- #: includes/class-bwp-simple-gxs.php:1469
737
- #, php-format
738
- msgid "Successfully generated <em>%s.xml</em> using module <em>%s</em>."
739
- msgstr "Berjaya menghasilkan <em>%s.xml</em> menggunakan modul <em>%s</em>."
740
-
741
- #: includes/class-bwp-simple-gxs.php:1500
742
- msgid "<strong>BWP Google XML Sitemap Message:</strong> Unexpected output (most of the time PHP errors) is preventing BWP GXS from showing any sitemap contents. Try disabling <code>WP_DEBUG</code> or this plugin's debug mode, whichever is on. All unexpected outputs should be shown just above this message. If you don't see any, contact me and I might be able to help."
743
- msgstr ""
744
-
745
- #: includes/class-bwp-simple-gxs.php:1630
746
- msgid "Unknown response code from search engines. Ping failed."
747
- msgstr ""
748
-
749
- #: includes/class-bwp-simple-gxs.php:1632
750
- #, fuzzy, php-format
751
- msgid "Pinged %s with %s successfully!"
752
- msgstr "Penghantaran berjaya %s !"
753
-
754
- #: includes/class-bwp-simple-gxs.php:1637
755
- #, php-format
756
- msgid "Error %s from %s"
757
- msgstr ""
758
-
759
- #: includes/class-bwp-simple-gxs.php:1642
760
- #, php-format
761
- msgid "Ping limit for today to %s has been reached, sorry!"
762
- msgstr "Had menghantar untuk hari ini kepada %s telah dicapai, maaf!"
763
-
764
- #: includes/class-bwp-simple-gxs.php:1670
765
- #, fuzzy, php-format
766
- msgid "<em>%s.xml</em> does not have any item. You can fix this easily by excluding any post types / terms you do not use in <em>Sitemap Generator</em> tab within your admin area. If you still see this error, consider checking the module that generates this sitemap (<em>%s.php</em>)."
767
- msgstr "<em>%s.xml</em> tiada apa-apa item. Plugin telah membuang permulaan 404 kepada enjian carian yang memintanya. Anda seharusnya meninjau modul yang menghasilkan pelan tapak itu (<em>%s.php</em>)."
768
-
769
- #: includes/bwp-option-page/includes/class-bwp-option-page.php:80
770
- msgid "Plugin Configurations"
771
- msgstr "Tetapan Plugin"
772
-
773
- #: includes/bwp-option-page/includes/class-bwp-option-page.php:398
774
- msgid "Save Changes"
775
- msgstr "Simpan Perubahan"
776
-
777
- #~ msgid "log"
778
- #~ msgstr "log"
779
-
780
- #~ msgid "Yahoo &mdash; <a href=\"%s\" target=\"_blank\">important</a>"
781
- #~ msgstr "Yahoo &mdash; <a href=\"%s\" target=\"_blank\">penting</a>"
782
-
783
- #~ msgid "make your sitemaps ~ 70% smaller."
784
- #~ msgstr "membuat pelan tapak anda 70% lebih kecil."
785
-
786
- #~ msgid "static pages' sitemap."
787
- #~ msgstr "pelan tapak muka statik."
788
-
789
- #~ msgid "tag archives' sitemaps."
790
- #~ msgstr "Lekat arkib pelan tapak."
791
-
792
- #~ msgid "%s"
793
- #~ msgstr "%s"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
languages/bwp-simple-gxs-ro_RO.mo DELETED
Binary file
languages/bwp-simple-gxs-ro_RO.po DELETED
@@ -1,793 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: BWP Google XML Sitemaps(Malay Translation)\n"
4
- "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2012-04-03 20:10+0700\n"
6
- "PO-Revision-Date: 2012-04-03 20:10+0700\n"
7
- "Last-Translator: \n"
8
- "Language-Team: <darkcry3r@gmail.com>\n"
9
- "MIME-Version: 1.0\n"
10
- "Content-Type: text/plain; charset=UTF-8\n"
11
- "Content-Transfer-Encoding: 8bit\n"
12
- "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n"
13
- "X-Poedit-Basepath: .\n"
14
- "X-Poedit-SourceCharset: utf-8\n"
15
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
16
- "X-Poedit-Language: Malay\n"
17
- "X-Poedit-Country: MALAYSIA\n"
18
- "X-Poedit-SearchPath-0: .\n"
19
-
20
- #: includes/class-bwp-framework.php:177
21
- #, php-format
22
- msgid "%s requires WordPress <strong>%s</strong> or higher and PHP <strong>%s</strong> or higher. The plugin will not function until you update your software. Please deactivate this plugin."
23
- msgstr "%s are nevoie de versiunea WordPress <strong>%s</strong>sau mai mare si PHP <strong>%s</strong> sau mai mare . Pluginul nu va functiona pana nu actualizati versiunile de software. Va rugam dezactivati pluginul."
24
-
25
- #: includes/class-bwp-framework.php:188
26
- msgid "Development Log"
27
- msgstr ""
28
-
29
- #: includes/class-bwp-framework.php:188
30
- msgid "Frequently Asked Questions"
31
- msgstr ""
32
-
33
- #: includes/class-bwp-framework.php:188
34
- msgid "FAQ"
35
- msgstr ""
36
-
37
- #: includes/class-bwp-framework.php:188
38
- msgid "Got a problem? Send me a feedback!"
39
- msgstr ""
40
-
41
- #: includes/class-bwp-framework.php:188
42
- msgid "Contact"
43
- msgstr ""
44
-
45
- #: includes/class-bwp-framework.php:195
46
- #, fuzzy
47
- msgid "You can buy me some special coffees if you appreciate my work, thank you!"
48
- msgstr "Imi poti face cinste cu o cafea daca apreciezi munca mea, mersi!"
49
-
50
- #: includes/class-bwp-framework.php:209
51
- msgid "Donate to "
52
- msgstr ""
53
-
54
- #: includes/class-bwp-framework.php:211
55
- msgid "One cup $5.00"
56
- msgstr ""
57
-
58
- #: includes/class-bwp-framework.php:212
59
- msgid "Two cups $10.00"
60
- msgstr ""
61
-
62
- #: includes/class-bwp-framework.php:213
63
- msgid "Five cups! $25.00"
64
- msgstr ""
65
-
66
- #: includes/class-bwp-framework.php:214
67
- msgid "One LL-cup!!! $50.00"
68
- msgstr ""
69
-
70
- #: includes/class-bwp-framework.php:215
71
- msgid "... or any amount!"
72
- msgstr ""
73
-
74
- #: includes/class-bwp-framework.php:230
75
- msgid "Latest updates from BetterWP.net!"
76
- msgstr ""
77
-
78
- #: includes/class-bwp-framework.php:231
79
- msgid "Follow me on Twitter!"
80
- msgstr ""
81
-
82
- #: includes/class-bwp-framework.php:240
83
- #, php-format
84
- msgid "You are using version %s!"
85
- msgstr "Folositi versiunea %s!"
86
-
87
- #: includes/class-bwp-framework.php:385
88
- msgid "Settings"
89
- msgstr "Setari"
90
-
91
- #: includes/class-bwp-gxs-cache.php:34
92
- #, php-format
93
- msgid "Cache directory (\"%s\") does not exist or is not writable."
94
- msgstr "Directorul de cache (\"%s\") nu exista sau nu este accesibil."
95
-
96
- #: includes/class-bwp-gxs-cache.php:56
97
- #, php-format
98
- msgid "Cache file for module <em>%s</em> is not found and will be built right away."
99
- msgstr "Fisierul de cache pentru modulul <em>%s</em> nu a fost gasit si va fi creat imediat."
100
-
101
- #: includes/class-bwp-gxs-cache.php:108
102
- #: includes/class-bwp-simple-gxs.php:1341
103
- #, php-format
104
- msgid "Successfully served a cached version of <em>%s.xml</em>."
105
- msgstr "S-a servit cu succes o versiune din cache a <em>%s.xml</em>."
106
-
107
- #: includes/class-bwp-simple-gxs.php:141
108
- #: includes/class-bwp-simple-gxs.php:347
109
- #: includes/class-bwp-simple-gxs.php:354
110
- msgid "Sitemap Statistics"
111
- msgstr "Statistici sitemap"
112
-
113
- #: includes/class-bwp-simple-gxs.php:142
114
- #: includes/class-bwp-simple-gxs.php:348
115
- #: includes/class-bwp-simple-gxs.php:355
116
- msgid "Sitemap Generator"
117
- msgstr "Generator de sitemap"
118
-
119
- #: includes/class-bwp-simple-gxs.php:143
120
- #: includes/class-bwp-simple-gxs.php:349
121
- #: includes/class-bwp-simple-gxs.php:356
122
- #, fuzzy
123
- msgid "News Sitemap"
124
- msgstr "Ce sunt sitemap-urile?"
125
-
126
- #: includes/class-bwp-simple-gxs.php:174
127
- #, php-format
128
- msgid "This sitemap was originally generated in %s second(s) (Memory usage: %s) - %s queries - %s URL(s) listed"
129
- msgstr "Acest sitemap a fost generat in %s secunde (Memorie folosita: %s) - %s interogari - %s URL(-uri) listate"
130
-
131
- #: includes/class-bwp-simple-gxs.php:347
132
- #: includes/class-bwp-simple-gxs.php:354
133
- msgid "BWP Google XML Sitemaps Statistics"
134
- msgstr "Statistici BWP Google XML Sitemaps"
135
-
136
- #: includes/class-bwp-simple-gxs.php:348
137
- #: includes/class-bwp-simple-gxs.php:355
138
- msgid "BWP Google XML Sitemaps Generator"
139
- msgstr "Generator BWP Google XML Sitemaps "
140
-
141
- #: includes/class-bwp-simple-gxs.php:349
142
- #: includes/class-bwp-simple-gxs.php:356
143
- #, fuzzy
144
- msgid "BWP Google News XML Sitemap"
145
- msgstr "BWP Google XML Sitemaps"
146
-
147
- #: includes/class-bwp-simple-gxs.php:353
148
- msgid "BWP Google XML Sitemaps"
149
- msgstr "BWP Google XML Sitemaps"
150
-
151
- #: includes/class-bwp-simple-gxs.php:368
152
- msgid "You do not have sufficient permissions to access this page."
153
- msgstr "Nu aveti permisiuni suficiente pentru a accesa aceasta pagina."
154
-
155
- #: includes/class-bwp-simple-gxs.php:389
156
- #: includes/class-bwp-simple-gxs.php:736
157
- #: includes/class-bwp-simple-gxs.php:738
158
- msgid "Notice"
159
- msgstr "Notificare"
160
-
161
- #: includes/class-bwp-simple-gxs.php:389
162
- msgid "All logs have been cleared successfully!"
163
- msgstr ""
164
-
165
- #: includes/class-bwp-simple-gxs.php:396
166
- msgid "What are Sitemaps?"
167
- msgstr "Ce sunt sitemap-urile?"
168
-
169
- #: includes/class-bwp-simple-gxs.php:397
170
- msgid "Your sitemaps"
171
- msgstr "Sitemap-urile tale"
172
-
173
- #: includes/class-bwp-simple-gxs.php:398
174
- msgid "Submit your sitemaps"
175
- msgstr "Inscrie un sitemap"
176
-
177
- #: includes/class-bwp-simple-gxs.php:399
178
- msgid "Pinging search engines"
179
- msgstr "Ping motoarelor de cautare"
180
-
181
- #: includes/class-bwp-simple-gxs.php:400
182
- msgid "Enable pinging functionality?"
183
- msgstr "Activeaza functionalitate de ping"
184
-
185
- #: includes/class-bwp-simple-gxs.php:401
186
- msgid "Enable pinging individual SE"
187
- msgstr "Activeaza pinging invididual al motoarelor de cautare"
188
-
189
- #: includes/class-bwp-simple-gxs.php:402
190
- msgid "Sitemap Generator's Log"
191
- msgstr "Log-ul generatorului de sitemap"
192
-
193
- #: includes/class-bwp-simple-gxs.php:403
194
- msgid "Enable logging?"
195
- msgstr "Permite logarea?"
196
-
197
- #: includes/class-bwp-simple-gxs.php:404
198
- msgid "Enable debugging?"
199
- msgstr "Permite debugging?"
200
-
201
- #: includes/class-bwp-simple-gxs.php:413
202
- #, fuzzy
203
- msgid "In its simplest form, a Sitemap is an XML file that lists URLs for a site along with additional metadata about each URL (when it was last updated, how often it usually changes, and how important it is, relative to other URLs in the site) so that search engines can more intelligently crawl the site &mdash; <em>http://www.sitemaps.org/</em>"
204
- msgstr "In forma sa simpla, un sitemap e un fisier XML care listeaza toate URL-urile unui site, impreuna cu meta data despre fiecare URL (cand a fost actualizat, cat de des, importanta sa) pentru ca motoarele de cautare sa indexeze mai bine site-ul - http://www.sitemaps.org/"
205
-
206
- #: includes/class-bwp-simple-gxs.php:413
207
- msgid "This plugin helps you generate both Sitemap Index files as well as normal Sitemap files. A Sitemap Index, as its name suggests, is one kind of sitemaps that allows you to group multiple sitemap files inside it."
208
- msgstr ""
209
-
210
- #: includes/class-bwp-simple-gxs.php:414
211
- msgid "<em>Basic information about all your sitemaps.</em>"
212
- msgstr "<em>Informatii de baza despre sitemap-urile tale.</em>"
213
-
214
- #: includes/class-bwp-simple-gxs.php:415
215
- msgid "<em>More detailed information about how your sitemaps are generated including <span style=\"color: #999999;\">notices</span>, <span style=\"color: #FF0000;\">errors</span> and <span style=\"color: #009900;\">success messages</span>.</em>"
216
- msgstr "<em>MaMai multe detalii despre cum sitemap-urile sunt generate, incluzand <span style=\"color: #999999;\">notificari</span>, <span style=\"color: #FF0000;\">erori</span> si <span style=\"color: #009900;\">confirmari</span>.</em>"
217
-
218
- #: includes/class-bwp-simple-gxs.php:416
219
- #, fuzzy, php-format
220
- msgid "<em>Submit your sitemapindex to major search engines like <a href=\"%s\" target=\"_blank\">Google</a>, <a href=\"%s\" target=\"_blank\">Bing</a> or <a href=\"%s\" target=\"_blank\">Ask</a>.</em>"
221
- msgstr "<em>Inscrie sitemapindex in motoarele de cautare mari precum <a href=\"%s\" target=\"_blank\">Google</a>, <a href=\"%s\" target=\"_blank\">Yahoo</a>, <a href=\"%s\" target=\"_blank\">Bing</a> sau <a href=\"%s\" target=\"_blank\">Ask</a>.</em>"
222
-
223
- #: includes/class-bwp-simple-gxs.php:417
224
- msgid "<em>Now when you post something new to your blog, you can <em>ping</em> those search engines to tell them your blog just got updated. Pinging could be less effective than you think it is but you should enable such feature anyway.</em>"
225
- msgstr "<em>Acum, cand scrii ceva nou pe blog, poti <em>pingui</em> motoarele de cautare, spunandu-le ca blogul tau a fost actualizat. Ping-ul ar putea fi mai putin eficient decat crezi dar aceasta functionalitate ar trebui activata.</em>"
226
-
227
- #: includes/class-bwp-simple-gxs.php:422
228
- msgid "Selected SE below will be pinged when you publish new posts."
229
- msgstr "Motoarele de cautare selectate vor fi ping-uite cand publicati posturi noi."
230
-
231
- #: includes/class-bwp-simple-gxs.php:423
232
- msgid "No additional load is needed so enabling this is recommended."
233
- msgstr "Activarea acestei functii este recomandata."
234
-
235
- #: includes/class-bwp-simple-gxs.php:424
236
- msgid "Minor errors will be printed on screen. Also, when debug is on, no caching is used, useful when you develop new modules."
237
- msgstr "Erori minore vor fi afisate. De asemenea, cand debugging-ul este activ sau cand nu este facut cache."
238
-
239
- #: includes/class-bwp-simple-gxs.php:425
240
- msgid "Google"
241
- msgstr "Google"
242
-
243
- #: includes/class-bwp-simple-gxs.php:426
244
- msgid "Bing"
245
- msgstr "Bing"
246
-
247
- #: includes/class-bwp-simple-gxs.php:427
248
- msgid "Ask.com"
249
- msgstr "Ask.com"
250
-
251
- #: includes/class-bwp-simple-gxs.php:430
252
- #, php-format
253
- msgid "After you activate this plugin, all sitemaps should be available right away. The next step is to submit the sitemapindex to major search engines. You only need the <strong>sitemapindex</strong> and nothing else, those search engines will automatically recognize other included sitemaps. You can read a small <a href=\"%s\">How-to</a> if you are interested."
254
- msgstr "Dupa ce activezi acest plugin, toate sitemap-urile vor fi disponibile imediat. Urmatorul pas este sa submiti sitemapindex in motoarele de cautare. Nu ai nevoie decat de <strong>sitemapindex</strong> motoarele de cautare vor recunoaste alte sitemap-uri incluse. Poti citi un mic <a href=\"%s\">ghid</a> daca te intereseaza."
255
-
256
- #: includes/class-bwp-simple-gxs.php:458
257
- msgid "Output no more than"
258
- msgstr "Output pentru numai"
259
-
260
- #: includes/class-bwp-simple-gxs.php:459
261
- msgid "Default change frequency"
262
- msgstr "Frecventa de schimbare prestabilit"
263
-
264
- #: includes/class-bwp-simple-gxs.php:460
265
- msgid "Default priority"
266
- msgstr "Prioritate prestabilita"
267
-
268
- #: includes/class-bwp-simple-gxs.php:461
269
- msgid "Minimum priority"
270
- msgstr "Prioritate minima"
271
-
272
- #: includes/class-bwp-simple-gxs.php:462
273
- msgid "Use GMT for Last Modified date?"
274
- msgstr ""
275
-
276
- #: includes/class-bwp-simple-gxs.php:463
277
- msgid "Style your sitemaps with an XSLT stylesheet?"
278
- msgstr "Foloseste un stylesheet XSLT pentru sitemap-urile tale"
279
-
280
- #: includes/class-bwp-simple-gxs.php:464
281
- msgid "Custom XSLT stylesheet URL"
282
- msgstr "Stylesheet URL XSLT customizat"
283
-
284
- #: includes/class-bwp-simple-gxs.php:465
285
- msgid "Show build stats in sitemaps?"
286
- msgstr "Arata statisticile de la generare in sitemap-uri?"
287
-
288
- #: includes/class-bwp-simple-gxs.php:466
289
- msgid "Enable credit?"
290
- msgstr "Crediteaza?"
291
-
292
- #: includes/class-bwp-simple-gxs.php:467
293
- msgid "Enable Gzip?"
294
- msgstr "Activeaza Gzip?"
295
-
296
- #: includes/class-bwp-simple-gxs.php:468
297
- msgid "Clean unexpected output before sitemap generation?"
298
- msgstr ""
299
-
300
- #: includes/class-bwp-simple-gxs.php:469
301
- #, fuzzy
302
- msgid "Sitemap Index Options"
303
- msgstr "Generator de sitemap"
304
-
305
- #: includes/class-bwp-simple-gxs.php:470
306
- msgid "Automatically split post-based sitemaps into smaller sitemaps?"
307
- msgstr ""
308
-
309
- #: includes/class-bwp-simple-gxs.php:471
310
- #, fuzzy
311
- msgid "Add sitemapindex to individual blog's virtual robots.txt?"
312
- msgstr "Adauga sitemapindex in WordPress's robots.txt?"
313
-
314
- #: includes/class-bwp-simple-gxs.php:472
315
- #, fuzzy
316
- msgid "Add sitemapindex from all blogs within network to primary blog's virtual robots.txt?"
317
- msgstr "Adauga sitemapindex in WordPress's robots.txt?"
318
-
319
- #: includes/class-bwp-simple-gxs.php:473
320
- msgid "In sitemapindex, include"
321
- msgstr "In sitemapindex, include"
322
-
323
- #: includes/class-bwp-simple-gxs.php:474
324
- msgid "Exclude following post types:"
325
- msgstr ""
326
-
327
- #: includes/class-bwp-simple-gxs.php:475
328
- msgid "Exclude following taxonomies:"
329
- msgstr ""
330
-
331
- #: includes/class-bwp-simple-gxs.php:476
332
- msgid "Module Options"
333
- msgstr "Optiunile modulului"
334
-
335
- #: includes/class-bwp-simple-gxs.php:477
336
- msgid "Alternate module directory"
337
- msgstr "Alterneaza directorul modulului"
338
-
339
- #: includes/class-bwp-simple-gxs.php:478
340
- msgid "Get no more than"
341
- msgstr "Ia numai"
342
-
343
- #: includes/class-bwp-simple-gxs.php:479
344
- msgid "Caching Options"
345
- msgstr "Optiuni de cache"
346
-
347
- #: includes/class-bwp-simple-gxs.php:480
348
- msgid "Enable caching?"
349
- msgstr "Activeaza cache?"
350
-
351
- #: includes/class-bwp-simple-gxs.php:481
352
- msgid "Enable auto cache re-generation?"
353
- msgstr "Activeaza auto-regenerarea cache-ului?"
354
-
355
- #: includes/class-bwp-simple-gxs.php:482
356
- msgid "Cached sitemaps will last for"
357
- msgstr "Sitemap-urile din cache sunt valabile pana"
358
-
359
- #: includes/class-bwp-simple-gxs.php:483
360
- msgid "Cached sitemaps are stored in (auto detected)"
361
- msgstr "Sitemap-urile din cache sunt stocate in (auto detectare)"
362
-
363
- #: includes/class-bwp-simple-gxs.php:487
364
- msgid "<em>Cache your sitemaps for better performance.</em>"
365
- msgstr "<em>Fa cache sitemap-ului pentru o mai buna performanta.</em>"
366
-
367
- #: includes/class-bwp-simple-gxs.php:488
368
- #, php-format
369
- msgid "<em>This plugin uses modules to build sitemap data so it is recommended that you extend this plugin using modules rather than hooks. Some of the settings below only affect modules extending the base module class. Read more about using modules <a href=\"%s#using-modules\">here</a>.</em>"
370
- msgstr "<em>Acest plugin foloseste module pentru a construi sitemap-ul deci este recomandat sa extinzi plugin folosind module si nu hooks. Unele setari de mai jos doar afecteaza modulele existente. Citeste mai mult despre module <a href=\"%s#using-modules\">aici</a>.</em>"
371
-
372
- #: includes/class-bwp-simple-gxs.php:489
373
- msgid "<em>Here you can change some settings that affect the default Sitemap Index file.</em>"
374
- msgstr ""
375
-
376
- #: includes/class-bwp-simple-gxs.php:503
377
- #: includes/class-bwp-simple-gxs.php:509
378
- msgid "second(s)"
379
- msgstr "secunda(e)"
380
-
381
- #: includes/class-bwp-simple-gxs.php:504
382
- #: includes/class-bwp-simple-gxs.php:510
383
- msgid "minute(s)"
384
- msgstr "minut(e)"
385
-
386
- #: includes/class-bwp-simple-gxs.php:505
387
- #: includes/class-bwp-simple-gxs.php:511
388
- msgid "hour(s)"
389
- msgstr "ora(e)"
390
-
391
- #: includes/class-bwp-simple-gxs.php:506
392
- #: includes/class-bwp-simple-gxs.php:512
393
- msgid "day(s)"
394
- msgstr "zi(le)"
395
-
396
- #: includes/class-bwp-simple-gxs.php:519
397
- #: includes/class-bwp-simple-gxs.php:520
398
- #: includes/class-bwp-simple-gxs.php:521
399
- msgid "read more"
400
- msgstr "citeste mai mult"
401
-
402
- #: includes/class-bwp-simple-gxs.php:524
403
- msgid "your sitemaps are generated and then cached to reduce unnecessary work."
404
- msgstr "sitemap-urile tale sunt generate apoi puse in cache pentru a nu incarca serverul"
405
-
406
- #: includes/class-bwp-simple-gxs.php:525
407
- msgid "when a cached sitemap expires, this plugin will try to generate the cache again. If you disable this, remember to manually flush the cache once in a while."
408
- msgstr "cand un sitemap din cache expira, pluginul il va genera din nou. Daca dezactivati functia, va trebui sa curatat cache-ul din cand in cand."
409
-
410
- #: includes/class-bwp-simple-gxs.php:525
411
- msgid "Flush the cache"
412
- msgstr "Curata cacge"
413
-
414
- #: includes/class-bwp-simple-gxs.php:526
415
- msgid "tell you useful information such as build time, memory usage, SQL queries, etc."
416
- msgstr "iti spune informatii utile, precum timpul in care a fost construit sitemap-ul, memoria folosita, interogari SQL, etc."
417
-
418
- #: includes/class-bwp-simple-gxs.php:527
419
- #, php-format
420
- msgid "make your sitemaps ~ 70% smaller. <strong>Important:</strong> If you see an error after enabling this, it's very likely that you have gzip active on your server already."
421
- msgstr ""
422
-
423
- #: includes/class-bwp-simple-gxs.php:528
424
- msgid "only disable this when sitemaps appear in either blank page or plain text."
425
- msgstr ""
426
-
427
- #: includes/class-bwp-simple-gxs.php:529
428
- #, php-format
429
- msgid "If you have like 50 blogs, 50 <code>Sitemap: http://example.com/sitemapindex.xml</code> entries will be added to your primary blog's robots.txt, i.e. <code>%s</code>."
430
- msgstr ""
431
-
432
- #: includes/class-bwp-simple-gxs.php:530
433
- msgid "taxonomy archives' sitemaps, including custom taxonomies."
434
- msgstr "sitemap al taxonomiilor, inclusiv cele customizate"
435
-
436
- #: includes/class-bwp-simple-gxs.php:532
437
- msgid "date archives' sitemaps."
438
- msgstr "sitemap pentru arhivele pe baza de data"
439
-
440
- #: includes/class-bwp-simple-gxs.php:533
441
- msgid "external pages' sitemap. This allows you to add links to pages that do not belong to WordPress to the sitemap."
442
- msgstr ""
443
-
444
- #: includes/class-bwp-simple-gxs.php:534
445
- msgid "some copyrighted info is also added to your sitemaps. Thanks!"
446
- msgstr "unele informatii de copyright sunt adaugate sitemap-ului. Mersi! "
447
-
448
- #: includes/class-bwp-simple-gxs.php:535
449
- #, fuzzy
450
- msgid "This will load the default style sheet provided by this plugin. You can set a custom style sheet below or filter the <code>bwp_gxs_xslt</code> hook."
451
- msgstr "Acesta va incarca stylesheet-ul prestabilit oferit de plugin. Poti seta un stylesheet customizat sau poti filtra <code>bwp_gxs_xslt</code>"
452
-
453
- #: includes/class-bwp-simple-gxs.php:536
454
- #, php-format
455
- msgid "If you're on a Multi-site installation with Sub-domain enabled, each site will have its own robots.txt, sites in sub-directory will not. Please read the <a href=\"%s#toc-robots\" target=\"_blank\">documentation</a> for more info."
456
- msgstr "Daca folosesti o versiune Multi-site pe un subdomeniu, fiecare site va avea robots.txt al sau, iar site-urile din subdirectoare nu. Va rog cititi <a href=\"%s#toc-robots\" target=\"_blank\">documentatia</a> pentru mai multe informatii."
457
-
458
- #: includes/class-bwp-simple-gxs.php:537
459
- msgid "e.g. post1.xml, post2.xml, etc. And each sitemap will contain"
460
- msgstr ""
461
-
462
- #: includes/class-bwp-simple-gxs.php:538
463
- msgid "If you disable this, make sure you also use <code>date_default_timezone_set</code> to correctly set up a timezone for your application."
464
- msgstr ""
465
-
466
- #: includes/class-bwp-simple-gxs.php:539
467
- #, fuzzy
468
- msgid "author archives' sitemap."
469
- msgstr "sitemap pentru arhivele pe baza de data"
470
-
471
- #: includes/class-bwp-simple-gxs.php:540
472
- msgid "site's home URL sitemap. For a multi-site installation of WordPress, this sitemap will list all domains within your network, not just the main blog. This also supports WPMU Domain Mapping plugin."
473
- msgstr ""
474
-
475
- #: includes/class-bwp-simple-gxs.php:543
476
- #, fuzzy
477
- msgid "item(s) in one sitemap. You can not go over 50,000."
478
- msgstr "itemi dintr-un sitemap. De fapt, 5000 ar fi ideal. Nu poti depasi 50,000 itemi."
479
-
480
- #: includes/class-bwp-simple-gxs.php:544
481
- msgid "item(s). Again , you can not go over 50,000."
482
- msgstr ""
483
-
484
- #: includes/class-bwp-simple-gxs.php:545
485
- msgid "Input a full path to the directory where you put your own modules (e.g. <code>/home/mysite/public_html/gxs-modules/</code>), you can also override a built-in module by having a module with the same filename in this directory. A filter is also available if you would like to use PHP instead."
486
- msgstr "Introdu calea catre directoarele unde sunt modulele proprii (contoh <code>/home/mysite/public_html/gxs-modules/</code>); poti suprascrie modului preinstalat cu un modul avand acelasi nume. Un filtru este disponibil daca doresti sa folosesti PHP."
487
-
488
- #: includes/class-bwp-simple-gxs.php:546
489
- msgid "The cache directory must be writable (i.e. CHMOD to 755 or 777)."
490
- msgstr "Directorul de cache trebuie sa fie \"writable\" (i.e. CHMOD to 755 or 777)."
491
-
492
- #: includes/class-bwp-simple-gxs.php:547
493
- msgid "item(s) in one SQL query. This helps you avoid running too heavy queries."
494
- msgstr "itemi intr-o interogare SQL. Acest lucru te ajuta sa eviti incarcaturile mari."
495
-
496
- #: includes/class-bwp-simple-gxs.php:550
497
- msgid "expected to be an absolute URL, e.g. <code>http://example.com/my-stylesheet.xsl</code>. You must also have a style sheet for the sitemapindex that can be accessed through the above URL, e.g. <code>my-stylesheet.xsl</code> and <code>my-stylesheetindex.xsl</code>). Please leave blank if you do not wish to use."
498
- msgstr "ar trebui sa fie un URL absolut, de ex. <code>http://example.com/my-stylesheet.xsl</code>. Trebuie sa ai un stylesheet pentru sitemapindex care poate fi accesat prin URL-ul de mai sus, de ex. <code>my-stylesheet.xsl</code> si <code>my-stylesheetindex.xsl</code>). Lasa spatiul gol daca nu folosesti."
499
-
500
- #: includes/class-bwp-simple-gxs.php:557
501
- #, php-format
502
- msgid "<em><strong>Note:</strong> If you encounter white page problem, please refer to the <a target=\"_blank\" href=\"%s\">FAQ section</a> to know how to change this limit appropriately to make this plugin work. Also note that, for post-based sitemaps, this option will be overridden by the limit you set in the Sitemap Index Options below.</em>"
503
- msgstr ""
504
-
505
- #: includes/class-bwp-simple-gxs.php:659
506
- #, fuzzy
507
- msgid "What is a Google News Sitemap?"
508
- msgstr "Ce sunt sitemap-urile?"
509
-
510
- #: includes/class-bwp-simple-gxs.php:660
511
- msgid "Enable this module?"
512
- msgstr ""
513
-
514
- #: includes/class-bwp-simple-gxs.php:661
515
- msgid "Enable Multi-category Mode?"
516
- msgstr ""
517
-
518
- #: includes/class-bwp-simple-gxs.php:662
519
- msgid "Ping Search Engines when you publish a news article?"
520
- msgstr ""
521
-
522
- #: includes/class-bwp-simple-gxs.php:663
523
- msgid "Use keywords in News Sitemap?"
524
- msgstr ""
525
-
526
- #: includes/class-bwp-simple-gxs.php:664
527
- msgid "News Sitemap's language"
528
- msgstr ""
529
-
530
- #: includes/class-bwp-simple-gxs.php:665
531
- msgid "News Categories"
532
- msgstr ""
533
-
534
- #: includes/class-bwp-simple-gxs.php:666
535
- msgid "This module will"
536
- msgstr ""
537
-
538
- #: includes/class-bwp-simple-gxs.php:670
539
- msgid "A Google News Sitemap is a file that allows you to control which content you submit to Google News. By creating and submitting a Google News Sitemap, you're able to help Google News discover and crawl your site's articles &mdash; <em>http://support.google.com/</em>"
540
- msgstr ""
541
-
542
- #: includes/class-bwp-simple-gxs.php:671
543
- msgid "<em>Below you will be able to choose what categories to use (or not use) in the news sitemap. You can also assign genres to a specific category.</em>"
544
- msgstr ""
545
-
546
- #: includes/class-bwp-simple-gxs.php:674
547
- msgid "below selected categories in the news sitemap."
548
- msgstr ""
549
-
550
- #: includes/class-bwp-simple-gxs.php:679
551
- msgid "English"
552
- msgstr ""
553
-
554
- #: includes/class-bwp-simple-gxs.php:680
555
- msgid "French"
556
- msgstr ""
557
-
558
- #: includes/class-bwp-simple-gxs.php:681
559
- msgid "Spanish"
560
- msgstr ""
561
-
562
- #: includes/class-bwp-simple-gxs.php:682
563
- msgid "German"
564
- msgstr ""
565
-
566
- #: includes/class-bwp-simple-gxs.php:683
567
- msgid "Portuguese"
568
- msgstr ""
569
-
570
- #: includes/class-bwp-simple-gxs.php:684
571
- msgid "Polish"
572
- msgstr ""
573
-
574
- #: includes/class-bwp-simple-gxs.php:685
575
- msgid "Norwegian"
576
- msgstr ""
577
-
578
- #: includes/class-bwp-simple-gxs.php:686
579
- msgid "Dutch"
580
- msgstr ""
581
-
582
- #: includes/class-bwp-simple-gxs.php:687
583
- msgid "Italian"
584
- msgstr ""
585
-
586
- #: includes/class-bwp-simple-gxs.php:688
587
- msgid "Vietnamese"
588
- msgstr ""
589
-
590
- #: includes/class-bwp-simple-gxs.php:689
591
- msgid "Simplified Chinese"
592
- msgstr ""
593
-
594
- #: includes/class-bwp-simple-gxs.php:692
595
- msgid "include"
596
- msgstr ""
597
-
598
- #: includes/class-bwp-simple-gxs.php:693
599
- msgid "exclude"
600
- msgstr ""
601
-
602
- #: includes/class-bwp-simple-gxs.php:696
603
- msgid "news categories"
604
- msgstr ""
605
-
606
- #: includes/class-bwp-simple-gxs.php:697
607
- msgid "news tags"
608
- msgstr ""
609
-
610
- #: includes/class-bwp-simple-gxs.php:703
611
- msgid "A new <code>post_google_news.xml</code> sitemap will be added to the main <code>sitemapindex.xml</code>."
612
- msgstr ""
613
-
614
- #: includes/class-bwp-simple-gxs.php:704
615
- msgid "Keywords are derived from"
616
- msgstr ""
617
-
618
- #: includes/class-bwp-simple-gxs.php:705
619
- msgid "This ping works separately from the sitemapindex ping, and only occurs when you publish an article in one of the news categories set below."
620
- msgstr ""
621
-
622
- #: includes/class-bwp-simple-gxs.php:706
623
- msgid "This mode is meant for News Blogs that have posts assigned to more than one categories. It is an advanced feature and should only be enabled if you do have similar blogs."
624
- msgstr ""
625
-
626
- #: includes/class-bwp-simple-gxs.php:712
627
- msgid ". Do <strong>NOT</strong> use news tags if your news sitemap contains a lot of posts as it can be very inefficient to do so. This will be improved in future versions."
628
- msgstr ""
629
-
630
- #: includes/class-bwp-simple-gxs.php:736
631
- #, php-format
632
- msgid "<strong>%d</strong> cached sitemaps have been flushed successfully!"
633
- msgstr "<strong>%d</strong> sitemap-uri din cache au fost reinnoite astazi!"
634
-
635
- #: includes/class-bwp-simple-gxs.php:738
636
- msgid "Could not delete any cached sitemaps. Please manually check the cache directory."
637
- msgstr "Nu s-au putut sterge sitemap-urile din cache. Va rugam verificati manual directorul de cache."
638
-
639
- #: includes/class-bwp-simple-gxs.php:787
640
- msgid "All options have been saved."
641
- msgstr ""
642
-
643
- #: includes/class-bwp-simple-gxs.php:809
644
- msgid "Warning"
645
- msgstr "Atentie"
646
-
647
- #: includes/class-bwp-simple-gxs.php:809
648
- msgid "Cache directory does not exist or is not writable. Please read more about directory permission <a href='http://www.zzee.com/solutions/unix-permissions.shtml'>here</a> (Unix)."
649
- msgstr "Directorul de cache nu exista sau nu este \"writable\". Va rugam citit despre permisiunile directoarelor <a href='http://www.zzee.com/solutions/unix-permissions.shtml'>aici</a> (Unix)."
650
-
651
- #: includes/class-bwp-simple-gxs.php:820
652
- msgid "Clear All Logs"
653
- msgstr ""
654
-
655
- #: includes/class-bwp-simple-gxs.php:874
656
- msgid "(Debug is on)"
657
- msgstr "(Debug-ul este activat)"
658
-
659
- #: includes/class-bwp-simple-gxs.php:887
660
- msgid "<strong>BWP Google XML Sitemaps Error:</strong> "
661
- msgstr "<strong>Eroare Google XML Sitemaps Error:</strong>"
662
-
663
- #: includes/class-bwp-simple-gxs.php:887
664
- msgid "BWP Google XML Sitemaps Error"
665
- msgstr "Eroare Google XML Sitemaps Error"
666
-
667
- #: includes/class-bwp-simple-gxs.php:910
668
- #, php-format
669
- msgid "Nothing here... yet! Try submitting your <a href=\"%s\">sitemapindex</a> first!"
670
- msgstr "Nimic aici... inca! Inscrie tu <a href=\"%s\">sitemap index</a> "
671
-
672
- #: includes/class-bwp-simple-gxs.php:910
673
- msgid "No log yet!"
674
- msgstr "Nimic logat inca!"
675
-
676
- #: includes/class-bwp-simple-gxs.php:921
677
- #, php-format
678
- msgid "<a href=\"%s\" target=\"_blank\">%s</a> has been successfully built on <strong>%s</strong>."
679
- msgstr "<a href=\"%s\" target=\"_blank\">%s</a> a fost creat cu succes pe <strong>%s</strong>."
680
-
681
- #: includes/class-bwp-simple-gxs.php:932
682
- #: includes/class-bwp-simple-gxs.php:949
683
- msgid "M j, Y : H:i:s"
684
- msgstr "M j, Y : H:i:s"
685
-
686
- #: includes/class-bwp-simple-gxs.php:1018
687
- msgid "Category's name"
688
- msgstr ""
689
-
690
- #: includes/class-bwp-simple-gxs.php:1018
691
- #, php-format
692
- msgid "<span>Genres used for this category</span> (more info <a href=\"%s\" target=\"_blank\">here</a>)"
693
- msgstr ""
694
-
695
- #: includes/class-bwp-simple-gxs.php:1309
696
- #, php-format
697
- msgid "Requested module (<em>%s</em>) not found or not allowed."
698
- msgstr "Modulul cerut (<em>%s</em>) nu a fost gasit."
699
-
700
- #: includes/class-bwp-simple-gxs.php:1368
701
- #: includes/class-bwp-simple-gxs.php:1389
702
- #, php-format
703
- msgid "Loaded a custom sub-module file: <strong>%s</strong>."
704
- msgstr "A fost incarcat un sub-modul customizat: <strong>%s</strong>."
705
-
706
- #: includes/class-bwp-simple-gxs.php:1377
707
- #, php-format
708
- msgid "Mapped sub-module file: <strong>%s</strong> is not available in both default and custom module directory. The plugin will now try loading the requested sub-module instead."
709
- msgstr "Sub-modului mapat: <strong>%s</strong> nu este disponibil in directorul prestabilit sau customizat. Plugin-ul va incerca sa incarce modulul cerut."
710
-
711
- #: includes/class-bwp-simple-gxs.php:1397
712
- #, php-format
713
- msgid "Sub-module file: <strong>%s</strong> is not available in both default and custom module directory. The plugin will now try loading the parent module instead."
714
- msgstr "Sub-modulul: <strong>%s</strong> nu este disponibil in directorul prestabilit sau customizat. Plugin-ul va incerca sa incarce modulul parinte"
715
-
716
- #: includes/class-bwp-simple-gxs.php:1411
717
- #, php-format
718
- msgid "Loaded a custom module file: <strong>%s</strong>."
719
- msgstr "A fost incarcat un modul customizat: <strong>%s</strong>."
720
-
721
- #: includes/class-bwp-simple-gxs.php:1417
722
- #, php-format
723
- msgid "Could not load module file: <strong>%s</strong> in both default and custom module directory. Please recheck if that module file exists."
724
- msgstr "Nu a putut fi incarcat modulul: <strong>%s</strong> in directorul prestabilit sau customizat. Va rog verificati daca modulul exista."
725
-
726
- #: includes/class-bwp-simple-gxs.php:1437
727
- #, php-format
728
- msgid "There is no class named <strong>%s</strong> in the module file <strong>%s</strong>."
729
- msgstr "Nu exista o clasa denumita <strong>%s</strong> in modulul <strong>%s</strong>."
730
-
731
- #: includes/class-bwp-simple-gxs.php:1446
732
- #, php-format
733
- msgid "Loaded a custom sitemapindex module file: <strong>%s</strong>."
734
- msgstr "A fost incarcat un sitemapindex customizat: <strong>%s</strong>."
735
-
736
- #: includes/class-bwp-simple-gxs.php:1469
737
- #, php-format
738
- msgid "Successfully generated <em>%s.xml</em> using module <em>%s</em>."
739
- msgstr "<em>%s.xml</em> a fost generat cu succes folosit modulul <em>%s</em>."
740
-
741
- #: includes/class-bwp-simple-gxs.php:1500
742
- msgid "<strong>BWP Google XML Sitemap Message:</strong> Unexpected output (most of the time PHP errors) is preventing BWP GXS from showing any sitemap contents. Try disabling <code>WP_DEBUG</code> or this plugin's debug mode, whichever is on. All unexpected outputs should be shown just above this message. If you don't see any, contact me and I might be able to help."
743
- msgstr ""
744
-
745
- #: includes/class-bwp-simple-gxs.php:1630
746
- msgid "Unknown response code from search engines. Ping failed."
747
- msgstr ""
748
-
749
- #: includes/class-bwp-simple-gxs.php:1632
750
- #, fuzzy, php-format
751
- msgid "Pinged %s with %s successfully!"
752
- msgstr "S-a facut ping cu succes la %s !"
753
-
754
- #: includes/class-bwp-simple-gxs.php:1637
755
- #, php-format
756
- msgid "Error %s from %s"
757
- msgstr ""
758
-
759
- #: includes/class-bwp-simple-gxs.php:1642
760
- #, php-format
761
- msgid "Ping limit for today to %s has been reached, sorry!"
762
- msgstr "Limita de ping pentru azi la %s a fost atinsa!"
763
-
764
- #: includes/class-bwp-simple-gxs.php:1670
765
- #, fuzzy, php-format
766
- msgid "<em>%s.xml</em> does not have any item. You can fix this easily by excluding any post types / terms you do not use in <em>Sitemap Generator</em> tab within your admin area. If you still see this error, consider checking the module that generates this sitemap (<em>%s.php</em>)."
767
- msgstr "<em>%s.xml</em> este gol. Plugin-ul a afisat un header de 404 la motorul de cautare care l-a cerut. Ar trebui sa verifici modulul care genereaza sitemap-ul (<em>%s.php</em>)."
768
-
769
- #: includes/bwp-option-page/includes/class-bwp-option-page.php:80
770
- msgid "Plugin Configurations"
771
- msgstr "Configurarea plugin-ului"
772
-
773
- #: includes/bwp-option-page/includes/class-bwp-option-page.php:398
774
- msgid "Save Changes"
775
- msgstr "Salveaza schimbarile"
776
-
777
- #~ msgid "log"
778
- #~ msgstr "log"
779
-
780
- #~ msgid "Yahoo &mdash; <a href=\"%s\" target=\"_blank\">important</a>"
781
- #~ msgstr "Yahoo &mdash; <a href=\"%s\" target=\"_blank\">important</a>"
782
-
783
- #~ msgid "make your sitemaps ~ 70% smaller."
784
- #~ msgstr "face sitemap-urile cu 70% mai mici."
785
-
786
- #~ msgid "static pages' sitemap."
787
- #~ msgstr "sitemap pentru pagini statice"
788
-
789
- #~ msgid "tag archives' sitemaps."
790
- #~ msgstr "sitemap pentru tag-uri"
791
-
792
- #~ msgid "%s"
793
- #~ msgstr "%s"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
languages/bwp-simple-gxs-zh_TW.mo DELETED
Binary file
languages/bwp-simple-gxs-zh_TW.po DELETED
@@ -1,785 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: BWP Google XML Sitemaps(Malay Translation)\n"
4
- "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2012-04-03 20:10+0700\n"
6
- "PO-Revision-Date: 2012-04-03 20:10+0700\n"
7
- "Last-Translator: \n"
8
- "Language-Team: <darkcry3r@gmail.com>\n"
9
- "MIME-Version: 1.0\n"
10
- "Content-Type: text/plain; charset=UTF-8\n"
11
- "Content-Transfer-Encoding: 8bit\n"
12
- "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n"
13
- "X-Poedit-Basepath: ./../\n"
14
- "X-Poedit-SourceCharset: utf-8\n"
15
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
16
- "X-Poedit-Language: Malay\n"
17
- "X-Poedit-Country: MALAYSIA\n"
18
- "X-Poedit-SearchPath-0: .\n"
19
-
20
- #: includes/class-bwp-framework.php:177
21
- #, php-format
22
- msgid "%s requires WordPress <strong>%s</strong> or higher and PHP <strong>%s</strong> or higher. The plugin will not function until you update your software. Please deactivate this plugin."
23
- msgstr ""
24
-
25
- #: includes/class-bwp-framework.php:188
26
- msgid "Development Log"
27
- msgstr "研發記錄"
28
-
29
- #: includes/class-bwp-framework.php:188
30
- msgid "Frequently Asked Questions"
31
- msgstr "常見問題"
32
-
33
- #: includes/class-bwp-framework.php:188
34
- msgid "FAQ"
35
- msgstr "問與答"
36
-
37
- #: includes/class-bwp-framework.php:188
38
- msgid "Got a problem? Send me a feedback!"
39
- msgstr "有問題嗎?通知我吧!"
40
-
41
- #: includes/class-bwp-framework.php:188
42
- msgid "Contact"
43
- msgstr "聯絡我"
44
-
45
- #: includes/class-bwp-framework.php:195
46
- msgid "You can buy me some special coffees if you appreciate my work, thank you!"
47
- msgstr "如果你欣賞我的工作,請幫我買些咖啡吧!感謝你!"
48
-
49
- #: includes/class-bwp-framework.php:209
50
- msgid "Donate to "
51
- msgstr "贊助"
52
-
53
- #: includes/class-bwp-framework.php:211
54
- msgid "One cup $5.00"
55
- msgstr "一杯 $5.00"
56
-
57
- #: includes/class-bwp-framework.php:212
58
- msgid "Two cups $10.00"
59
- msgstr "兩杯 $10.00"
60
-
61
- #: includes/class-bwp-framework.php:213
62
- msgid "Five cups! $25.00"
63
- msgstr "五杯! $25.00"
64
-
65
- #: includes/class-bwp-framework.php:214
66
- msgid "One LL-cup!!! $50.00"
67
- msgstr "特大杯的 $50.00"
68
-
69
- #: includes/class-bwp-framework.php:215
70
- msgid "... or any amount!"
71
- msgstr "或者你開心的"
72
-
73
- #: includes/class-bwp-framework.php:230
74
- msgid "Latest updates from BetterWP.net!"
75
- msgstr "BetterWP.net 的最新訊息"
76
-
77
- #: includes/class-bwp-framework.php:231
78
- msgid "Follow me on Twitter!"
79
- msgstr "追隨我的 Twitter!"
80
-
81
- #: includes/class-bwp-framework.php:240
82
- #, php-format
83
- msgid "You are using version %s!"
84
- msgstr "你正在使用 %s 版本!"
85
-
86
- #: includes/class-bwp-framework.php:385
87
- msgid "Settings"
88
- msgstr "設定"
89
-
90
- #: includes/class-bwp-gxs-cache.php:34
91
- #, php-format
92
- msgid "Cache directory (\"%s\") does not exist or is not writable."
93
- msgstr "快取資料夾 (\"%s\") 不存在或是不允許寫入"
94
-
95
- #: includes/class-bwp-gxs-cache.php:56
96
- #, php-format
97
- msgid "Cache file for module <em>%s</em> is not found and will be built right away."
98
- msgstr "沒有找到模組 <em>%s</em> 的快取檔案,系統將會建立一個。"
99
-
100
- #: includes/class-bwp-gxs-cache.php:108
101
- #: includes/class-bwp-simple-gxs.php:1341
102
- #, php-format
103
- msgid "Successfully served a cached version of <em>%s.xml</em>."
104
- msgstr "成功的儲存 <em>%s.xml</em> 的快取檔案。"
105
-
106
- #: includes/class-bwp-simple-gxs.php:141
107
- #: includes/class-bwp-simple-gxs.php:347
108
- #: includes/class-bwp-simple-gxs.php:354
109
- msgid "Sitemap Statistics"
110
- msgstr "Sitemap 統計"
111
-
112
- #: includes/class-bwp-simple-gxs.php:142
113
- #: includes/class-bwp-simple-gxs.php:348
114
- #: includes/class-bwp-simple-gxs.php:355
115
- msgid "Sitemap Generator"
116
- msgstr "Sitemap 生成設定"
117
-
118
- #: includes/class-bwp-simple-gxs.php:143
119
- #: includes/class-bwp-simple-gxs.php:349
120
- #: includes/class-bwp-simple-gxs.php:356
121
- #, fuzzy
122
- msgid "News Sitemap"
123
- msgstr "什麼是 Sitemap?"
124
-
125
- #: includes/class-bwp-simple-gxs.php:174
126
- #, php-format
127
- msgid "This sitemap was originally generated in %s second(s) (Memory usage: %s) - %s queries - %s URL(s) listed"
128
- msgstr "This sitemap was originally generated in %s second(s) (Memory usage: %s) - %s queries - %s URL(s) listed"
129
-
130
- #: includes/class-bwp-simple-gxs.php:347
131
- #: includes/class-bwp-simple-gxs.php:354
132
- msgid "BWP Google XML Sitemaps Statistics"
133
- msgstr "BWP Google XML Sitemaps Statistics"
134
-
135
- #: includes/class-bwp-simple-gxs.php:348
136
- #: includes/class-bwp-simple-gxs.php:355
137
- msgid "BWP Google XML Sitemaps Generator"
138
- msgstr "BWP Google XML Sitemaps Generator"
139
-
140
- #: includes/class-bwp-simple-gxs.php:349
141
- #: includes/class-bwp-simple-gxs.php:356
142
- #, fuzzy
143
- msgid "BWP Google News XML Sitemap"
144
- msgstr "BWP Google XML Sitemaps"
145
-
146
- #: includes/class-bwp-simple-gxs.php:353
147
- msgid "BWP Google XML Sitemaps"
148
- msgstr "BWP Google XML Sitemaps"
149
-
150
- #: includes/class-bwp-simple-gxs.php:368
151
- msgid "You do not have sufficient permissions to access this page."
152
- msgstr "你沒有足夠的權限來閱讀本頁面。"
153
-
154
- #: includes/class-bwp-simple-gxs.php:389
155
- #: includes/class-bwp-simple-gxs.php:736
156
- #: includes/class-bwp-simple-gxs.php:738
157
- msgid "Notice"
158
- msgstr "注意"
159
-
160
- #: includes/class-bwp-simple-gxs.php:389
161
- msgid "All logs have been cleared successfully!"
162
- msgstr "成功的清除所有的記錄!"
163
-
164
- #: includes/class-bwp-simple-gxs.php:396
165
- msgid "What are Sitemaps?"
166
- msgstr "什麼是 Sitemap?"
167
-
168
- #: includes/class-bwp-simple-gxs.php:397
169
- msgid "Your sitemaps"
170
- msgstr "你的 sitemap"
171
-
172
- #: includes/class-bwp-simple-gxs.php:398
173
- msgid "Submit your sitemaps"
174
- msgstr "提交你的 sitemap"
175
-
176
- #: includes/class-bwp-simple-gxs.php:399
177
- msgid "Pinging search engines"
178
- msgstr "主動告知搜尋引擎"
179
-
180
- #: includes/class-bwp-simple-gxs.php:400
181
- msgid "Enable pinging functionality?"
182
- msgstr "啟用 ping 的功能"
183
-
184
- #: includes/class-bwp-simple-gxs.php:401
185
- msgid "Enable pinging individual SE"
186
- msgstr "允許告知的 搜尋引擎"
187
-
188
- #: includes/class-bwp-simple-gxs.php:402
189
- msgid "Sitemap Generator's Log"
190
- msgstr "Sitemap 生成的紀錄檔"
191
-
192
- #: includes/class-bwp-simple-gxs.php:403
193
- msgid "Enable logging?"
194
- msgstr "啟用記錄"
195
-
196
- #: includes/class-bwp-simple-gxs.php:404
197
- msgid "Enable debugging?"
198
- msgstr "啟用 偵錯模式"
199
-
200
- #: includes/class-bwp-simple-gxs.php:413
201
- msgid "In its simplest form, a Sitemap is an XML file that lists URLs for a site along with additional metadata about each URL (when it was last updated, how often it usually changes, and how important it is, relative to other URLs in the site) so that search engines can more intelligently crawl the site &mdash; <em>http://www.sitemaps.org/</em>"
202
- msgstr "簡單的說, Sitemap 是一個 XML 檔案將網站的網址及與各網址相關的其他中繼資料 (上次更新日期、變更頻率,以及相對於網站中其他網址的重要性) 列在 XML 檔中,讓搜尋引擎能夠更有效地檢索該網站 &mdash; <em>http://www.sitemaps.org/</em>"
203
-
204
- #: includes/class-bwp-simple-gxs.php:413
205
- msgid "This plugin helps you generate both Sitemap Index files as well as normal Sitemap files. A Sitemap Index, as its name suggests, is one kind of sitemaps that allows you to group multiple sitemap files inside it."
206
- msgstr "本外掛協助你生成 sitemap 的索引檔與 sitemap 的內容. sitemap 索引檔, 就如同他的名稱,他也是一種 sitemap 檔案包含了很多 sitemap 檔案的資訊在其中。"
207
-
208
- #: includes/class-bwp-simple-gxs.php:414
209
- msgid "<em>Basic information about all your sitemaps.</em>"
210
- msgstr "<em>關於你全部的 sitemap 的基本資訊</em>"
211
-
212
- #: includes/class-bwp-simple-gxs.php:415
213
- msgid "<em>More detailed information about how your sitemaps are generated including <span style=\"color: #999999;\">notices</span>, <span style=\"color: #FF0000;\">errors</span> and <span style=\"color: #009900;\">success messages</span>.</em>"
214
- msgstr "<em>更多的關於你的 sitemap 生成的訊息:<span style=\"color: #999999;\">告知資訊</span>, <span style=\"color: #FF0000;\">錯誤訊息</span> 和 <span style=\"color: #009900;\">成功訊息</span>.</em>"
215
-
216
- #: includes/class-bwp-simple-gxs.php:416
217
- #, fuzzy, php-format
218
- msgid "<em>Submit your sitemapindex to major search engines like <a href=\"%s\" target=\"_blank\">Google</a>, <a href=\"%s\" target=\"_blank\">Bing</a> or <a href=\"%s\" target=\"_blank\">Ask</a>.</em>"
219
- msgstr "<em>提交你的 sitemap 索引檔給主要的搜尋引擎。例如: <a href=\"%s\" target=\"_blank\">Google</a>, <a href=\"%s\" target=\"_blank\">Yahoo</a>, <a href=\"%s\" target=\"_blank\">Bing</a> 或 <a href=\"%s\" target=\"_blank\">Ask</a>.</em>"
220
-
221
- #: includes/class-bwp-simple-gxs.php:417
222
- msgid "<em>Now when you post something new to your blog, you can <em>ping</em> those search engines to tell them your blog just got updated. Pinging could be less effective than you think it is but you should enable such feature anyway.</em>"
223
- msgstr "<em>當你發表什麼東西到你的部落格之時, 你可以 <em>ping (主動告知)</em> 搜尋引擎你的部落格剛剛更新. 你可能認為 ping 是不太有效的,但你應該讓他這麼做.</em>"
224
-
225
- #: includes/class-bwp-simple-gxs.php:422
226
- msgid "Selected SE below will be pinged when you publish new posts."
227
- msgstr "在下面選擇的 搜尋引擎 將會在你發表新文章之時主動告知"
228
-
229
- #: includes/class-bwp-simple-gxs.php:423
230
- msgid "No additional load is needed so enabling this is recommended."
231
- msgstr "如果沒有額外的負載需求建議啟用。"
232
-
233
- #: includes/class-bwp-simple-gxs.php:424
234
- msgid "Minor errors will be printed on screen. Also, when debug is on, no caching is used, useful when you develop new modules."
235
- msgstr "錯誤將顯示是在螢幕上. 當啟用偵錯模式,將不會使用快取系統,當你在寫新的 模組 時是很有用的。"
236
-
237
- #: includes/class-bwp-simple-gxs.php:425
238
- msgid "Google"
239
- msgstr "Google"
240
-
241
- #: includes/class-bwp-simple-gxs.php:426
242
- msgid "Bing"
243
- msgstr "Bing"
244
-
245
- #: includes/class-bwp-simple-gxs.php:427
246
- msgid "Ask.com"
247
- msgstr "Ask.com"
248
-
249
- #: includes/class-bwp-simple-gxs.php:430
250
- #, php-format
251
- msgid "After you activate this plugin, all sitemaps should be available right away. The next step is to submit the sitemapindex to major search engines. You only need the <strong>sitemapindex</strong> and nothing else, those search engines will automatically recognize other included sitemaps. You can read a small <a href=\"%s\">How-to</a> if you are interested."
252
- msgstr "在你啟用本外掛之後, 所有的 sitemap索引 應該已經準備妥當. 下一步是向各大搜尋引擎提供你的 sitemap索引 . 你只需要提供 <strong>sitemapindex</strong> 就好, 搜尋引擎應該會自動抓取包含在內的 sitemap 檔案. 如果你感興趣的話,可以觀看 <a href=\"%s\">操作手冊</a> "
253
-
254
- #: includes/class-bwp-simple-gxs.php:458
255
- msgid "Output no more than"
256
- msgstr "輸出不超過"
257
-
258
- #: includes/class-bwp-simple-gxs.php:459
259
- msgid "Default change frequency"
260
- msgstr "預設變更的頻率"
261
-
262
- #: includes/class-bwp-simple-gxs.php:460
263
- msgid "Default priority"
264
- msgstr "預設的優先順序"
265
-
266
- #: includes/class-bwp-simple-gxs.php:461
267
- msgid "Minimum priority"
268
- msgstr "最小的優先順序"
269
-
270
- #: includes/class-bwp-simple-gxs.php:462
271
- msgid "Use GMT for Last Modified date?"
272
- msgstr "在最後更新時間使用 GMT 時間"
273
-
274
- #: includes/class-bwp-simple-gxs.php:463
275
- msgid "Style your sitemaps with an XSLT stylesheet?"
276
- msgstr "為你的 sitemap 加上 XSLT 樣式"
277
-
278
- #: includes/class-bwp-simple-gxs.php:464
279
- msgid "Custom XSLT stylesheet URL"
280
- msgstr "自行設定 XSLT 樣式的網址"
281
-
282
- #: includes/class-bwp-simple-gxs.php:465
283
- msgid "Show build stats in sitemaps?"
284
- msgstr "添加生成狀態在 sitemap 中"
285
-
286
- #: includes/class-bwp-simple-gxs.php:466
287
- msgid "Enable credit?"
288
- msgstr "允許信任的?"
289
-
290
- #: includes/class-bwp-simple-gxs.php:467
291
- msgid "Enable Gzip?"
292
- msgstr "啟用 GZIP"
293
-
294
- #: includes/class-bwp-simple-gxs.php:468
295
- msgid "Clean unexpected output before sitemap generation?"
296
- msgstr "在產生 sitemap 之前清理非預期的輸出"
297
-
298
- #: includes/class-bwp-simple-gxs.php:469
299
- msgid "Sitemap Index Options"
300
- msgstr "Sitemap 索引 設定"
301
-
302
- #: includes/class-bwp-simple-gxs.php:470
303
- msgid "Automatically split post-based sitemaps into smaller sitemaps?"
304
- msgstr "自動分割以文章為基礎的 sitemap 成更小的 sitemap"
305
-
306
- #: includes/class-bwp-simple-gxs.php:471
307
- msgid "Add sitemapindex to individual blog's virtual robots.txt?"
308
- msgstr "加入 sitemap 索引 資訊到虛擬的 robots.txt 中"
309
-
310
- #: includes/class-bwp-simple-gxs.php:472
311
- msgid "Add sitemapindex from all blogs within network to primary blog's virtual robots.txt?"
312
- msgstr "加入所有部落格的 sitemap索引 到主網站的虛擬 robots.txt"
313
-
314
- #: includes/class-bwp-simple-gxs.php:473
315
- msgid "In sitemapindex, include"
316
- msgstr "在 sitemap 索引中包含"
317
-
318
- #: includes/class-bwp-simple-gxs.php:474
319
- msgid "Exclude following post types:"
320
- msgstr "排除下列的文章類型:"
321
-
322
- #: includes/class-bwp-simple-gxs.php:475
323
- msgid "Exclude following taxonomies:"
324
- msgstr "排除下列的分類:"
325
-
326
- #: includes/class-bwp-simple-gxs.php:476
327
- msgid "Module Options"
328
- msgstr "模組設定"
329
-
330
- #: includes/class-bwp-simple-gxs.php:477
331
- msgid "Alternate module directory"
332
- msgstr "強化的模組目錄"
333
-
334
- #: includes/class-bwp-simple-gxs.php:478
335
- msgid "Get no more than"
336
- msgstr "得到不超過"
337
-
338
- #: includes/class-bwp-simple-gxs.php:479
339
- msgid "Caching Options"
340
- msgstr "快取設定"
341
-
342
- #: includes/class-bwp-simple-gxs.php:480
343
- msgid "Enable caching?"
344
- msgstr "啟用快取"
345
-
346
- #: includes/class-bwp-simple-gxs.php:481
347
- msgid "Enable auto cache re-generation?"
348
- msgstr "允許自動更新快取"
349
-
350
- #: includes/class-bwp-simple-gxs.php:482
351
- msgid "Cached sitemaps will last for"
352
- msgstr "快取的有效期"
353
-
354
- #: includes/class-bwp-simple-gxs.php:483
355
- msgid "Cached sitemaps are stored in (auto detected)"
356
- msgstr "快取檔案的所在地 (自動填寫)"
357
-
358
- #: includes/class-bwp-simple-gxs.php:487
359
- msgid "<em>Cache your sitemaps for better performance.</em>"
360
- msgstr "<em>快取你的 sitemap 可有更好的性能</em>"
361
-
362
- #: includes/class-bwp-simple-gxs.php:488
363
- #, php-format
364
- msgid "<em>This plugin uses modules to build sitemap data so it is recommended that you extend this plugin using modules rather than hooks. Some of the settings below only affect modules extending the base module class. Read more about using modules <a href=\"%s#using-modules\">here</a>.</em>"
365
- msgstr "<em>本外掛使用模組的方式來生成 sitemap, 所以建議你在強化本外掛時使用 模組 而不是 hooks. 底下的設定只會影響到以基本模組擴展而來的模組。於 <a href=\"%s#using-modules\">這裡</a> 取得更多關於模組的資訊。</em>"
366
-
367
- #: includes/class-bwp-simple-gxs.php:489
368
- msgid "<em>Here you can change some settings that affect the default Sitemap Index file.</em>"
369
- msgstr "<em>這裡你可以改變一些預設的 sitemap 索引 設定.</em>"
370
-
371
- #: includes/class-bwp-simple-gxs.php:503
372
- #: includes/class-bwp-simple-gxs.php:509
373
- msgid "second(s)"
374
- msgstr "秒"
375
-
376
- #: includes/class-bwp-simple-gxs.php:504
377
- #: includes/class-bwp-simple-gxs.php:510
378
- msgid "minute(s)"
379
- msgstr "分鐘"
380
-
381
- #: includes/class-bwp-simple-gxs.php:505
382
- #: includes/class-bwp-simple-gxs.php:511
383
- msgid "hour(s)"
384
- msgstr "小時"
385
-
386
- #: includes/class-bwp-simple-gxs.php:506
387
- #: includes/class-bwp-simple-gxs.php:512
388
- msgid "day(s)"
389
- msgstr "天"
390
-
391
- #: includes/class-bwp-simple-gxs.php:519
392
- #: includes/class-bwp-simple-gxs.php:520
393
- #: includes/class-bwp-simple-gxs.php:521
394
- msgid "read more"
395
- msgstr "更多資訊"
396
-
397
- #: includes/class-bwp-simple-gxs.php:524
398
- msgid "your sitemaps are generated and then cached to reduce unnecessary work."
399
- msgstr "將你生成的 sitemap 快取,以減少不必要的工作."
400
-
401
- #: includes/class-bwp-simple-gxs.php:525
402
- msgid "when a cached sitemap expires, this plugin will try to generate the cache again. If you disable this, remember to manually flush the cache once in a while."
403
- msgstr "當 sitemap 的快取資料過期,系統將嘗試建立新的快取資料. 如果你不允許, 記得每隔一動時間清空你的快取檔案。"
404
-
405
- #: includes/class-bwp-simple-gxs.php:525
406
- msgid "Flush the cache"
407
- msgstr "清空快取檔案"
408
-
409
- #: includes/class-bwp-simple-gxs.php:526
410
- msgid "tell you useful information such as build time, memory usage, SQL queries, etc."
411
- msgstr "告訴你一些有用的資訊,如生成時間、記憶體使用量、 SQL 次數等"
412
-
413
- #: includes/class-bwp-simple-gxs.php:527
414
- #, fuzzy, php-format
415
- msgid "make your sitemaps ~ 70% smaller. <strong>Important:</strong> If you see an error after enabling this, it's very likely that you have gzip active on your server already."
416
- msgstr "使你的 sitrmap 縮小約 70%。<strong>重要:</strong> 如果有錯誤產生的話,很可能是因為你的伺服器上已經有設定 GZIP 了。"
417
-
418
- #: includes/class-bwp-simple-gxs.php:528
419
- msgid "only disable this when sitemaps appear in either blank page or plain text."
420
- msgstr "只有在 sitemap 出現一片空白或純文字呈現的時候才要停用。"
421
-
422
- #: includes/class-bwp-simple-gxs.php:529
423
- #, php-format
424
- msgid "If you have like 50 blogs, 50 <code>Sitemap: http://example.com/sitemapindex.xml</code> entries will be added to your primary blog's robots.txt, i.e. <code>%s</code>."
425
- msgstr "如果你有 50個部落格, 50行 <code>Sitemap: http://example.com/sitemapindex.xml</code> 將會加入到你主站的 robots.txt 當中。<code>%s</code>"
426
-
427
- #: includes/class-bwp-simple-gxs.php:530
428
- msgid "taxonomy archives' sitemaps, including custom taxonomies."
429
- msgstr "分類彙整的 sitemap,包含自行定義的。"
430
-
431
- #: includes/class-bwp-simple-gxs.php:532
432
- msgid "date archives' sitemaps."
433
- msgstr "日期彙整的 sitemap"
434
-
435
- #: includes/class-bwp-simple-gxs.php:533
436
- msgid "external pages' sitemap. This allows you to add links to pages that do not belong to WordPress to the sitemap."
437
- msgstr "外部頁面的 sitemap。使你可以添加一些不屬於 WordPress 生成的頁面。"
438
-
439
- #: includes/class-bwp-simple-gxs.php:534
440
- msgid "some copyrighted info is also added to your sitemaps. Thanks!"
441
- msgstr "一些版權保護的訊息也會加入 sitemap 中。感謝!"
442
-
443
- #: includes/class-bwp-simple-gxs.php:535
444
- msgid "This will load the default style sheet provided by this plugin. You can set a custom style sheet below or filter the <code>bwp_gxs_xslt</code> hook."
445
- msgstr "這會為你載入本外掛預設的樣式。你可以在下面設定你自己的樣式或使用過濾器 <code>bwp_gxs_xslt</code> 來更改。"
446
-
447
- #: includes/class-bwp-simple-gxs.php:536
448
- #, php-format
449
- msgid "If you're on a Multi-site installation with Sub-domain enabled, each site will have its own robots.txt, sites in sub-directory will not. Please read the <a href=\"%s#toc-robots\" target=\"_blank\">documentation</a> for more info."
450
- msgstr "如果你使用 多網站的WordPress, 在一個子域名中的每一個網站將有自己的 robots.txt,如果在子資料夾就不會。請參考 <a href=\"%s#toc-robots\" target=\"_blank\">說明文件</a> 以得到更多的訊息。"
451
-
452
- #: includes/class-bwp-simple-gxs.php:537
453
- msgid "e.g. post1.xml, post2.xml, etc. And each sitemap will contain"
454
- msgstr "例如:post1.xml, post2.xml 等。而且每一個 sitemap 包含"
455
-
456
- #: includes/class-bwp-simple-gxs.php:538
457
- msgid "If you disable this, make sure you also use <code>date_default_timezone_set</code> to correctly set up a timezone for your application."
458
- msgstr "如果你停用這選項,請確定你有使用 <code>date_default_timezone_set</code> 來正確的設定網站的時區。"
459
-
460
- #: includes/class-bwp-simple-gxs.php:539
461
- msgid "author archives' sitemap."
462
- msgstr "作者彙整的 sitemap"
463
-
464
- #: includes/class-bwp-simple-gxs.php:540
465
- msgid "site's home URL sitemap. For a multi-site installation of WordPress, this sitemap will list all domains within your network, not just the main blog. This also supports WPMU Domain Mapping plugin."
466
- msgstr "網站首頁的 sitemap。當使用 多網站的WordPress ,這個 sitemap 會列出所有網站的連結,不只有主要的網站。這也支援 WPMU 的網站映射功能。"
467
-
468
- #: includes/class-bwp-simple-gxs.php:543
469
- msgid "item(s) in one sitemap. You can not go over 50,000."
470
- msgstr "項目在一個 sitemap 中。不能超過 50,000。"
471
-
472
- #: includes/class-bwp-simple-gxs.php:544
473
- msgid "item(s). Again , you can not go over 50,000."
474
- msgstr "項目。再次重申,不可以超過 50,000"
475
-
476
- #: includes/class-bwp-simple-gxs.php:545
477
- msgid "Input a full path to the directory where you put your own modules (e.g. <code>/home/mysite/public_html/gxs-modules/</code>), you can also override a built-in module by having a module with the same filename in this directory. A filter is also available if you would like to use PHP instead."
478
- msgstr "輸入你的模組所在的資料夾的絕對目錄 (例如 <code>/home/mysite/public_html/gxs-modules/</code>), 你可以藉由使用跟預設模組相同的名稱來改寫內建的模組內容. A filter is also available if you would like to use PHP instead."
479
-
480
- #: includes/class-bwp-simple-gxs.php:546
481
- msgid "The cache directory must be writable (i.e. CHMOD to 755 or 777)."
482
- msgstr "快取檔案所在地需要可以寫入的 (例如 CHMOD 為 755 或 777)."
483
-
484
- #: includes/class-bwp-simple-gxs.php:547
485
- msgid "item(s) in one SQL query. This helps you avoid running too heavy queries."
486
- msgstr "項目在一個 SQL 查詢中。 這可以避免過慢的查詢。"
487
-
488
- #: includes/class-bwp-simple-gxs.php:550
489
- msgid "expected to be an absolute URL, e.g. <code>http://example.com/my-stylesheet.xsl</code>. You must also have a style sheet for the sitemapindex that can be accessed through the above URL, e.g. <code>my-stylesheet.xsl</code> and <code>my-stylesheetindex.xsl</code>). Please leave blank if you do not wish to use."
490
- msgstr "預設為一個完整的網址,例如<code>http://example.com/my-stylesheet.xsl</code>。你還必須要有一個針對 sitemap索引 的樣式錶,例如<code>my-stylesheet.xsl</code> and <code>my-stylesheetindex.xsl</code>。如果你不需要使用請留空白。"
491
-
492
- #: includes/class-bwp-simple-gxs.php:557
493
- #, php-format
494
- msgid "<em><strong>Note:</strong> If you encounter white page problem, please refer to the <a target=\"_blank\" href=\"%s\">FAQ section</a> to know how to change this limit appropriately to make this plugin work. Also note that, for post-based sitemaps, this option will be overridden by the limit you set in the Sitemap Index Options below.</em>"
495
- msgstr "<em><strong>注意:</strong> 如果有空白頁面的問題,請參考 <a target=\"_blank\" href=\"%s\">常見問題</a> 以瞭解如何是當的修改限制讓外掛順利運作。也請注意,再以文章為基礎的 sitemap,這個設定值會被你在之後【Sitemap 索引 設定】中的設定複寫。</em>"
496
-
497
- #: includes/class-bwp-simple-gxs.php:659
498
- #, fuzzy
499
- msgid "What is a Google News Sitemap?"
500
- msgstr "什麼是 Sitemap?"
501
-
502
- #: includes/class-bwp-simple-gxs.php:660
503
- msgid "Enable this module?"
504
- msgstr ""
505
-
506
- #: includes/class-bwp-simple-gxs.php:661
507
- msgid "Enable Multi-category Mode?"
508
- msgstr ""
509
-
510
- #: includes/class-bwp-simple-gxs.php:662
511
- msgid "Ping Search Engines when you publish a news article?"
512
- msgstr ""
513
-
514
- #: includes/class-bwp-simple-gxs.php:663
515
- msgid "Use keywords in News Sitemap?"
516
- msgstr ""
517
-
518
- #: includes/class-bwp-simple-gxs.php:664
519
- msgid "News Sitemap's language"
520
- msgstr ""
521
-
522
- #: includes/class-bwp-simple-gxs.php:665
523
- msgid "News Categories"
524
- msgstr ""
525
-
526
- #: includes/class-bwp-simple-gxs.php:666
527
- msgid "This module will"
528
- msgstr ""
529
-
530
- #: includes/class-bwp-simple-gxs.php:670
531
- msgid "A Google News Sitemap is a file that allows you to control which content you submit to Google News. By creating and submitting a Google News Sitemap, you're able to help Google News discover and crawl your site's articles &mdash; <em>http://support.google.com/</em>"
532
- msgstr ""
533
-
534
- #: includes/class-bwp-simple-gxs.php:671
535
- msgid "<em>Below you will be able to choose what categories to use (or not use) in the news sitemap. You can also assign genres to a specific category.</em>"
536
- msgstr ""
537
-
538
- #: includes/class-bwp-simple-gxs.php:674
539
- msgid "below selected categories in the news sitemap."
540
- msgstr ""
541
-
542
- #: includes/class-bwp-simple-gxs.php:679
543
- msgid "English"
544
- msgstr ""
545
-
546
- #: includes/class-bwp-simple-gxs.php:680
547
- msgid "French"
548
- msgstr ""
549
-
550
- #: includes/class-bwp-simple-gxs.php:681
551
- msgid "Spanish"
552
- msgstr ""
553
-
554
- #: includes/class-bwp-simple-gxs.php:682
555
- msgid "German"
556
- msgstr ""
557
-
558
- #: includes/class-bwp-simple-gxs.php:683
559
- msgid "Portuguese"
560
- msgstr ""
561
-
562
- #: includes/class-bwp-simple-gxs.php:684
563
- msgid "Polish"
564
- msgstr ""
565
-
566
- #: includes/class-bwp-simple-gxs.php:685
567
- msgid "Norwegian"
568
- msgstr ""
569
-
570
- #: includes/class-bwp-simple-gxs.php:686
571
- msgid "Dutch"
572
- msgstr ""
573
-
574
- #: includes/class-bwp-simple-gxs.php:687
575
- msgid "Italian"
576
- msgstr ""
577
-
578
- #: includes/class-bwp-simple-gxs.php:688
579
- msgid "Vietnamese"
580
- msgstr ""
581
-
582
- #: includes/class-bwp-simple-gxs.php:689
583
- msgid "Simplified Chinese"
584
- msgstr ""
585
-
586
- #: includes/class-bwp-simple-gxs.php:692
587
- msgid "include"
588
- msgstr ""
589
-
590
- #: includes/class-bwp-simple-gxs.php:693
591
- msgid "exclude"
592
- msgstr ""
593
-
594
- #: includes/class-bwp-simple-gxs.php:696
595
- msgid "news categories"
596
- msgstr ""
597
-
598
- #: includes/class-bwp-simple-gxs.php:697
599
- msgid "news tags"
600
- msgstr ""
601
-
602
- #: includes/class-bwp-simple-gxs.php:703
603
- msgid "A new <code>post_google_news.xml</code> sitemap will be added to the main <code>sitemapindex.xml</code>."
604
- msgstr ""
605
-
606
- #: includes/class-bwp-simple-gxs.php:704
607
- msgid "Keywords are derived from"
608
- msgstr ""
609
-
610
- #: includes/class-bwp-simple-gxs.php:705
611
- msgid "This ping works separately from the sitemapindex ping, and only occurs when you publish an article in one of the news categories set below."
612
- msgstr ""
613
-
614
- #: includes/class-bwp-simple-gxs.php:706
615
- msgid "This mode is meant for News Blogs that have posts assigned to more than one categories. It is an advanced feature and should only be enabled if you do have similar blogs."
616
- msgstr ""
617
-
618
- #: includes/class-bwp-simple-gxs.php:712
619
- msgid ". Do <strong>NOT</strong> use news tags if your news sitemap contains a lot of posts as it can be very inefficient to do so. This will be improved in future versions."
620
- msgstr ""
621
-
622
- #: includes/class-bwp-simple-gxs.php:736
623
- #, php-format
624
- msgid "<strong>%d</strong> cached sitemaps have been flushed successfully!"
625
- msgstr "成功的更新 <strong>%d</strong> sitemap 的快取檔案"
626
-
627
- #: includes/class-bwp-simple-gxs.php:738
628
- msgid "Could not delete any cached sitemaps. Please manually check the cache directory."
629
- msgstr ""
630
-
631
- #: includes/class-bwp-simple-gxs.php:787
632
- msgid "All options have been saved."
633
- msgstr ""
634
-
635
- #: includes/class-bwp-simple-gxs.php:809
636
- msgid "Warning"
637
- msgstr "警告"
638
-
639
- #: includes/class-bwp-simple-gxs.php:809
640
- msgid "Cache directory does not exist or is not writable. Please read more about directory permission <a href='http://www.zzee.com/solutions/unix-permissions.shtml'>here</a> (Unix)."
641
- msgstr ""
642
-
643
- #: includes/class-bwp-simple-gxs.php:820
644
- msgid "Clear All Logs"
645
- msgstr "清除所有記錄"
646
-
647
- #: includes/class-bwp-simple-gxs.php:874
648
- msgid "(Debug is on)"
649
- msgstr "(啟用 偵錯模式)"
650
-
651
- #: includes/class-bwp-simple-gxs.php:887
652
- msgid "<strong>BWP Google XML Sitemaps Error:</strong> "
653
- msgstr "<strong>BWP Google XML Sitemaps 錯誤訊息:</strong> "
654
-
655
- #: includes/class-bwp-simple-gxs.php:887
656
- msgid "BWP Google XML Sitemaps Error"
657
- msgstr "BWP Google XML Sitemaps 錯誤訊息:"
658
-
659
- #: includes/class-bwp-simple-gxs.php:910
660
- #, php-format
661
- msgid "Nothing here... yet! Try submitting your <a href=\"%s\">sitemapindex</a> first!"
662
- msgstr "還沒有任何的東西! 請先嘗試連結 <a href=\"%s\">sitemapindex</a>!"
663
-
664
- #: includes/class-bwp-simple-gxs.php:910
665
- msgid "No log yet!"
666
- msgstr "還沒有任何的記錄!"
667
-
668
- #: includes/class-bwp-simple-gxs.php:921
669
- #, php-format
670
- msgid "<a href=\"%s\" target=\"_blank\">%s</a> has been successfully built on <strong>%s</strong>."
671
- msgstr "<a href=\"%s\" target=\"_blank\">%s</a> 於 <strong>%s</strong> 成功的生成"
672
-
673
- #: includes/class-bwp-simple-gxs.php:932
674
- #: includes/class-bwp-simple-gxs.php:949
675
- msgid "M j, Y : H:i:s"
676
- msgstr "M j, Y : H:i:s"
677
-
678
- #: includes/class-bwp-simple-gxs.php:1018
679
- msgid "Category's name"
680
- msgstr ""
681
-
682
- #: includes/class-bwp-simple-gxs.php:1018
683
- #, php-format
684
- msgid "<span>Genres used for this category</span> (more info <a href=\"%s\" target=\"_blank\">here</a>)"
685
- msgstr ""
686
-
687
- #: includes/class-bwp-simple-gxs.php:1309
688
- #, php-format
689
- msgid "Requested module (<em>%s</em>) not found or not allowed."
690
- msgstr "請求的模組 (<em>%s</em>) 不存在或是不允許使用。"
691
-
692
- #: includes/class-bwp-simple-gxs.php:1368
693
- #: includes/class-bwp-simple-gxs.php:1389
694
- #, php-format
695
- msgid "Loaded a custom sub-module file: <strong>%s</strong>."
696
- msgstr ""
697
-
698
- #: includes/class-bwp-simple-gxs.php:1377
699
- #, php-format
700
- msgid "Mapped sub-module file: <strong>%s</strong> is not available in both default and custom module directory. The plugin will now try loading the requested sub-module instead."
701
- msgstr ""
702
-
703
- #: includes/class-bwp-simple-gxs.php:1397
704
- #, php-format
705
- msgid "Sub-module file: <strong>%s</strong> is not available in both default and custom module directory. The plugin will now try loading the parent module instead."
706
- msgstr "子模組 <strong>%s</strong> 檔案並不存在於預設或是自行定義的模組資料夾中。外掛將會嘗試以其父模組取代他的作用。"
707
-
708
- #: includes/class-bwp-simple-gxs.php:1411
709
- #, php-format
710
- msgid "Loaded a custom module file: <strong>%s</strong>."
711
- msgstr ""
712
-
713
- #: includes/class-bwp-simple-gxs.php:1417
714
- #, php-format
715
- msgid "Could not load module file: <strong>%s</strong> in both default and custom module directory. Please recheck if that module file exists."
716
- msgstr "無法載入模組檔案 <strong>%s</strong> 。請檢查模組檔案是否存在。"
717
-
718
- #: includes/class-bwp-simple-gxs.php:1437
719
- #, php-format
720
- msgid "There is no class named <strong>%s</strong> in the module file <strong>%s</strong>."
721
- msgstr ""
722
-
723
- #: includes/class-bwp-simple-gxs.php:1446
724
- #, php-format
725
- msgid "Loaded a custom sitemapindex module file: <strong>%s</strong>."
726
- msgstr ""
727
-
728
- #: includes/class-bwp-simple-gxs.php:1469
729
- #, php-format
730
- msgid "Successfully generated <em>%s.xml</em> using module <em>%s</em>."
731
- msgstr "成功的生成 <em>%s.xml</em> ,使用模組 <em>%s</em> "
732
-
733
- #: includes/class-bwp-simple-gxs.php:1500
734
- msgid "<strong>BWP Google XML Sitemap Message:</strong> Unexpected output (most of the time PHP errors) is preventing BWP GXS from showing any sitemap contents. Try disabling <code>WP_DEBUG</code> or this plugin's debug mode, whichever is on. All unexpected outputs should be shown just above this message. If you don't see any, contact me and I might be able to help."
735
- msgstr ""
736
-
737
- #: includes/class-bwp-simple-gxs.php:1630
738
- msgid "Unknown response code from search engines. Ping failed."
739
- msgstr ""
740
-
741
- #: includes/class-bwp-simple-gxs.php:1632
742
- #, fuzzy, php-format
743
- msgid "Pinged %s with %s successfully!"
744
- msgstr "成功的主動通知 %s。"
745
-
746
- #: includes/class-bwp-simple-gxs.php:1637
747
- #, php-format
748
- msgid "Error %s from %s"
749
- msgstr "錯誤 %s 來至於 %s"
750
-
751
- #: includes/class-bwp-simple-gxs.php:1642
752
- #, php-format
753
- msgid "Ping limit for today to %s has been reached, sorry!"
754
- msgstr "對不起!已超過本日的限額 %s。"
755
-
756
- #: includes/class-bwp-simple-gxs.php:1670
757
- #, fuzzy, php-format
758
- msgid "<em>%s.xml</em> does not have any item. You can fix this easily by excluding any post types / terms you do not use in <em>Sitemap Generator</em> tab within your admin area. If you still see this error, consider checking the module that generates this sitemap (<em>%s.php</em>)."
759
- msgstr "<em>%s.xml</em> 不包含任何的項目。本外掛將針對收尋引擎的請求送出 404 錯誤。你應該要檢查負責生成本 sitemap 的檔案(<em>%s.php</em>)。"
760
-
761
- #: includes/bwp-option-page/includes/class-bwp-option-page.php:80
762
- msgid "Plugin Configurations"
763
- msgstr "外掛設定"
764
-
765
- #: includes/bwp-option-page/includes/class-bwp-option-page.php:398
766
- msgid "Save Changes"
767
- msgstr "儲存變更"
768
-
769
- #~ msgid "Yahoo &mdash; <a href=\"%s\" target=\"_blank\">important</a>"
770
- #~ msgstr "Yahoo &mdash; <a href=\"%s\" target=\"_blank\">資訊</a>"
771
-
772
- #~ msgid "log"
773
- #~ msgstr "log"
774
-
775
- #~ msgid "make your sitemaps ~ 70% smaller."
776
- #~ msgstr "make your sitemaps ~ 70% smaller."
777
-
778
- #~ msgid "static pages' sitemap."
779
- #~ msgstr "static pages' sitemap."
780
-
781
- #~ msgid "tag archives' sitemaps."
782
- #~ msgstr "tag archives' sitemaps."
783
-
784
- #~ msgid "%s"
785
- #~ msgstr "%s"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.txt CHANGED
@@ -1,62 +1,108 @@
1
- === Better WordPress Google XML Sitemaps (with sitemapindex, multi-site and Google News sitemap support) ===
2
  Contributors: OddOneOut
3
  Donate link: http://betterwp.net/wordpress-plugins/google-xml-sitemaps/#contributions
4
- Tags: xml sitemaps, xml sitemap, google xml sitemaps, sitemapindex, sitemap, sitemaps, sitemap.xml, seo, bing, google, msn, ask, google news, news sitemap, google news sitemap
5
- Requires at least: 3.0
6
- Tested up to: 3.9.1
7
- Stable tag: 1.3.0
8
  License: GPLv3 or later
9
 
10
- The first WordPress XML Sitemap plugin that comes with comprehensive support for Sitemapindex, Multi-site and Google News sitemap.
 
11
 
12
  == Description ==
13
 
14
- With BWP GXS you will no longer have to worry about the 50,000 URL limit or the time it takes for a sitemap to be generated. This plugin is fast, consumes much less resource and can be extended via your very own modules (yes, no hooks needed!). Here's a [demo](http://betterwp.net/sitemapindex.xml) of the sitemapindex if you are interested.
 
 
 
 
15
 
16
- **Google News Sitemap Support (since 1.2.0)**
17
 
18
- Add a [Google News sitemap](https://support.google.com/news/publisher/answer/75717?hl=en&ref_topic=4359874) to your sitemapindex easily. News sitemap can be used to ping search engines individually if you want. And of course, whenever you publish a new post in a news category, all selected search engines will be pinged.
 
 
 
19
 
20
- **Sitemapindex Support**
 
21
 
22
- Sitemapindex, as its name suggests, is one kind of sitemaps that allows you to group multiple sitemaps files inside it. Sitemapindex, therefore, gives you many benefits, such as: possibility to bypass the 50,000 URL limit (you can have 10 custom sitemaps, each has 10000 URLs), or possibility to make the generation time much faster (because each sitemap is requested separately and is built by its own module), etc.
23
 
24
- **Splitting post-based sitemaps (since 1.1.0)**
 
 
25
 
26
- As of version 1.1.0, this plugin can automatically split large post sitemaps into smaller ones. You can set a limit for each small sitemap. For example if you have 200K posts and would like to have 10K posts for each sitemap, BWP GXS will then split `post.xml` into 20 parts (i.e. from `post_part1.xml` to `post_part20.xml`). This helps you bypass the 50,000 URLs limit without having to build your custom modules, and also helps make your sitemaps smaller, lighter, and of course faster to generate. This plugin has been tested on sites that have nearly 200K posts and it took less than 1 second to generate the sitemapindex.
27
 
28
- **Multi-site Support**
29
 
30
- Each website within your network will have its own sitemapindex and sitemaps. For sub-domain installation, your sitemapindex will appear at `http://sub-domain.example.com/sitemapindex.xml`. For sub-folder installation, your sitemapindex will appear at `http://example.com/sub-folder/sitemapindex.xml`. And of course, there's always a sitemapindex for your main site, available at `http://example.com/sitemapindex.xml`. If you choose the sub-domain approach, each sub-domain can also have its own robots.txt.
 
31
 
32
- **Custom sitemaps using modules**
 
 
 
33
 
34
- The unrivaled flexibility this plugin offers is the ability to define your custom sitemaps using modules. Each module is a actually .php file that tell BWP Google XML Sitemap how to build a sitemap file. You can extend default modules or create completely new ones. This plugin also comes with a convenient base class for developing modules with easy to use and thoroughly documented API. Since modules can be defined by you, there's no limitation what a sitemap can have (for example you can bypass the 50,000 URL limit, as stated above). There's one limitation, though: your imagination ;) . Oh, did I mention that you can even use module to create another sitemapindex?
 
35
 
36
- **Detailed Sitemap Log and Debug**
37
 
38
- Developing modules needs debugging and this plugin makes that so easy for any developers.
 
 
 
39
 
40
- There are two kinds of logs: sitemap item log and sitemap generation log. Sitemap item log tells you what and when sitemaps are generated while sitemap generation log tells you how they are generated.
 
 
 
41
 
42
- As of version 1.3.0 there are two debug modes, namely "Debug" and "Debug extra", read more [here](http://betterwp.net/wordpress-plugins/google-xml-sitemaps/#sitemap_log_debug) to know how to make the most out of them.
 
43
 
44
- **For a complete feature list, please visit this [plugin's official page](http://betterwp.net/wordpress-plugins/google-xml-sitemaps/)**
45
 
46
- Please don't forget to rate this plugin [5 shining stars](http://wordpress.org/support/view/plugin-reviews/bwp-google-xml-sitemaps?filter=5) if you like it, thanks!
47
 
48
- **Important Notes**
 
49
 
50
- If you have any problem using this plugin, refer to the [FAQ section](http://betterwp.net/wordpress-plugins/google-xml-sitemaps/faq/) for possible solutions, and workarounds.
51
 
52
- **Get in touch**
53
 
54
- * Support is provided via [BetterWP.net Community](http://betterwp.net/community/).
55
- * Follow and contribute to development via [Github](https://github.com/OddOneOut/Better-WordPress-Google-XML-Sitemaps).
56
- * You can also follow me on [Twitter](http://twitter.com/0dd0ne0ut).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  * Check out [latest WordPress Tips and Ideas](http://feeds.feedburner.com/BetterWPnet) from BetterWP.net.
58
 
59
- **Languages**
60
 
61
  * English (default)
62
  * Malaysian (ms_MY) - Thanks to [d4rkcry3r](http://d4rkcry3r.com)!
@@ -71,23 +117,118 @@ Please [help translate](http://betterwp.net/wordpress-tips/create-pot-file-using
71
  1. Upload the `bwp-google-xml-sitemaps` folder to the `/wp-content/plugins/` directory
72
  2. Activate the plugin through the Plugins menu in WordPress. After activation, you should see a menu of this plugin on your left. If you can not locate it, click on Settings under the plugin's name.
73
  3. Configure the plugin
74
- 4. Build your sitemap for the first time or just submit the sitemapindex to all major search engines.
75
  5. Enjoy!
76
 
77
  [View instructions with images](http://betterwp.net/wordpress-plugins/google-xml-sitemaps/installation/).
78
 
79
  == Frequently Asked Questions ==
80
 
81
- [Visit this link for the complete FAQ](http://betterwp.net/wordpress-plugins/google-xml-sitemaps/faq/)
 
 
82
 
83
  == Screenshots ==
84
 
85
- 1. A sample Sitemap Index this plugin produces. Large post-based sitemaps are split into smaller parts.
86
- 2. A custom post type sitemap
87
- 3. An external pages sitemap
 
 
 
 
 
88
 
89
  == Changelog ==
90
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  = 1.3.0 =
92
  * **New features**
93
  * Added a new setting to control which post types can be used to ping search engines
@@ -134,142 +275,6 @@ Please [help translate](http://betterwp.net/wordpress-tips/create-pot-file-using
134
  * if you're using custom modules make sure that you re-read the [documentation](http://betterwp.net/wordpress-plugins/google-xml-sitemaps/#module_api) for updated info about the module API.
135
  * When the sitemapindex is generated for the first time, you won't see any <em>Last modified date</em> for any child sitemaps because none of them have been generated yet. This is expected and adhered to the <a href="http://www.sitemaps.org/protocol.html#sitemapIndexTagDefinitions">official sitemap protocol</a>.
136
 
137
- **Next major version (1.4.0) will have Image and Video sitemap support, so make sure you [stay alerted](http://feeds.feedburner.com/BetterWPnet)!**
138
-
139
- = 1.2.3 =
140
- * Temporary fix for unexpected character that appears on every page.
141
-
142
- = 1.2.2 =
143
-
144
- * Marked as WordPress 3.7 compatible.
145
- * Added two new Google News Sitemap languages: Turkish (tr) and Russian (ru).
146
- * Updated BWP Framework to fix a possible bug that caues BWP setting pages to go blank.
147
- * Removed Ask.com's pinging service as it has been retired.
148
- * **Good news**: ManageWP.com has become the official sponsor for BWP Google Xml Sitemaps - [Read more](http://betterwp.net/319-better-wordpress-plugins-updates-2013/).
149
-
150
- = 1.2.1 =
151
- As you might have guessed, this release focuses on improving the new Google News Sitemap Module which was introduced in 1.2.0. Below are some enhancements:
152
-
153
- * Added new languages (Spanish, German, Polish, Portuguese, etc.).
154
- * Added a new hook (`bwp_gxs_news_name`) that allows you to set a custom sitename without having to change the sitename setting inside WordPress.
155
- * Added a new option that allows you to choose whether to use news categories or news tags as keywords (very experimental and can be inefficient if you have a lot of posts).
156
- * WordPress's timezone settings are now properly respected.
157
- * Genres tags are omitted entirely if no genres are set for a particular categories.
158
- * A new Multi-category mode (disabled by default) has been added that offers the following features:
159
- * If a post is in both an included and an excluded category, it's now excluded.
160
- * If a post is in two or more categories, it can now have all genres that are assigned to those categories.
161
- * If a post is in two or more categories, it can now have all categories as its keywords (only if you choose to use news categories as keywords of course)
162
-
163
- Other functionality of BWP GXS remains the same, so test the News sitemap as much as you can and report any bug you may stumble upon. Enjoy :).
164
-
165
- = 1.2.0 =
166
- * Added a Google News sitemap module. Creating a news sitemap has never been so easy! More information can be found [here](http://betterwp.net/314-bwp-gxs-1-2-0-with-news-sitemap/).
167
- * WPMU Domain Mapping is now supported better (robots.txt, site.xml, sitemap urls in Statistics tab).
168
- * BWP GXS's menu can now be put under **Settings** using a simple filter.
169
- * BWP GXS's admin style is now enqueued correctly so no more warning from WordPress.
170
- * Added a Traditional Chinese and a Romanian transation, thanks to Richer Yang and Luke Tyler!
171
- * All invalid URls, such as `#` and external or empty ones, are now removed from sitemaps.
172
- * Removed Yahoo's pinging service.
173
- * Fixed a bug that causes duplicate author entries to appear in author sitemap.
174
- * Fixed a bug that causes a "class not found" error with paginated custom post type sitemap modules.
175
- * Other fixes and improvements.
176
-
177
- **Report bugs, request features here: http://betterwp.net/community/forum/2/bwp-google-xml-sitemaps/**
178
-
179
- = 1.1.6 =
180
- * Temporary fix for 1.1.5's broken custom post type URL issue.
181
-
182
- = 1.1.5 =
183
- * Added a new 'site.xml' sitemap that lists all blogs within your site / network.
184
- * Added a new 'author.xml' sitemap that lists all authors contributing to a blog.
185
- * BWP GXS should now show the correct mapped sitemap URLs in the Statistics tab if you use WPMU Domain Mapping plugin.
186
- * Fixed a bug that causes duplicate items to appear on sitemap parts, thanks to Aahan for reporting!
187
- * Fixed a bug that causes the `post` post type sitemaps to show up even when disabled.
188
-
189
- **Note that the site sitemap will be enabled, while the author sitemap will be disabled by default.**
190
-
191
- = 1.1.4 =
192
- * Changed some options' descriptions.
193
- * Fixed a possible incompatibility issue with FeedWordPress plugin and Suffusion theme.
194
- * Other minor bug fixes.
195
-
196
- = 1.1.3 =
197
- * Gzip is now off by default as it was causing issue on some hosts.
198
- * In previous versions, this plugin automatically cleaned unexpected outputs before sitemap generation so that sitemaps are generated properly. Such feature also causes issues on certain hosts. As of 1.1.3 this is an option in Generator tab, and it is enabled by default.
199
- * Fixed a possible bug in the taxonomy module that could cause a maximum execution time error. Thanks to David Killingsworth for reporting this bug!
200
- * Other minor bug fixes and improvements.
201
-
202
- = 1.1.2 =
203
- * Fixed a possible memory leak.
204
- * Clear PHP errors in a friendlier way.
205
- * Other minor bug fixes and improvements.
206
-
207
- = 1.1.1 =
208
- * Added an option for users to choose whether to use GMT for Last Modified time or not.
209
- * Improved the taxonomy module a bit.
210
- * Fixed a minor bug in the page module.
211
- * Fixed a bug that affects rewrite rules of custom post types and taxonomies in some cases. A big thanks to crowinck!
212
- * Other minor bug fixes and improvements.
213
-
214
- = 1.1.0 =
215
-
216
- **New Features:**
217
-
218
- * This plugin can now automatically split large post sitemaps into smaller ones. You can set a limit for each small sitemap. For example if you have 200K posts and would like to have 10K posts for each sitemap, BWP GXS will then split `post.xml` into 20 parts (i.e. from `post_part1.xml` to `post_part20.xml`). This helps you bypass the 50,000 URLs limit without having to build your custom modules, and also helps make your sitemaps smaller, lighter, and of course faster to generate. This plugin has been tested on sites that have nearly 200K posts and it took less than 1 second to generate the sitemapindex.
219
- * Added a new sitemap, called External Pages' sitemap, using which you can easily add links to pages that do not belong to WordPress to the Sitemap Index. Please refer to the [customization section](http://betterwp.net/wordpress-plugins/google-xml-sitemaps/#external_sitemap) for more details.
220
- * Added options in the Generator to exclude certain post types, taxonomies without having to use filters.
221
- * Added new hooks to default post-based and taxonomy-based modules to allow easier SQL query customization (you don't have to develop custom modules anymore just to change minor things). Read [here](http://betterwp.net/wordpress-plugins/google-xml-sitemaps/#exclude_items) for more details.
222
-
223
- **Improvements:**
224
-
225
- * Major overhaul of all modules to make them faster, more efficient, more accurate, and of course, consume much less memory. This version should eliminate most white page problems happened in previous versions.
226
- * Improved compatibility with cache plugins.
227
- * Improved support for sites that uses `%category%` in permalink structure.
228
- * The plugin should now display style sheet correctly in tight situations.
229
- * Added a clear log button to clear redundant log (available to network admin only).
230
- * Added an option to include links to all sitemapindex.xml files in your network in the primary website's `robots.txt`.
231
- * Tag archive sitemap can now be disabled properly.
232
- * Fixed permalinks for people using index.php in permalink structure.
233
- * Other minor bug fixes and improvements.
234
-
235
- For a detailed description of each new feature, please refer to the [release announcement](http://betterwp.net/257-bwp-google-xml-sitemaps-1-1-0/).
236
-
237
- **Due to major changes in core it is suggested that you clear the logs using the new 'Clear All Logs' button and double-check the Generator's settings. Have fun and please [rate this plugin](http://wordpress.org/extend/plugins/bwp-google-xml-sitemaps/) 5 stars if you like it, thanks!**
238
-
239
- = 1.0.5 =
240
- * Unregistered modules (such as redundant modules from 1.0.3) will now have a 404 HTTP status to prevent search engines from requesting them again.
241
- * Time for each log will now make use of your current timezone setting in Settings -> General.
242
- * And other minor fixes.
243
-
244
- **Thanks everyone for using this plugin!**
245
-
246
- = 1.0.4 =
247
- * Hot fix for WordPress in other languages, such as French, Russian. Prior to this version this plugin tries to use posts' and taxonomies' labels to build sitemaps' URLs in plural forms (e.g. taxonomy_categories). Unfortunately this breaks sitemaps when labels contain UTF8 characters with marks (such as cat�gories). All sitemaps now have singular forms. Hope that we will have a better solution in the future.
248
-
249
- **This change will make all logs' contents change as well. To remove redundant logs, please deactivate this plugin and then reactivate it.**
250
-
251
- = 1.0.3 =
252
- * Fixed incorrect regex for rewrite rules.
253
- * Added a check to make sure all necessary rewrite rules are added. No need to manually flush rewrite rules anymore.
254
- * `bwp_gxs_add_rewrite_rules` action now becomes `bwp_gxs_rewrite_rules` filter (the hook used to add your own sitemaps).
255
-
256
- **For people using a cache plugin, please visit the [FAQ section](http://betterwp.net/wordpress-plugins/google-xml-sitemaps/faq/) for a possible compatibility fix.**
257
-
258
- = 1.0.2 =
259
- * Fixed a bug that could produce wrong or empty last modified dates in sitemapindex.
260
- * Corrected a typo in page.php module.
261
- * Added Malaysian translation, thanks to d4rkcry3r!
262
-
263
- = 1.0.1 =
264
- * Now you can browser to `http://example.com/sitemap.xml` to view your sitemapindex. You can submit it too if you want. **Important**: Make sure you don't have any real sitemap.xml file in your website's root. Also, you will have to flush all rewrite rules, by either deactivating and then reactivating this plugin, or simply go to [Permalink Settings](http://example.com/wp-admin/options-permalink.php) and click on Save Changes.
265
- * Build stats (build time, number of queries, memory usage) should be more accurate now.
266
- * Add a canonical redirection for sitemap URL to avoid problems with XSLT style sheet's absolute URL.
267
- * Fixed a minor error in the base module class.
268
-
269
- = 1.0.0 =
270
- * Initial Release.
271
-
272
  == Upgrade Notice ==
273
 
274
- = 1.0.0 =
275
- * Enjoy the plugin!
1
+ === Better WordPress Google XML Sitemaps (support Sitemap Index, Multi-site and Google News) ===
2
  Contributors: OddOneOut
3
  Donate link: http://betterwp.net/wordpress-plugins/google-xml-sitemaps/#contributions
4
+ Tags: xml sitemaps, xml sitemap, google xml sitemaps, sitemapindex, sitemap index, sitemap, sitemaps, sitemap.xml, seo, bing, google, msn, ask, google news, news sitemap, google news sitemap, image sitemap
5
+ Requires at least: 3.6
6
+ Tested up to: 4.4
7
+ Stable tag: 1.4.0
8
  License: GPLv3 or later
9
 
10
+ A WordPress XML Sitemap plugin that comes with support for Sitemap Index,
11
+ Multi-site and Google News sitemap. Image sitemap is supported, too.
12
 
13
  == Description ==
14
 
15
+ With BWP GXS you will no longer have to worry about the 50,000 URL limit or the
16
+ time it takes for a sitemap to be generated. This plugin is fast, consumes much
17
+ less resource and can be extended via your very own modules (yes, no hooks
18
+ needed!). Here's a [demo](http://betterwp.net/sitemapindex.xml) of the sitemap
19
+ index if you are interested.
20
 
21
+ = Google News Sitemap =
22
 
23
+ Add a *Google News sitemap* to your sitemap index easily. News sitemap can be
24
+ used to ping search engines individually if you want. And of course, whenever
25
+ you publish a new post in a news category, all selected search engines will be
26
+ pinged.
27
 
28
+ *As of 1.4.0, you can use custom post types and custom taxonomies for your news
29
+ sitemap.*
30
 
31
+ = Image Sitemap =
32
 
33
+ If you have any post (of any post type) that supports the *Featured image*
34
+ feature, you will be able to add the current featured image to a post-based
35
+ sitemap with ease.
36
 
37
+ This feature is available since 1.4.0.
38
 
39
+ = Sitemap Index =
40
 
41
+ A sitemap index, as its name suggests, is a sitemap that allows you to group
42
+ several sitemaps inside it.
43
 
44
+ It gives you many benefits such as: possibility to bypass the 50,000 URL limit
45
+ (for example you can have 10 custom sitemaps, each has 10,000 URLs), or
46
+ possibility to make the generation time much faster (because each sitemap is
47
+ requested separately and is built by its own module), etc.
48
 
49
+ For a search engine to acknowledge your sitemaps, you only have to submit the
50
+ sitemap index and you're done, no need to submit each sitemap individually.
51
 
52
+ = Splitting post-based sitemaps =
53
 
54
+ As of version 1.1.0, this plugin can automatically split large post sitemaps
55
+ into smaller ones when limit reached. For example if you have 200K posts and
56
+ would like to have 10K posts for each sitemap, BWP GXS will then split `post.xml`
57
+ into 20 parts (i.e. from `post_part1.xml` to `post_part20.xml`).
58
 
59
+ This not only helps you bypass the 50,000 URLs limit without having to build
60
+ your custom modules, but also helps make your sitemaps smaller, lighter, and of
61
+ course faster to generate. This plugin has been tested on sites that have
62
+ nearly 200K posts and it took less than 1 second to generate the sitemap index.
63
 
64
+ Furthermore, you can set a separate limit for split sitemaps or simply use the
65
+ global limit.
66
 
67
+ = Multi-site compatible =
68
 
69
+ Each website within your network will have its own sitemap index and sitemaps.
70
 
71
+ For sub-domain installation, your sitemap index will appear at `http://sub-domain.example.com/sitemapindex.xml`.
72
+ For sub-folder installation, your sitemap index will appear at `http://example.com/sub-folder/sitemapindex.xml`.
73
 
74
+ There's always a sitemap index for your main site, available at `http://example.com/sitemapindex.xml`.
75
 
76
+ If you choose the sub-domain approach, each sub-domain can also have its own `robots.txt`.
77
 
78
+ = Custom sitemaps using modules =
79
+
80
+ The unrivaled flexibility this plugin offers is the ability to define your
81
+ custom sitemaps using modules. Each module is a actually .php file that tell
82
+ BWP Google XML Sitemap how to build a sitemap file. You can extend default
83
+ modules or create completely new ones.
84
+
85
+ This plugin also comes with a convenient base class for developing modules with
86
+ easy to use and thoroughly documented API. Since modules can be defined by you,
87
+ there's no limitation what a sitemap can have (for example you can bypass the
88
+ 50,000 URL limit, as stated above). There's one limitation, though: your
89
+ imagination ;). Oh, did I mention that you can even use module to create
90
+ another sitemap index?
91
+
92
+ **For a complete feature list, please visit this [plugin's official
93
+ documentation](http://betterwp.net/wordpress-plugins/google-xml-sitemaps/#full-feature-list)**.
94
+
95
+ = Support this plugin =
96
+
97
+ Don't forget to rate this plugin [5 shining stars](http://wordpress.org/support/view/plugin-reviews/bwp-google-xml-sitemaps?filter=5) if you like it, thanks!
98
+
99
+ = Get in touch =
100
+
101
+ * Found a bug? Have a feature request? [Let me know](http://betterwp.net/wordpress-plugins/google-xml-sitemaps/#report-issues)!
102
+ * Follow me on [Twitter](http://twitter.com/0dd0ne0ut).
103
  * Check out [latest WordPress Tips and Ideas](http://feeds.feedburner.com/BetterWPnet) from BetterWP.net.
104
 
105
+ = Languages =
106
 
107
  * English (default)
108
  * Malaysian (ms_MY) - Thanks to [d4rkcry3r](http://d4rkcry3r.com)!
117
  1. Upload the `bwp-google-xml-sitemaps` folder to the `/wp-content/plugins/` directory
118
  2. Activate the plugin through the Plugins menu in WordPress. After activation, you should see a menu of this plugin on your left. If you can not locate it, click on Settings under the plugin's name.
119
  3. Configure the plugin
120
+ 4. Build your sitemap for the first time or just submit the sitemap index to all major search engines.
121
  5. Enjoy!
122
 
123
  [View instructions with images](http://betterwp.net/wordpress-plugins/google-xml-sitemaps/installation/).
124
 
125
  == Frequently Asked Questions ==
126
 
127
+ If you have trouble using this plugin, consider giving the [Frequently Asked
128
+ Questions](http://betterwp.net/wordpress-plugins/google-xml-sitemaps/faq/)
129
+ page a look.
130
 
131
  == Screenshots ==
132
 
133
+ 1. A Sitemap Index with large post-based sitemaps split into smaller parts.
134
+ 2. A Sitemap Index with external sitemaps (`listing.xml` and `items.xml`).
135
+ 3. A custom post type sitemap.
136
+ 4. Exclude sitemap items in admin.
137
+ 5. A Sitemap with images enabled.
138
+ 6. Google News sitemap (with images).
139
+ 7. Add external pages in admin.
140
+ 8. ... and the result!
141
 
142
  == Changelog ==
143
 
144
+ = 1.4.0 (2016-01-14) =
145
+
146
+ For a quick overview of all the changes, take a look at this article instead:
147
+ http://betterwp.net/bwp-google-xml-sitemaps-1-4-0-released/
148
+
149
+ - **New Features**
150
+ - Add a "News age" setting to allow more control over the Google News
151
+ sitemap's contents. See
152
+ <http://betterwp.net/wordpress-plugins/google-xml-sitemaps/faq/#google-news-age>
153
+ for more info.
154
+ - Allow excluding posts by terms. If a post belongs to several terms, it
155
+ will be excluded if any of those terms is excluded.
156
+ - Add a new filter hook `bwp_gxs_external_sitemaps` that can be used to
157
+ add non-BWP sitemaps to the sitemap index. Read
158
+ [here](http://betterwp.net/wordpress-plugins/google-xml-sitemaps/#external-sitemaps)
159
+ for more info.
160
+ - Add featured image to existing post-based sitemaps.
161
+ - To enable this feature, go to **BWP Sitemaps > Extensions** and
162
+ choose to enable the "Google Image Sitemap" extension, and select
163
+ post type(s) to enable the extension for.
164
+ - This feature is enabled automatically for the Google News sitemap
165
+ if the news post type has the "Google Image Sitemap" extension
166
+ enabled for it.
167
+ - As a related change for this new feature, Google News sitemap is
168
+ now part of **BWP Sitemap > Extensions** as well.
169
+ - Add ability to use custom post types and taxonomies for the Google News
170
+ sitemap.
171
+ - Allow regenerating individual sitemap via admin page.
172
+ - Allow adding non-WordPress pages via **BWP Sitemaps > XML Sitemaps >
173
+ External Pages**.
174
+ - Allow excluding posts/terms via **BWP Sitemaps > XML Sitemaps > Exclude
175
+ items**.
176
+ - **Enhancements**
177
+ - Disable some inputs when they are overridden via codes and display
178
+ overridden values instead.
179
+ - Make "Frequency", "Priority" and "Last modified" optional when
180
+ adding/updating external pages.
181
+ - Handle last modified datetime of non-post items more consistently.
182
+ - **Other Changes**
183
+ - Update language template file. If you're a translator, please help
184
+ translating this plugin! For more info, see:
185
+ <http://betterwp.net/wordpress-tips/create-pot-file-using-poedit/>
186
+ - Mark as compatible with WordPress 4.4+. Now require at least WordPress
187
+ 3.6 and PHP 5.2.0.
188
+ - Choosing which post types/taxonomies to generate sitemaps for is now an
189
+ opt-out setting. Instead of choosing which post types/taxonomies to
190
+ disable sitemap generation, you would now choose post types/taxonomies
191
+ whose sitemaps should be generated.
192
+ - Display an error message when enabling the Google News sitemap but it
193
+ can not be generated.
194
+ - Make it more obvious to check and generate the Sitemap Index when
195
+ needed.
196
+ - If no sitemap has been generated yet, a button to generate the
197
+ Sitemap Index will be shown.
198
+ - The "Clear All Logs" button have been moved to the "Sitemap Log"
199
+ tab, and renamed to "Clear Message Log". Clicking on that button
200
+ will now clear the message log only, leaving the sitemap log
201
+ untouched. The sitemap log is expected to be improved in version
202
+ 2.0.0.
203
+ - Disable indexing of sitemaps using the X-Robots-Tag: noindex header.
204
+ - Add more Google News sitemap languages, allow customizing language list
205
+ via `bwp_gxs_news_languages` filter hook.
206
+ - XSLT stylesheet is now disabled by default.
207
+ - **Bugs fixed**
208
+ - Fix a bug that causes post.xml to be included in sitemap index even when
209
+ explicitly excluded.
210
+ - Fix a bug that causes the sitemap index to be empty when post-splitting
211
+ is not enabled.
212
+ - Filter out urls whose protocols do not match the current protocol.
213
+ - When SSL is not used, all HTTPS urls will be filtered out.
214
+ - When SSL is used, all HTTP urls will be filtered out.
215
+ - Fix a bug that makes it not possible to flush the default cache
216
+ directory. The cause was we cached the cache directory in the
217
+ `BWP_Sitemaps::$cache_directory` object, which was not updated correctly
218
+ when flushing cache.
219
+ - Fix a bug that could lead to custom post types being included in
220
+ post.xml sitemap.
221
+ - Fix a bug in the Google News sitemap that leads to duplicate posts when
222
+ posts are assigned to multiple categories.
223
+ - Fix a bug that generate duplicate terms when some terms are excluded.
224
+ - Use UTC timezone when looking for google news posts.
225
+
226
+ = 1.3.1 =
227
+ * Marked as WordPress 4.0 compatible.
228
+ * Added `bwp_gxs_excluded_posts` filter hook to page sitemap module. It should be possible to use an array of page ids to exclude certain pages from the page sitemap.
229
+ * Added a `News name` setting (in *XML Sitemaps >> Google News Sitemap*).
230
+ * Other minor fixes and enhancements.
231
+
232
  = 1.3.0 =
233
  * **New features**
234
  * Added a new setting to control which post types can be used to ping search engines
275
  * if you're using custom modules make sure that you re-read the [documentation](http://betterwp.net/wordpress-plugins/google-xml-sitemaps/#module_api) for updated info about the module API.
276
  * When the sitemapindex is generated for the first time, you won't see any <em>Last modified date</em> for any child sitemaps because none of them have been generated yet. This is expected and adhered to the <a href="http://www.sitemaps.org/protocol.html#sitemapIndexTagDefinitions">official sitemap protocol</a>.
277
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
278
  == Upgrade Notice ==
279
 
280
+ Nothing here.
 
screenshot-2.png CHANGED
Binary file
screenshot-3.png CHANGED
Binary file
screenshot-4.png ADDED
Binary file
screenshot-5.png ADDED
Binary file
screenshot-6.png ADDED
Binary file
screenshot-7.png ADDED
Binary file
screenshot-8.png ADDED
Binary file
{includes → src}/class-bwp-gxs-cache.php RENAMED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- * Copyright (c) 2014 Khang Minh <betterwp.net>
4
  * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE
5
  */
6
 
@@ -12,7 +12,6 @@ class BWP_GXS_CACHE
12
  var $module_name = '';
13
  var $sitemap_name = '';
14
 
15
- var $cache_dir = '';
16
  var $cache_file = '';
17
  var $cache_time = 0;
18
  var $cache_headers = array();
@@ -20,13 +19,12 @@ class BWP_GXS_CACHE
20
  var $gzip = false;
21
  var $now;
22
 
23
- public function __construct($main)
24
  {
25
- // Init necessary config to work with the cache
26
  $this->main = $main;
27
  $this->options = $main->options;
28
 
29
- $this->cache_dir = $this->main->cache_directory;
30
  $this->gzip = 'yes' == $this->options['enable_gzip'] ? true : false;
31
  $this->cache_time = (int) $this->options['input_cache_age'] * (int) $this->options['select_time_type'];
32
 
1
  <?php
2
  /**
3
+ * Copyright (c) 2011 Khang Minh <betterwp.net>
4
  * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE
5
  */
6
 
12
  var $module_name = '';
13
  var $sitemap_name = '';
14
 
 
15
  var $cache_file = '';
16
  var $cache_time = 0;
17
  var $cache_headers = array();
19
  var $gzip = false;
20
  var $now;
21
 
22
+ public function __construct(BWP_Sitemaps $main)
23
  {
24
+ // init necessary config to work with the cache
25
  $this->main = $main;
26
  $this->options = $main->options;
27
 
 
28
  $this->gzip = 'yes' == $this->options['enable_gzip'] ? true : false;
29
  $this->cache_time = (int) $this->options['input_cache_age'] * (int) $this->options['select_time_type'];
30
 
{includes → src}/class-bwp-gxs-module.php RENAMED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- * Copyright (c) 2014 Khang Minh <betterwp.net>
4
  * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
5
  * @package BWP Google XML Sitemaps
6
  */
@@ -42,6 +42,11 @@ class BWP_GXS_MODULE
42
  */
43
  protected $data = array();
44
 
 
 
 
 
 
45
  /**
46
  * Priority mapping
47
  *
@@ -69,11 +74,12 @@ class BWP_GXS_MODULE
69
  */
70
  public $sort_column = false;
71
 
72
- public function __contruct()
73
- {
74
- /* Intetionally left blank */
75
- }
76
-
 
77
  protected function init_data($pre_data = array())
78
  {
79
  global $bwp_gxs;
@@ -101,6 +107,16 @@ class BWP_GXS_MODULE
101
  return $this->get_sitemap_url($slug);
102
  }
103
 
 
 
 
 
 
 
 
 
 
 
104
  protected function get_sitemap_url($slug)
105
  {
106
  global $bwp_gxs;
@@ -109,18 +125,26 @@ class BWP_GXS_MODULE
109
  }
110
 
111
  /**
112
- * Calculate the change frequency for a specific item.
 
 
 
 
 
 
 
 
113
  *
114
  * @copyright (c) 2006 - 2009 www.phpbb-seo.com
115
  */
116
- protected function cal_frequency($item = '', $lastmod = '')
117
  {
118
  global $bwp_gxs;
119
 
120
  if (empty($this->now))
121
  $this->now = $this->set_current_time();
122
 
123
- $lastmod = is_object($item) ? $item->post_modified : $lastmod;
124
 
125
  if (empty($lastmod))
126
  {
@@ -139,15 +163,26 @@ class BWP_GXS_MODULE
139
  : 'yearly';
140
  }
141
 
 
 
 
 
 
 
 
 
 
142
  return apply_filters('bwp_gxs_freq', $freq, $item);
143
  }
144
 
145
  /**
146
  * Calculate the priority for a specific item.
147
  *
148
- * This is just a basic way to calculate priority and module should use its
149
- * own function instead. Search engines don't really care about priority
150
- * and change frequency much, do they ;)?
 
 
151
  */
152
  protected function cal_priority($item, $freq = 'daily')
153
  {
@@ -158,7 +193,7 @@ class BWP_GXS_MODULE
158
 
159
  if (!is_object($item))
160
  {
161
- // determine score by change frequency
162
  $score = $this->freq_to_pri[$freq];
163
  }
164
  else
@@ -178,107 +213,192 @@ class BWP_GXS_MODULE
178
  ? $bwp_gxs->options['select_min_pri']
179
  : $score;
180
 
 
 
 
 
 
 
 
 
 
181
  return apply_filters('bwp_gxs_priority_score', $score, $item, $freq);
182
  }
183
 
184
  /**
185
- * Get last modified date from post object
186
- *
187
- * Sometimes post_modified is not set due to improper data import into
188
- * database, we will have to use post_date. If post_date is invalid too,
189
- * we're out of luck.
190
  *
191
- * By default lastmod is in GMT so `post_date_gmt` and `post_modified_gmt`
192
- * will be used. If local time is used `post_date` and `post_modified`
193
- * will be used instead. Because modified times can come from various
194
- * sources and not all sources have a GMT equivalent, we expect other
195
- * modified times to be in local time and will be converted to GMT using
196
- * `gmt_offset`.
197
  *
198
- * @since 1.3.0
199
- * @access protected
200
  */
201
- protected function get_lastmod($post)
202
  {
203
  global $bwp_gxs;
204
 
205
- $lastmod = '';
206
-
207
- // handle GMT using `post_date_gmt`, `post_modified_gmt` and
208
- // `gmt_offset` if `date_default_timezone_set` function does exist
209
- $need_gmt = $bwp_gxs->options['enable_gmt'] == 'yes'
210
- && function_exists('date_default_timezone_set')
211
- ? true : false;
212
-
213
- $post_modified_field = $need_gmt ? 'post_modified_gmt' : 'post_modified';
214
- $post_date_field = $need_gmt ? 'post_date_gmt' : 'post_date';
215
 
 
216
  if (isset($post->lastmod))
217
  {
218
- // lastmod is expected to be in local time
219
- $lastmod = strtotime($post->lastmod);
220
- $lastmod = $need_gmt ? $lastmod - get_option('gmt_offset') * 3600 : $lastmod;
 
221
  }
222
- elseif (isset($post->$post_modified_field))
223
  {
224
- $lastmod = strtotime($post->$post_modified_field);
 
 
 
 
 
 
 
 
225
  }
226
 
227
- $post_date = isset($post->$post_date_field) ? strtotime($post->$post_date_field) : '';
 
 
228
 
229
- $lastmod = empty($lastmod) || $lastmod < 0 ? $post_date : $lastmod;
230
- $lastmod = empty($lastmod) || $lastmod < 0 ? '' : $lastmod;
 
231
 
232
- return !empty($lastmod) ? $this->format_lastmod($lastmod, false) : '';
 
 
 
 
 
 
 
 
233
  }
234
 
235
- protected function format_lastmod($lastmod, $expect_local = true)
 
 
 
 
 
 
 
 
236
  {
237
- global $bwp_gxs;
 
238
 
239
- $need_gmt = $bwp_gxs->options['enable_gmt'] == 'yes' ? true : false;
240
- $gmt_offset = (float) get_option('gmt_offset');
 
 
 
 
 
 
 
 
241
 
242
- if ($lastmod < 0)
 
 
 
 
 
 
 
 
 
 
 
243
  return '';
244
 
245
- if (!function_exists('date_default_timezone_set'))
246
- {
247
- // prior to PHP 5.1.0 this function is not available, so we will
248
- // have to reply on date functions entirely, and the incoming
249
- // `$lastmod` is the original datetime value without any modifications
250
- // from `gmt_offset` and/or WordPress's GMT datetime fields
251
- return $need_gmt ? gmdate('Y-m-d\TH:i:s\Z', (int) $lastmod) : date('c', (int) $lastmod);
252
- }
253
 
254
- // lastmod is expected to be in local time, make it GMT/UTC if needed
255
- $lastmod = $expect_local && $need_gmt ? $lastmod - $gmt_offset * 3600 : $lastmod;
 
 
 
 
256
 
257
- // WordPress uses 'UTC' as its timezone for date function but other
258
- // plugins might change this so it's best to set to 'UTC' here and
259
- // assing the current timezone back later on. This is to ensure that
260
- // the `date` function does not manage timezone on its own.
261
- $current_timezone = date_default_timezone_get();
262
- date_default_timezone_set('UTC');
263
 
264
- $date = date('c', (int) $lastmod);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
265
 
266
- if ($need_gmt)
 
 
 
 
 
267
  {
268
- // use GMT/UTC for sitemap
269
- return str_replace('+00:00', 'Z', $date);
 
 
 
 
 
 
 
270
  }
271
 
272
- // calculate the UTC designator, e.g. '+07:00'
273
- $sign = $gmt_offset > 0 ? '+' : '-';
 
274
 
275
- $gmt_offset = abs($gmt_offset);
 
276
 
277
- $hour = intval($gmt_offset);
278
- $minute = $gmt_offset - $hour;
279
- $minute = $minute * 60;
 
 
 
 
 
 
 
 
280
 
281
- return str_replace('+00:00', $sign . sprintf('%02d:%02d', $hour, $minute), $date);
 
 
 
 
 
 
 
282
  }
283
 
284
  protected function post_type_uses($post_type, $taxonomy_object)
@@ -419,6 +539,9 @@ class BWP_GXS_MODULE
419
  return apply_filters('post_type_link', $post_link, $post, $leavename, $sample);
420
  }
421
 
 
 
 
422
  protected function get_permalink($leavename = false)
423
  {
424
  global $post;
@@ -543,12 +666,11 @@ class BWP_GXS_MODULE
543
 
544
  $start = !empty($this->url_sofar) ? $this->offset + (int) $this->url_sofar : $this->offset;
545
  $end = (int) $bwp_gxs->options['input_sql_limit'];
546
- $limit = $this->limit;
547
 
548
  // @since 1.1.5 if we exceed the actual limit, limit $end to the
549
  // correct limit
550
- if ($this->url_sofar + $end > $limit)
551
- $end = $limit - $this->url_sofar;
552
 
553
  $query_str = trim($query_str);
554
  $query_str .= ' LIMIT ' . $start . ',' . $end;
@@ -589,7 +711,6 @@ class BWP_GXS_MODULE
589
  * actual sitemap data
590
  *
591
  * @since 1.3.0
592
- * @access protected
593
  */
594
  protected function init_properties()
595
  {
@@ -642,7 +763,6 @@ class BWP_GXS_MODULE
642
  * generated.
643
  *
644
  * @since 1.3.0
645
- * @access public
646
  */
647
  public function build_sitemap_data()
648
  {
@@ -675,6 +795,46 @@ class BWP_GXS_MODULE
675
  $this->part = !empty($module_data['part']) ? (int) $module_data['part'] : 0;
676
  }
677
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
678
  public function get_data()
679
  {
680
  return $this->data;
1
  <?php
2
  /**
3
+ * Copyright (c) 2011 Khang Minh <betterwp.net>
4
  * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
5
  * @package BWP Google XML Sitemaps
6
  */
42
  */
43
  protected $data = array();
44
 
45
+ /**
46
+ * @var bool
47
+ */
48
+ protected $image_allowed;
49
+
50
  /**
51
  * Priority mapping
52
  *
74
  */
75
  public $sort_column = false;
76
 
77
+ /**
78
+ * Allows you to init the current item with previous item’s data.
79
+ *
80
+ * @param array $pre_data Previous item's data
81
+ * @return array
82
+ */
83
  protected function init_data($pre_data = array())
84
  {
85
  global $bwp_gxs;
107
  return $this->get_sitemap_url($slug);
108
  }
109
 
110
+ /**
111
+ * Get a sitemap's URL based on its slug.
112
+ *
113
+ * @param string $slug The sitemap slug, which is actually your module's
114
+ * name (e.g. 'post', 'post_movie', etc.)
115
+ *
116
+ * @return string A valid sitemap URL with `.xml` extension appended.
117
+ *
118
+ * @since 1.3.0
119
+ */
120
  protected function get_sitemap_url($slug)
121
  {
122
  global $bwp_gxs;
125
  }
126
 
127
  /**
128
+ * Calculate change frequency.
129
+ *
130
+ * This allows you to calculate change frequency based on item's last
131
+ * modified time or a specific last modified time.
132
+ *
133
+ * @param object|null $item
134
+ * @param string|null $lastmod Last modified datetime in local timezone.
135
+ * This parameter is only used when `$item` is
136
+ * not set.
137
  *
138
  * @copyright (c) 2006 - 2009 www.phpbb-seo.com
139
  */
140
+ protected function cal_frequency($item = null, $lastmod = null)
141
  {
142
  global $bwp_gxs;
143
 
144
  if (empty($this->now))
145
  $this->now = $this->set_current_time();
146
 
147
+ $lastmod = $item && is_object($item) ? $item->post_modified : $lastmod;
148
 
149
  if (empty($lastmod))
150
  {
163
  : 'yearly';
164
  }
165
 
166
+ /**
167
+ * Filter the change frequency of a sitemap entry.
168
+ *
169
+ * @param string $frequency The change frequency to filter.
170
+ * @param object|null $item The current item object or null
171
+ *
172
+ * @return string Should be one of the change frequencies listed
173
+ * here: http://www.sitemaps.org/protocol.html#changefreqdef
174
+ */
175
  return apply_filters('bwp_gxs_freq', $freq, $item);
176
  }
177
 
178
  /**
179
  * Calculate the priority for a specific item.
180
  *
181
+ * Allows you to calculate priority based on item's freshness, comment
182
+ * count, and change frequency.
183
+ *
184
+ * @param object $item
185
+ * @param string $freq The calculated change frequency.
186
  */
187
  protected function cal_priority($item, $freq = 'daily')
188
  {
193
 
194
  if (!is_object($item))
195
  {
196
+ // determine score by change frequency
197
  $score = $this->freq_to_pri[$freq];
198
  }
199
  else
213
  ? $bwp_gxs->options['select_min_pri']
214
  : $score;
215
 
216
+ /**
217
+ * Filter the priority of a sitemap entry.
218
+ *
219
+ * @param float $score The score to filter.
220
+ * @param array $item The current item.
221
+ * @param string $frequency The current change frequency.
222
+ *
223
+ * @return int See http://www.sitemaps.org/protocol.html#prioritydef
224
+ */
225
  return apply_filters('bwp_gxs_priority_score', $score, $item, $freq);
226
  }
227
 
228
  /**
229
+ * Get datetime from a post object's field
 
 
 
 
230
  *
231
+ * @param object $post
232
+ * @param bool $publish whether to get the publish date or the last
233
+ * modified date, default to false
 
 
 
234
  *
235
+ * @return string
236
+ * @since 1.4.0
237
  */
238
+ protected function get_datetime_from_post($post, $publish = false)
239
  {
240
  global $bwp_gxs;
241
 
242
+ $utc_timezone = new DateTimeZone('UTC');
243
+ $current_timezone = $bwp_gxs->get_current_timezone();
 
 
 
 
 
 
 
 
244
 
245
+ // use the $post's lastmod if already set
246
  if (isset($post->lastmod))
247
  {
248
+ $datetime = $post->lastmod;
249
+
250
+ // manual lastmod is expected to be in local time
251
+ $timezone = $current_timezone;
252
  }
253
+ else
254
  {
255
+ $datetime_field = $publish ? 'post_date_gmt' : 'post_modified_gmt';
256
+
257
+ // get datetime from $datetime_field or fallback to 'post_date_gmt'
258
+ $datetime = isset($post->$datetime_field) && $post->$datetime_field !== '0000-00-00 00:00:00'
259
+ ? $post->$datetime_field
260
+ : null;
261
+ $datetime = ! $datetime && isset($post->post_date_gmt) ? $post->post_date_gmt : $datetime;
262
+
263
+ $timezone = $utc_timezone;
264
  }
265
 
266
+ // no valid datetime to continue
267
+ if (! $datetime)
268
+ return '';
269
 
270
+ // try creating a valid datetime object with proper timezone from datetime
271
+ try {
272
+ $datetime = new DateTime($datetime, $timezone);
273
 
274
+ // set timezone to GMT/UTC or local timezone depending on setting
275
+ $datetime->setTimezone(
276
+ $bwp_gxs->options['enable_gmt'] == 'yes' ? $utc_timezone : $current_timezone
277
+ );
278
+ } catch (Exception $e) {
279
+ return '';
280
+ }
281
+
282
+ return $this->format_datetime_designator($datetime->format('c'));
283
  }
284
 
285
+ /**
286
+ * Get formatted last modified datetime of a post
287
+ *
288
+ * This allows you to get the proper last modified date from a post object.
289
+ *
290
+ * @param object $post
291
+ * @since 1.3.0
292
+ */
293
+ protected function get_lastmod($post)
294
  {
295
+ return $this->get_datetime_from_post($post);
296
+ }
297
 
298
+ /**
299
+ * Get formatted published datetime of a post
300
+ *
301
+ * @param object $post
302
+ * @since 1.3.0
303
+ */
304
+ protected function get_published_datetime($post)
305
+ {
306
+ return $this->get_datetime_from_post($post, true);
307
+ }
308
 
309
+ /**
310
+ * Format a provided datetime with correct timezone info
311
+ *
312
+ * @param mixed string|int|DateTime $datetime datetime of all formats that
313
+ * PHP supports, expected in the
314
+ * UTC timezone
315
+ */
316
+ protected function format_datetime($datetime)
317
+ {
318
+ global $bwp_gxs;
319
+
320
+ if (! $datetime)
321
  return '';
322
 
323
+ // convert provided datetime to unix timestamp format if it's an integer
324
+ if (is_numeric($datetime))
325
+ $datetime = '@' . $datetime;
 
 
 
 
 
326
 
327
+ try {
328
+ // convert $datetime to a DateTime object with UTC timezone when
329
+ // $datetime is not already a DateTime object
330
+ $datetime = ! ($datetime instanceof DateTime)
331
+ ? new DateTime($datetime, new DateTimeZone('UTC'))
332
+ : $datetime;
333
 
334
+ // need local timezone
335
+ if ($bwp_gxs->options['enable_gmt'] != 'yes') {
336
+ $datetime->setTimezone($bwp_gxs->get_current_timezone());
337
+ }
 
 
338
 
339
+ return $this->format_datetime_designator($datetime->format('c'));
340
+ } catch (Exception $e) {
341
+ return '';
342
+ }
343
+ }
344
+
345
+ /**
346
+ * Format a local datetime with correct timezone info.
347
+ *
348
+ * @param string|int|DateTime $datetime Datetime of all formats that PHP
349
+ * supports, for example you can use `1215282385` (Unix Timestamp) or
350
+ * `2015-12-12`. See http://php.net/manual/en/datetime.formats.php for
351
+ * more info. This parameter is expected in **local timezone**.
352
+ */
353
+ protected function format_local_datetime($datetime)
354
+ {
355
+ global $bwp_gxs;
356
 
357
+ $utc_timezone = new DateTimeZone('UTC');
358
+ $current_timezone = $bwp_gxs->get_current_timezone();
359
+
360
+ // if $datetime is a Unix Timestamp, need to convert it to a proper
361
+ // datetime first
362
+ if (is_numeric($datetime))
363
  {
364
+ // WordPress sets the default timezone to UTC (in wp-settings.php) so
365
+ // we need to temporarily switch to the local timezone here because
366
+ // $datetime is in local time
367
+ @date_default_timezone_set($current_timezone->getName());
368
+
369
+ $datetime = date('Y-m-d H:i:s', $datetime);
370
+
371
+ // switch default timezone back to UTC
372
+ @date_default_timezone_set('UTC');
373
  }
374
 
375
+ // need to convert $datetime to UTC timezone
376
+ $datetime = new DateTime($datetime, $current_timezone);
377
+ $datetime->setTimezone($utc_timezone);
378
 
379
+ return $this->format_datetime($datetime);
380
+ }
381
 
382
+ /**
383
+ * This function is here to remain BC only, and is not used in any default modules
384
+ *
385
+ * @deprecated 1.4.0 use BWP_GXS_MODULE::format_datetime() instead
386
+ *
387
+ * @param int $lastmod last modified datetime in unix timestamp, expected in local time
388
+ */
389
+ protected function format_lastmod($lastmod)
390
+ {
391
+ return $this->format_local_datetime($lastmod);
392
+ }
393
 
394
+ /**
395
+ * Use Z for timezone designator instead of offset
396
+ *
397
+ * @since 1.4.0
398
+ */
399
+ private function format_datetime_designator($datetime)
400
+ {
401
+ return str_replace('+00:00', 'Z', $datetime);
402
  }
403
 
404
  protected function post_type_uses($post_type, $taxonomy_object)
539
  return apply_filters('post_type_link', $post_link, $post, $leavename, $sample);
540
  }
541
 
542
+ /**
543
+ * @todo improve this function to rely more on WordPress API
544
+ */
545
  protected function get_permalink($leavename = false)
546
  {
547
  global $post;
666
 
667
  $start = !empty($this->url_sofar) ? $this->offset + (int) $this->url_sofar : $this->offset;
668
  $end = (int) $bwp_gxs->options['input_sql_limit'];
 
669
 
670
  // @since 1.1.5 if we exceed the actual limit, limit $end to the
671
  // correct limit
672
+ if ($this->url_sofar + $end > $this->limit)
673
+ $end = $this->limit - $this->url_sofar;
674
 
675
  $query_str = trim($query_str);
676
  $query_str .= ' LIMIT ' . $start . ',' . $end;
711
  * actual sitemap data
712
  *
713
  * @since 1.3.0
 
714
  */
715
  protected function init_properties()
716
  {
763
  * generated.
764
  *
765
  * @since 1.3.0
 
766
  */
767
  public function build_sitemap_data()
768
  {
795
  $this->part = !empty($module_data['part']) ? (int) $module_data['part'] : 0;
796
  }
797
 
798
+ /**
799
+ * Whether this is a post-based module
800
+ *
801
+ * @since 1.4.0
802
+ */
803
+ public function is_post_module()
804
+ {
805
+ return strpos($this->module_data['module_name'], 'post') === 0
806
+ || $this->requested == 'page';
807
+ }
808
+
809
+ /**
810
+ * Whether this module allows Google image tag
811
+ *
812
+ * @since 1.4.0
813
+ * @return bool
814
+ */
815
+ public function is_image_allowed()
816
+ {
817
+ if (! is_null($this->image_allowed))
818
+ return $this->image_allowed;
819
+
820
+ if (! $this->is_post_module())
821
+ return false;
822
+
823
+ global $bwp_gxs;
824
+
825
+ $post_type = $this->type == 'news'
826
+ ? $bwp_gxs->options['select_news_post_type']
827
+ : $this->requested;
828
+
829
+ // no valid post type could be detected
830
+ if (! $post_type)
831
+ return false;
832
+
833
+ $this->image_allowed = $bwp_gxs->is_image_sitemap_allowed_for($post_type);
834
+
835
+ return $this->image_allowed;
836
+ }
837
+
838
  public function get_data()
839
  {
840
  return $this->data;
src/class-bwp-gxs.php ADDED
@@ -0,0 +1,4095 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2011 Khang Minh <contact@betterwp.net>
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation, either version 3 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License
17
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
18
+ *
19
+ * @author Khang Minh <contact@betterwp.net>
20
+ * @link http://betterwp.net/wordpress-plugins/google-xml-sitemaps/
21
+ * @link https://github.com/OddOneOut/bwp-google-xml-sitemaps
22
+ */
23
+
24
+ class BWP_Sitemaps extends BWP_Framework_V3
25
+ {
26
+ /**
27
+ * Sitemap generation message logger
28
+ *
29
+ * @var BWP_Sitemaps_Logger_MessageLogger
30
+ */
31
+ protected $message_logger;
32
+
33
+ /**
34
+ * Sitemap generation sitemap logger
35
+ *
36
+ * @var BWP_Sitemaps_Logger_SitemapLogger
37
+ */
38
+ protected $sitemap_logger;
39
+
40
+ /**
41
+ * Post excluder
42
+ *
43
+ * @var BWP_Sitemaps_Excluder
44
+ */
45
+ protected $post_excluder;
46
+
47
+ /**
48
+ * Term excluder
49
+ *
50
+ * @var BWP_Sitemaps_Excluder
51
+ */
52
+ protected $term_excluder;
53
+
54
+ /**
55
+ * Content providers
56
+ *
57
+ * @var BWP_Sitemaps_Provider[]
58
+ */
59
+ protected $providers;
60
+
61
+ /**
62
+ * Ajax action handlers
63
+ *
64
+ * @var BWP_Sitemaps_Handler_AjaxHandler[]
65
+ */
66
+ protected $ajax_handlers;
67
+
68
+ /**
69
+ * Modules to load when generating sitemapindex
70
+ *
71
+ * @var array
72
+ */
73
+ public $modules = array(), $requested_modules = array();
74
+
75
+ /**
76
+ * Directories to load modules from
77
+ *
78
+ * @var string
79
+ */
80
+ public $module_directory = '', $custom_module_directory = '';
81
+
82
+ /**
83
+ * Whether sitemap is generated using a custom module file
84
+ *
85
+ * @var bool
86
+ */
87
+ private $_is_using_custom_module = false;
88
+
89
+ /**
90
+ * Mapping data for a module/sub-module
91
+ *
92
+ * @var array
93
+ */
94
+ public $module_map = array();
95
+
96
+ /**
97
+ * Url updating frequencies
98
+ *
99
+ * @var array
100
+ */
101
+ public $frequencies = array(
102
+ 'always',
103
+ 'hourly',
104
+ 'daily',
105
+ 'weekly',
106
+ 'monthly',
107
+ 'yearly',
108
+ 'never'
109
+ );
110
+
111
+ /**
112
+ * Url crawling priorties
113
+ *
114
+ * @var array
115
+ */
116
+ public $priorities = array(
117
+ '0.1' => 0.1,
118
+ '0.2' => 0.2,
119
+ '0.3' => 0.3,
120
+ '0.4' => 0.4,
121
+ '0.5' => 0.5,
122
+ '0.6' => 0.6,
123
+ '0.7' => 0.7,
124
+ '0.8' => 0.8,
125
+ '0.9' => 0.9,
126
+ '1.0' => 1.0
127
+ );
128
+
129
+ /**
130
+ * Urls to ping
131
+ *
132
+ * @var array
133
+ * @since 1.3.0
134
+ */
135
+ private $_ping_urls = array(
136
+ 'google' => 'http://www.google.com/webmasters/sitemaps/ping?sitemap=%s',
137
+ 'bing' => 'http://www.bing.com/webmaster/ping.aspx?siteMap=%s',
138
+ //'ask' => 'http://submissions.ask.com/ping?sitemap=%s'),
139
+ );
140
+
141
+ /**
142
+ * Name of the sitemap to ping with
143
+ *
144
+ * @var string
145
+ */
146
+ private $_ping_sitemap = 'sitemapindex';
147
+
148
+ /**
149
+ * Whether debug mode/debug extra mode is enabled
150
+ *
151
+ * @var bool
152
+ * @since 1.3.0
153
+ */
154
+ private $_debug = false, $_debug_extra = false;
155
+
156
+ /**
157
+ * The maximum number of times to ping per day for each SE
158
+ *
159
+ * @var int
160
+ */
161
+ public $pings_per_day = 100;
162
+
163
+ /**
164
+ * Timeout for ping request
165
+ *
166
+ * @var int
167
+ */
168
+ public $ping_timeout = 3;
169
+
170
+ /**
171
+ * A list of post type objects
172
+ *
173
+ * @var array
174
+ */
175
+ public $post_types;
176
+
177
+ /**
178
+ * A list of taxonomy objects
179
+ *
180
+ * @var array
181
+ */
182
+ public $taxonomies;
183
+
184
+ /**
185
+ * A list of term objects
186
+ *
187
+ * @var array
188
+ */
189
+ public $terms;
190
+
191
+ /**
192
+ * Sitemap templates
193
+ *
194
+ * @var array
195
+ */
196
+ public $templates = array();
197
+
198
+ /**
199
+ * Module data for a specific sitemap
200
+ *
201
+ * @var array
202
+ */
203
+ public $module_data = array();
204
+
205
+ /**
206
+ * Sitemap generation stats
207
+ *
208
+ * @var array
209
+ */
210
+ public $build_data = array(
211
+ 'time',
212
+ 'mem',
213
+ 'query'
214
+ );
215
+
216
+ /**
217
+ * Stylesheets for XML sitemaps
218
+ *
219
+ * @var string
220
+ */
221
+ public $xslt, $xslt_index;
222
+
223
+ /**
224
+ * The sitemap object of the currently requested sitemap
225
+ *
226
+ * @var BWP_Sitemaps_Sitemap
227
+ */
228
+ public $sitemap;
229
+
230
+ /**
231
+ * Holds the GXS cache class
232
+ *
233
+ * @var BWP_GXS_CACHE
234
+ */
235
+ public $sitemap_cache;
236
+
237
+ /**
238
+ * Time to keep cached sitemap files
239
+ *
240
+ * @var integer
241
+ */
242
+ public $cache_time;
243
+
244
+ public function __construct(
245
+ array $meta,
246
+ BWP_WP_Bridge $bridge = null,
247
+ BWP_Cache $cache = null)
248
+ {
249
+ parent::__construct($meta, $bridge, $cache);
250
+
251
+ // basic version checking
252
+ if (!$this->check_required_versions())
253
+ return;
254
+
255
+ // default options
256
+ $options = array(
257
+ 'enable_cache' => '', // @since 1.3.0 off by default
258
+ 'enable_cache_auto_gen' => 'yes',
259
+ 'enable_gzip' => '',
260
+ 'enable_xslt' => '', // @since 1.4.0 off by default
261
+ 'enable_sitemap_date' => '',
262
+ 'enable_sitemap_taxonomy' => 'yes',
263
+ 'enable_sitemap_external' => '',
264
+ 'enable_sitemap_split_post' => 'yes',
265
+ 'enable_sitemap_author' => '',
266
+ 'enable_sitemap_site' => 'yes',
267
+ 'enable_stats' => 'yes',
268
+ 'enable_credit' => 'yes',
269
+ 'enable_ping' => 'yes',
270
+ 'enable_ping_google' => 'yes',
271
+ 'enable_ping_bing' => 'yes',
272
+ 'enable_log' => 'yes',
273
+ 'enable_debug' => '',
274
+ 'enable_debug_extra' => '', // @since 1.3.0
275
+ 'enable_robots' => 'yes',
276
+ 'enable_global_robots' => '',
277
+ 'enable_gmt' => 'yes',
278
+ 'enable_exclude_posts_by_terms' => '', // @since 1.4.0
279
+ // image sitemap options @since 1.4.0
280
+ 'enable_image_sitemap' => '',
281
+ 'input_image_post_types' => '',
282
+ // google news options
283
+ 'enable_news_sitemap' => '',
284
+ 'enable_news_keywords' => '',
285
+ 'enable_news_ping' => '',
286
+ 'enable_news_multicat' => '',
287
+ 'select_news_lang' => 'en',
288
+ 'select_news_post_type' => 'post', // @since 1.4.0
289
+ 'select_news_taxonomy' => 'category', // @since 1.4.0
290
+ 'select_news_keyword_type' => 'cat', // @deprecated 1.4.0
291
+ 'select_news_keyword_source' => '', // @since 1.4.0
292
+ 'select_news_cat_action' => 'inc',
293
+ 'select_news_cats' => '',
294
+ 'input_news_name' => '', // @since 1.3.1
295
+ 'input_news_age' => 2, // @since 1.4.0
296
+ 'input_news_genres' => array(),
297
+ // end of Google news options
298
+ 'input_exclude_post_type' => '',
299
+ 'input_exclude_post_type_ping' => '', // @since 1.3.0
300
+ 'input_exclude_taxonomy' => 'post_tag',
301
+ 'input_cache_age' => 1,
302
+ 'input_item_limit' => 5000,
303
+ 'input_split_limit_post' => 0,
304
+ 'input_alt_module_dir' => '', // @since 1.3.0 default to empty
305
+ 'input_oldest' => 7,
306
+ 'input_sql_limit' => 1000,
307
+ 'input_custom_xslt' => '',
308
+ 'input_ping_limit' => 100, // @since 1.3.0 per day ping limit for each SE
309
+ 'select_output_type' => 'concise',
310
+ 'select_time_type' => 3600,
311
+ 'select_oldest_type' => 16400,
312
+ 'select_default_freq' => 'daily',
313
+ 'select_default_pri' => 1.0,
314
+ 'select_min_pri' => 0.1,
315
+ 'input_cache_dir' => '', // @since 1.3.0 make this editable and allow overriden using constant or filters
316
+ );
317
+
318
+ // super admin only options
319
+ $this->site_options = array(
320
+ 'enable_global_robots',
321
+ 'enable_log',
322
+ 'enable_debug',
323
+ 'enable_debug_extra',
324
+ 'enable_gzip',
325
+ 'enable_cache',
326
+ 'enable_cache_auto_gen',
327
+ 'input_cache_age',
328
+ 'input_alt_module_dir',
329
+ 'input_sql_limit',
330
+ 'input_cache_dir',
331
+ 'select_time_type'
332
+ );
333
+
334
+ $this->add_option_key('BWP_GXS_GENERATOR', 'bwp_gxs_generator',
335
+ $this->bridge->t('XML Sitemaps', $this->domain));
336
+
337
+ $this->add_option_key('BWP_GXS_EXTENSIONS', 'bwp_gxs_extensions',
338
+ $this->bridge->t('Extensions', $this->domain));
339
+
340
+ // @since 1.4.0 backward compat for google news option key
341
+ if (!defined('BWP_GXS_GOOGLE_NEWS'))
342
+ {
343
+ define('BWP_GXS_GOOGLE_NEWS', 'bwp_gxs_google_news');
344
+ }
345
+
346
+ $this->add_extra_option_key('BWP_GXS_GENERATOR_ADVANCED', 'bwp_gxs_generator_advanced',
347
+ $this->bridge->t('Advanced Options', $this->domain));
348
+
349
+ $this->add_option_key('BWP_GXS_STATS', 'bwp_gxs_stats',
350
+ $this->bridge->t('Sitemap Log', $this->domain));
351
+
352
+ if (!defined('BWP_GXS_LOG'))
353
+ {
354
+ define('BWP_GXS_LOG', 'bwp_gxs_log');
355
+ define('BWP_GXS_PING', 'bwp_gxs_ping_data');
356
+
357
+ // @since 1.4.0 allow excluding posts/terms via admin page
358
+ define('BWP_GXS_EXCLUDED_POSTS', 'bwp_gxs_excluded_posts');
359
+ define('BWP_GXS_EXCLUDED_TERMS', 'bwp_gxs_excluded_terms');
360
+
361
+ // @since 1.4.0 allow adding external pages via admin page
362
+ define('BWP_GXS_EXTERNAL_PAGES', 'bwp_gxs_external_pages');
363
+
364
+ // @deprecated 1.4.0 use BWP_GXS_GENERATOR instead
365
+ define('BWP_GXS_OPTION_GENERATOR', 'bwp_gxs_generator');
366
+ }
367
+
368
+ $this->build_properties('BWP_GXS', $options,
369
+ dirname(dirname(__FILE__)) . '/bwp-gxs.php',
370
+ 'http://betterwp.net/wordpress-plugins/google-xml-sitemaps/', false
371
+ );
372
+ }
373
+
374
+ protected function pre_init_properties()
375
+ {
376
+ $this->templates = array(
377
+ 'credit' => '<!-- Generated by BWP Google XML Sitemaps %s (c) %s Khang Minh - betterwp.net' . "\n"
378
+ . 'Plugin homepage: %s -->',
379
+ 'stats' => '<!-- ' . $this->bridge->t('This sitemap was originally generated in %s second(s) '
380
+ . '(Memory usage: %s) - %s queries - %s URL(s) listed', $this->domain) . ' -->'
381
+ /* 'stats_cached' => "\n" . '<!-- ' . __('Served from cache in %s second(s) (Memory usage: %s) - %s queries - %s URL(s) listed', $this->domain) . ' -->' */
382
+ );
383
+
384
+ $this->post_excluder = new BWP_Sitemaps_Excluder(
385
+ $this->bridge, $this->cache, 'excluded_posts', BWP_GXS_EXCLUDED_POSTS
386
+ );
387
+
388
+ $this->term_excluder = new BWP_Sitemaps_Excluder(
389
+ $this->bridge, $this->cache, 'excluded_terms', BWP_GXS_EXCLUDED_TERMS
390
+ );
391
+
392
+ $this->providers = array(
393
+ 'post' => new BWP_Sitemaps_Provider_Post($this, $this->post_excluder),
394
+ 'taxonomy' => new BWP_Sitemaps_Provider_Taxonomy($this, $this->term_excluder),
395
+ 'external_page' => new BWP_Sitemaps_Provider_ExternalPage($this, BWP_GXS_EXTERNAL_PAGES)
396
+ );
397
+
398
+ $this->ajax_handlers = array(
399
+ 'post' => new BWP_Sitemaps_Handler_Ajax_PostHandler($this->get_provider('post')),
400
+ 'taxonomy' => new BWP_Sitemaps_Handler_Ajax_TaxonomyHandler($this->get_provider('taxonomy')),
401
+ 'external_page' => new BWP_Sitemaps_Handler_Ajax_ExternalPageHandler(
402
+ $this->get_provider('external_page'),
403
+ $this->frequencies,
404
+ $this->priorities,
405
+ $this->get_current_timezone()
406
+ ),
407
+ 'news_terms' => new BWP_Sitemaps_Handler_Ajax_NewsTermsHandler(
408
+ $this->get_provider('taxonomy'),
409
+ explode(',', $this->options['select_news_cats']),
410
+ $this->options['input_news_genres']
411
+ )
412
+ );
413
+
414
+ $this->pings_per_day = (int) $this->options['input_ping_limit'];
415
+
416
+ // init debug and debug extra mode
417
+ $this->_init_debug();
418
+
419
+ // some stats
420
+ $this->build_stats['mem'] = memory_get_usage();
421
+ }
422
+
423
+ protected function load_libraries()
424
+ {
425
+ require_once dirname(__FILE__) . '/common-functions.php';
426
+
427
+ $this->sitemap_cache = new BWP_GXS_CACHE($this);
428
+ }
429
+
430
+ protected function pre_init_hooks()
431
+ {
432
+ add_filter('rewrite_rules_array', array($this, 'insert_rewrite_rules'), 9);
433
+ add_filter('query_vars', array($this, 'insert_query_vars'));
434
+ add_action('parse_request', array($this, 'request_sitemap'));
435
+
436
+ // @since 1.4.0 add excluded items from admin, use a relatively low
437
+ // priority so they can be merged with excluded items from user's filters
438
+ add_filter('bwp_gxs_excluded_posts', array($this, 'add_excluded_posts'), 999, 3);
439
+ add_filter('bwp_gxs_excluded_terms', array($this, 'add_excluded_terms'), 999, 3);
440
+
441
+ // @since 1.4.0 add external pages from admin, use a relatively low
442
+ // priority so they can be merged with external pages from user's filters
443
+ add_filter('bwp_gxs_external_pages', array($this, 'add_external_pages'), 999);
444
+
445
+ if ('yes' == $this->options['enable_ping'])
446
+ {
447
+ // ping search engines with sitemapindex
448
+ // @see `wp_transition_post_status` in wp-includes/post.php
449
+ add_action('auto-draft_to_publish', array($this, 'ping'), 1000);
450
+ add_action('draft_to_publish', array($this, 'ping'), 1000);
451
+ add_action('new_to_publish', array($this, 'ping'), 1000);
452
+ add_action('pending_to_publish', array($this, 'ping'), 1000);
453
+ add_action('future_to_publish', array($this, 'ping'), 1000);
454
+ }
455
+
456
+ if ('yes' == $this->options['enable_news_ping'])
457
+ {
458
+ // enable ping for news sitemap
459
+ add_action('auto-draft_to_publish', array($this, 'ping_google_news'), 1000);
460
+ add_action('draft_to_publish', array($this, 'ping_google_news'), 1000);
461
+ add_action('new_to_publish', array($this, 'ping_google_news'), 1000);
462
+ add_action('pending_to_publish', array($this, 'ping_google_news'), 1000);
463
+ add_action('future_to_publish', array($this, 'ping_google_news'), 1000);
464
+ }
465
+
466
+ if ('yes' == $this->options['enable_robots'])
467
+ add_filter('robots_txt', array($this, 'do_robots'), 1000, 2);
468
+
469
+ if (is_admin())
470
+ {
471
+ // handle ajax in admin area
472
+ add_action('wp_ajax_bwp-gxs-get-posts', array($this->get_ajax_handler('post'), 'get_posts_action'));
473
+ add_action('wp_ajax_bwp-gxs-get-excluded-posts', array($this->get_ajax_handler('post'), 'get_excluded_posts_action'));
474
+ add_action('wp_ajax_bwp-gxs-remove-excluded-post', array($this->get_ajax_handler('post'), 'remove_excluded_item_action'));
475
+
476
+ add_action('wp_ajax_bwp-gxs-get-terms', array($this->get_ajax_handler('taxonomy'), 'get_terms_action'));
477
+ add_action('wp_ajax_bwp-gxs-get-excluded-terms', array($this->get_ajax_handler('taxonomy'), 'get_excluded_terms_action'));
478
+ add_action('wp_ajax_bwp-gxs-remove-excluded-term', array($this->get_ajax_handler('taxonomy'), 'remove_excluded_item_action'));
479
+
480
+ add_action('wp_ajax_bwp-gxs-get-external-pages', array($this->get_ajax_handler('external_page'), 'get_pages_action'));
481
+ add_action('wp_ajax_bwp-gxs-submit-external-page', array($this->get_ajax_handler('external_page'), 'save_external_page_action'));
482
+ add_action('wp_ajax_bwp-gxs-remove-external-page', array($this->get_ajax_handler('external_page'), 'remove_external_page_action'));
483
+
484
+ add_action('wp_ajax_bwp-gxs-get-object-taxonomies', array($this->get_ajax_handler('taxonomy'), 'get_taxonomies_action'));
485
+ add_action('wp_ajax_bwp-gxs-get-news-term-genres', array($this->get_ajax_handler('news_terms'), 'get_term_genres_action'));
486
+
487
+ // filter post queries in admin
488
+ add_filter('posts_where', array($this, 'add_post_title_like_query_variable'), 10, 2);
489
+ }
490
+ }
491
+
492
+ protected function init_properties()
493
+ {
494
+ $this->cache_time = (int) $this->options['input_cache_age'] * (int) $this->options['select_time_type'];
495
+
496
+ // init directories where modules live
497
+ $this->_init_module_directories();
498
+
499
+ /**
500
+ * Filter to map a sitemap module to another sitemap module.
501
+ *
502
+ * When a module is mapped to another module, the generation of the
503
+ * mapped module will be handled by the target module.
504
+ *
505
+ * @param array $mappings List of mappings.
506
+ *
507
+ * @return array An array with the module to be mapped as key and the
508
+ * mapped-to module as value. Example:
509
+ * ```
510
+ * return array(
511
+ * 'post_format => 'post_tag'
512
+ * );
513
+ * ```
514
+ */
515
+ $module_map = $this->bridge->apply_filters('bwp_gxs_module_mapping', array());
516
+ $this->module_map = $this->bridge->wp_parse_args($module_map, array(
517
+ 'post_format' => 'post_tag'
518
+ ));
519
+
520
+ // init sitemap log
521
+ $this->_init_logs();
522
+
523
+ // init xslt stylesheet
524
+ $this->_init_xslt_stylesheet();
525
+ }
526
+
527
+ protected function enqueue_media()
528
+ {
529
+ $style_deps = array('bwp-option-page');
530
+
531
+ if ($this->is_admin_page(BWP_GXS_GENERATOR))
532
+ {
533
+ $style_deps = array('bwp-select2', 'bwp-datatables', 'bwp-jquery-ui', 'bwp-option-page');
534
+
535
+ $this->enqueue_media_file('bwp-gxs-admin',
536
+ BWP_GXS_JS . '/bwp-gxs-admin.js',
537
+ array(
538
+ 'bwp-select2',
539
+ 'bwp-datatables',
540
+ 'bwp-inputmask',
541
+ 'jquery-ui-datepicker',
542
+ 'bwp-op-modal',
543
+ 'bwp-op'
544
+ ), false,
545
+ BWP_GXS_DIST . '/js/script.min.js'
546
+ );
547
+
548
+ if ($this->is_admin_page(BWP_GXS_GENERATOR))
549
+ {
550
+ wp_localize_script('bwp-gxs-admin', 'bwp_gxs', array(
551
+ 'nonce' => array(
552
+ 'remove_excluded_item' => wp_create_nonce('bwp_gxs_remove_excluded_item'),
553
+ 'remove_external_page' => wp_create_nonce('bwp_gxs_manage_external_page')
554
+ ),
555
+ 'text' => array(
556
+ 'exclude_items' => array(
557
+ 'remove_title' => __('Remove from exclusion', $this->domain),
558
+ 'remove_warning' => __('This action can not be undone, are you sure?', $this->domain)
559
+ ),
560
+ 'external_pages' => array(
561
+ 'edit_title' => __('Edit this page', $this->domain),
562
+ 'remove_title' => __('Remove this page', $this->domain),
563
+ 'remove_warning' => __('This action can not be undone, are you sure?', $this->domain)
564
+ )
565
+ )
566
+ ));
567
+ }
568
+ }
569
+ elseif ($this->is_admin_page(BWP_GXS_EXTENSIONS))
570
+ {
571
+ $style_deps = array('bwp-datatables', 'bwp-option-page');
572
+
573
+ $this->enqueue_media_file('bwp-gxs-admin-extensions',
574
+ BWP_GXS_JS . '/admin-extensions.js',
575
+ array(
576
+ 'bwp-datatables',
577
+ 'bwp-op'
578
+ ), false,
579
+ BWP_GXS_DIST . '/js/script.min.js'
580
+ );
581
+ }
582
+
583
+ if ($this->is_admin_page())
584
+ {
585
+ $this->enqueue_media_file('bwp-gxs-admin',
586
+ BWP_GXS_CSS . '/style.css', $style_deps, false,
587
+ BWP_GXS_DIST . '/css/style.min.css'
588
+ );
589
+ }
590
+ }
591
+
592
+ public function insert_query_vars($vars)
593
+ {
594
+ if (!$this->_should_use_permalink())
595
+ {
596
+ array_push($vars, $this->_get_non_permalink_query_var());
597
+ }
598
+ else
599
+ {
600
+ array_push($vars, 'gxs_module');
601
+ array_push($vars, 'gxs_sub_module');
602
+ }
603
+
604
+ return $vars;
605
+ }
606
+
607
+ public function insert_rewrite_rules($rules)
608
+ {
609
+ $rewrite_rules = array(
610
+ 'sitemap\.xml$' => 'index.php?gxs_module=sitemapindex',
611
+ 'sitemapindex\.xml$' => 'index.php?gxs_module=sitemapindex',
612
+ 'site\.xml$' => 'index.php?gxs_module=site',
613
+ 'page\.xml$' => 'index.php?gxs_module=page',
614
+ 'post\.xml$' => 'index.php?gxs_module=post',
615
+ 'author\.xml$' => 'index.php?gxs_module=author',
616
+ '([a-z0-9]+)_([a-z0-9_-]+)\.xml$' => 'index.php?gxs_module=$matches[1]&gxs_sub_module=$matches[2]'
617
+ );
618
+
619
+ /**
620
+ * Filter the rewrite rules used by this plugin.
621
+ *
622
+ * This is mostly useful when you want to add a custom sitemap or a
623
+ * sitemap index. See http://betterwp.net/wordpress-plugins/google-xml-sitemaps/#create-another-sitemap-index
624
+ * for an example.
625
+ *
626
+ * @param array $rules List of rules to filter.
627
+ *
628
+ * @since 1.0.3
629
+ */
630
+ $custom_rules = apply_filters('bwp_gxs_rewrite_rules', array());
631
+ $rules = array_merge($custom_rules, $rewrite_rules, $rules);
632
+
633
+ return $rules;
634
+ }
635
+
636
+ private function _get_cache_directory_from_constant()
637
+ {
638
+ return defined('BWP_GXS_CACHE_DIR') && BWP_GXS_CACHE_DIR != ''
639
+ ? trim(BWP_GXS_CACHE_DIR) : '';
640
+ }
641
+
642
+ private function _get_default_cache_directory()
643
+ {
644
+ return $this->bridge->plugin_dir_path($this->plugin_file) . 'cache/';
645
+ }
646
+
647
+ /**
648
+ * Gets cache directory from constant, setting or filters (in that
649
+ * particular order)
650
+ *
651
+ * @since 1.3.0
652
+ */
653
+ public function get_cache_directory()
654
+ {
655
+ // get cache dir from constant
656
+ $cache_dir = $this->_get_cache_directory_from_constant();
657
+
658
+ // get cache dir from setting
659
+ $cache_dir = empty($cache_dir) ? trim($this->options['input_cache_dir']) : $cache_dir;
660
+
661
+ // get default cache dir
662
+ $cache_dir = empty($cache_dir) ? $this->_get_default_cache_directory() : $cache_dir;
663
+
664
+ /**
665
+ * Filter sitemap cache directory.
666
+ *
667
+ * @param string $cache_dir
668
+ * @return string A full path to a custom cache directory.
669
+ */
670
+ return $this->bridge->apply_filters('bwp_gxs_cache_dir', $cache_dir);
671
+ }
672
+
673
+ /**
674
+ * Set up the default module directory and a custom module directory if applicable
675
+ *
676
+ * @return void
677
+ * @since 1.3.0
678
+ * @access private
679
+ */
680
+ private function _init_module_directories()
681
+ {
682
+ $this->module_directory = $this->bridge->plugin_dir_path($this->plugin_file) . 'src/modules/';
683
+
684
+ $this->custom_module_directory = !empty($this->options['input_alt_module_dir'])
685
+ ? $this->options['input_alt_module_dir'] : null;
686
+
687
+ /**
688
+ * Filter the custom sitemap module directory.
689
+ *
690
+ * @param string $custom_module_dir
691
+ * @return string A full path to a custom module directory. See TODO
692
+ */
693
+ $this->custom_module_directory = $this->bridge->trailingslashit(
694
+ $this->bridge->apply_filters('bwp_gxs_module_dir', $this->custom_module_directory)
695
+ );
696
+ }
697
+
698
+ /**
699
+ * Constructs a sitemap url (friendly or normal) based on provided slug
700
+ *
701
+ * @since 1.3.0
702
+ * @return string
703
+ */
704
+ public function get_sitemap_url($slug)
705
+ {
706
+ return sprintf($this->_get_sitemap_url_struct(), $slug);
707
+ }
708
+
709
+ /**
710
+ * Construct the url to the sitemap index
711
+ *
712
+ * @since 1.4.0
713
+ * @return string
714
+ */
715
+ public function get_sitemap_index_url()
716
+ {
717
+ return $this->get_sitemap_url('sitemapindex');
718
+ }
719
+
720
+ /**
721
+ * @since 1.4.0
722
+ * @return mixed bool|string false if should not use permalink
723
+ * the permalink structure itself if used
724
+ */
725
+ private function _should_use_permalink()
726
+ {
727
+ if ($permalink = $this->bridge->get_option('permalink_structure'))
728
+ return $permalink;
729
+
730
+ return false;
731
+ }
732
+
733
+ private function _get_non_permalink_query_var()
734
+ {
735
+ /**
736
+ * Filter the query variable to use when not using pretty permalink.
737
+ *
738
+ * @param string $query_variable Name of the query variable to use.
739
+ * Default to 'bwpsitemap'.
740
+ */
741
+ return $this->bridge->apply_filters('bwp_gxs_query_var_non_perma', 'bwpsitemap');
742
+ }
743
+
744
+ /**
745
+ * @since 1.4.0
746
+ */
747
+ private function _get_sitemap_url_struct()
748
+ {
749
+ if ($permalink = $this->_should_use_permalink())
750
+ {
751
+ // use friendly sitemap urls such as http://example.com/sitemapindex.xml
752
+ // If user is using index.php in their permalink structure, we will
753
+ // have to include it also
754
+ $indexphp = strpos($permalink, 'index.php') === false ? '' : '/index.php';
755
+ return $this->bridge->home_url() . $indexphp . '/%s.xml';
756
+ }
757
+ else
758
+ {
759
+ return $this->bridge->home_url() . '/?' . $this->_get_non_permalink_query_var() . '=%s';
760
+ }
761
+ }
762
+
763
+ /**
764
+ * Inits XSLT stylesheets used for sitemap's look and feel
765
+ *
766
+ * @return void
767
+ * @since 1.3.0
768
+ * @access private
769
+ **/
770
+ private function _init_xslt_stylesheet()
771
+ {
772
+ if ('yes' != $this->options['enable_xslt'])
773
+ return;
774
+
775
+ // if the host the user is using is different from what we get from
776
+ // 'home' option, we need to use the host so user won't see a style
777
+ // sheet error, which is most of the time mistaken as broken
778
+ // sitemaps - @since 1.1.0
779
+ $user_host = strtolower($_SERVER['HTTP_HOST']);
780
+
781
+ $blog_home = @parse_url($this->bridge->site_url());
782
+ $blog_host = strtolower($blog_home['host']);
783
+
784
+ $this->xslt = !empty($this->options['input_custom_xslt'])
785
+ ? $this->options['input_custom_xslt']
786
+ : $this->plugin_wp_url . 'assets/xsl/bwp-sitemap.xsl';
787
+
788
+ $this->xslt = strcmp($user_host, $blog_host) == 0
789
+ ? $this->xslt
790
+ : preg_replace('#(^https?://)[^/]+/#i', '$1' . $user_host . '/', $this->xslt);
791
+
792
+ /**
793
+ * Filter the XSLT stylesheet used to "prettify" sitemaps.
794
+ *
795
+ * @param string $stylesheet
796
+ * @return string A full URL to the stylesheet. Remember to use the
797
+ * same host as your sitemaps'. Also make sure that you have a
798
+ * stylesheet for the sitemap index in the same location (with the
799
+ * suffix "index" added).
800
+ *
801
+ * @since 1.3.0
802
+ */
803
+ $this->xslt = $this->bridge->apply_filters('bwp_gxs_xslt', $this->xslt);
804
+ $this->xslt_index = empty($this->xslt) ? '' : substr_replace($this->xslt, 'index', -4, 0);
805
+ }
806
+
807
+ private function _init_debug()
808
+ {
809
+ $this->_debug = $this->options['enable_debug'] == 'yes'
810
+ || $this->options['enable_debug_extra'] == 'yes' ? true : false;
811
+
812
+ $this->_debug_extra = $this->options['enable_debug_extra'] == 'yes' ? true : false;
813
+ }
814
+
815
+ private function _get_initial_logs()
816
+ {
817
+ return array(
818
+ 'messages' => array(),
819
+ 'sitemaps' => array()
820
+ );
821
+ }
822
+
823
+ /**
824
+ * Inits sitemap log property
825
+ *
826
+ * @since 1.3.0
827
+ * @access private
828
+ */
829
+ private function _init_logs()
830
+ {
831
+ $this->message_logger = BWP_Sitemaps_Logger::create_message_logger(25);
832
+ $this->sitemap_logger = BWP_Sitemaps_Logger::create_sitemap_logger();
833
+
834
+ // populate logger with logs currently stored in db
835
+ $logs = $this->bridge->get_option(BWP_GXS_LOG);
836
+ $logs = $logs && is_array($logs) ? $logs : $this->_get_initial_logs();
837
+
838
+ foreach ($logs as $key => $log)
839
+ {
840
+ // invalid log
841
+ if (!is_array($log))
842
+ continue;
843
+
844
+ foreach ($log as $log_item)
845
+ {
846
+ // invalid log item
847
+ if (!is_array($log_item))
848
+ continue;
849
+
850
+ if ($key == 'sitemaps')
851
+ {
852
+ try {
853
+ $this->_log_sitemap_item(
854
+ $log_item['slug'],
855
+ $log_item['datetime']
856
+ );
857
+ } catch (Exception $e) {
858
+ continue;
859
+ }
860
+ }
861
+ elseif ($key == 'messages')
862
+ {
863
+ try {
864
+ $this->_log_message_item(
865
+ $log_item['message'],
866
+ $log_item['type'],
867
+ $log_item['datetime']
868
+ );
869
+ } catch (Exception $e) {
870
+ continue;
871
+ }
872
+ }
873
+ }
874
+ }
875
+ }
876
+
877
+ private function _reset_logs($keep_sitemaps = true)
878
+ {
879
+ $this->message_logger->reset();
880
+
881
+ if (!$keep_sitemaps)
882
+ $this->sitemap_logger->reset();
883
+
884
+ $this->commit_logs();
885
+ }
886
+
887
+ private static function _flush_rewrite_rules()
888
+ {
889
+ global $wp_rewrite;
890
+
891
+ $wp_rewrite->flush_rules();
892
+ }
893
+
894
+ public function install()
895
+ {
896
+ self::_flush_rewrite_rules();
897
+ }
898
+
899
+ public function uninstall()
900
+ {
901
+ $this->_reset_logs(false);
902
+
903
+ /* self::_flush_rewrite_rules(); */
904
+ }
905
+
906
+ public function upgrade_plugin($from, $to)
907
+ {
908
+ $upgrade_path = dirname(__FILE__) . '/upgrades/db';
909
+
910
+ if (version_compare($from, '1.4.0', '<'))
911
+ {
912
+ // @since 1.4.0 change log formats
913
+ include_once $upgrade_path . '/r2.php';
914
+
915
+ // @since 1.4.0 change google news settings
916
+ include_once $upgrade_path . '/r3.php';
917
+
918
+ // @since 1.4.0 merge google news settings into extensions
919
+ // this MUST come after r3 for the upgrade to work properly
920
+ include_once $upgrade_path . '/r4.php';
921
+ }
922
+ }
923
+
924
+ public function init_upgrade_plugin($from, $to)
925
+ {
926
+ // @since 1.3.0 default values of cache directory is empty
927
+ if (!$from || version_compare($from, '1.3.0', '<'))
928
+ {
929
+ $this->update_some_options(BWP_GXS_GENERATOR, array(
930
+ 'input_cache_dir' => ''
931
+ ));
932
+ }
933
+ }
934
+
935
+ protected function build_menus()
936
+ {
937
+ if (!empty($this->_menu_under_settings))
938
+ {
939
+ // use simple menu if instructed to
940
+ add_options_page(
941
+ __('BWP Google XML Sitemaps', $this->domain),
942
+ __('XML Sitemaps', $this->domain),
943
+ BWP_GXS_CAPABILITY,
944
+ BWP_GXS_GENERATOR,
945
+ array($this, 'show_option_pages')
946
+ );
947
+ add_options_page(
948
+ __('BWP Google News XML Sitemap', $this->domain),
949
+ __('XML Sitemaps - Extensions', $this->domain),
950
+ BWP_GXS_CAPABILITY,
951
+ BWP_GXS_EXTENSIONS,
952
+ array($this, 'show_option_pages')
953
+ );
954
+ add_options_page(
955
+ __('BWP Google XML Sitemaps - Advanced Options', $this->domain),
956
+ __('XML Sitemaps - Advanced Options', $this->domain),
957
+ BWP_GXS_CAPABILITY,
958
+ BWP_GXS_GENERATOR_ADVANCED,
959
+ array($this, 'show_option_pages')
960
+ );
961
+ add_options_page(
962
+ __('BWP Google XML Sitemaps Log', $this->domain),
963
+ __('XML Sitemap Log', $this->domain),
964
+ BWP_GXS_CAPABILITY,
965
+ BWP_GXS_STATS,
966
+ array($this, 'show_option_pages')
967
+ );
968
+ }
969
+ else
970
+ {
971
+ add_menu_page(
972
+ __('Better WordPress Google XML Sitemaps', $this->domain),
973
+ 'BWP Sitemaps',
974
+ BWP_GXS_CAPABILITY,
975
+ BWP_GXS_GENERATOR,
976
+ array($this, 'show_option_pages'),
977
+ BWP_GXS_IMAGES . '/icon_menu.png'
978
+ );
979
+ add_submenu_page(
980
+ BWP_GXS_GENERATOR,
981
+ __('Better WordPress Google XML Sitemaps', $this->domain),
982
+ __('XML Sitemaps', $this->domain),
983
+ BWP_GXS_CAPABILITY,
984
+ BWP_GXS_GENERATOR,
985
+ array($this, 'show_option_pages')
986
+ );
987
+ add_submenu_page(
988
+ BWP_GXS_GENERATOR,
989
+ __('Better WordPress Google News XML Sitemap', $this->domain),
990
+ __('Extensions', $this->domain),
991
+ BWP_GXS_CAPABILITY,
992
+ BWP_GXS_EXTENSIONS,
993
+ array($this, 'show_option_pages')
994
+ );
995
+ add_submenu_page(
996
+ BWP_GXS_GENERATOR,
997
+ __('Better WordPress Google XML Sitemaps Advanced Options', $this->domain),
998
+ __('Advanced Options', $this->domain),
999
+ BWP_GXS_CAPABILITY,
1000
+ BWP_GXS_GENERATOR_ADVANCED,
1001
+ array($this, 'show_option_pages')
1002
+ );
1003
+ add_submenu_page(
1004
+ BWP_GXS_GENERATOR,
1005
+ __('Better WordPress Google XML Sitemaps Log', $this->domain),
1006
+ __('Sitemap Log', $this->domain),
1007
+ BWP_GXS_CAPABILITY,
1008
+ BWP_GXS_STATS,
1009
+ array($this, 'show_option_pages')
1010
+ );
1011
+ }
1012
+ }
1013
+
1014
+ private function _add_checkboxes_to_generator_form($for, $key_prefix, &$form, &$form_options)
1015
+ {
1016
+ $options = &$this->options;
1017
+
1018
+ $exclude_options = array(
1019
+ 'post_types' => explode(',', $options['input_exclude_post_type']),
1020
+ 'post_types_ping' => explode(',', $options['input_exclude_post_type_ping']),
1021
+ 'taxonomies' => explode(',', $options['input_exclude_taxonomy'])
1022
+ );
1023
+
1024
+ $excluded_post_types = $for == 'sec_post'
1025
+ ? $exclude_options['post_types']
1026
+ : $exclude_options['post_types_ping'];
1027
+
1028
+ switch ($for)
1029
+ {
1030
+ case 'sec_post':
1031
+ case 'sec_post_ping':
1032
+ $post_types = $this->get_provider('post')->get_post_types();
1033
+
1034
+ foreach ($post_types as $post_type)
1035
+ {
1036
+ $key = $key_prefix . $post_type->name;
1037
+
1038
+ $form[$for][] = array('checkbox', 'name' => $key);
1039
+ $form['checkbox'][$key] = array(__($post_type->labels->singular_name) => $key);
1040
+
1041
+ $form_options[] = $key;
1042
+
1043
+ if (!in_array($post_type->name, $excluded_post_types))
1044
+ $options[$key] = 'yes';
1045
+ else
1046
+ $options[$key] = '';
1047
+ }
1048
+
1049
+ break;
1050
+
1051
+ case 'sec_tax':
1052
+ $taxonomies = $this->get_provider('taxonomy')->get_taxonomies();
1053
+
1054
+ foreach ($taxonomies as $taxonomy)
1055
+ {
1056
+ $key = $key_prefix . $taxonomy->name;
1057
+
1058
+ $form[$for][] = array('checkbox', 'name' => $key);
1059
+ $form['checkbox'][$key] = array(__($taxonomy->labels->singular_name) => $key);
1060
+
1061
+ $form_options[] = $key;
1062
+
1063
+ if (!in_array($taxonomy->name, $exclude_options['taxonomies']))
1064
+ $options[$key] = 'yes';
1065
+ else
1066
+ $options[$key] = '';
1067
+ }
1068
+
1069
+ break;
1070
+ }
1071
+ }
1072
+
1073
+ private function _add_checkboxes_to_image_sitemap_form($for, $key_prefix, &$form, &$form_options)
1074
+ {
1075
+ $options = &$this->options;
1076
+ $include_options = explode(',', $options['input_image_post_types']);
1077
+
1078
+ switch ($for)
1079
+ {
1080
+ case 'sec_image_post_types':
1081
+ $post_types = $this->get_provider('post')->get_post_types();
1082
+
1083
+ foreach ($post_types as $post_type)
1084
+ {
1085
+ // post type needs to have thumbnail enabled first
1086
+ if (! post_type_supports($post_type->name, 'thumbnail'))
1087
+ continue;
1088
+
1089
+ $key = $key_prefix . $post_type->name;
1090
+
1091
+ $form[$for][] = array('checkbox', 'name' => $key);
1092
+ $form['checkbox'][$key] = array(__($post_type->labels->singular_name) => $key);
1093
+
1094
+ $form_options[] = $key;
1095
+
1096
+ if (in_array($post_type->name, $include_options))
1097
+ $options[$key] = 'yes';
1098
+ else
1099
+ $options[$key] = '';
1100
+ }
1101
+
1102
+ break;
1103
+ }
1104
+ }
1105
+
1106
+ private function _disable_overridden_inputs(array &$inputs)
1107
+ {
1108
+ $overridden_text = strtoupper(__('overridden', $this->domain));
1109
+
1110
+ if (isset($inputs['input_custom_xslt']))
1111
+ {
1112
+ if (has_filter('bwp_gxs_xslt'))
1113
+ {
1114
+ $inputs['input_custom_xslt']['value'] = $overridden_text . ': ' . $this->xslt;
1115
+ $inputs['input_custom_xslt']['disabled'] = 'disabled';
1116
+ }
1117
+ }
1118
+
1119
+ if (isset($inputs['input_cache_dir']))
1120
+ {
1121
+ if (has_filter('bwp_gxs_cache_dir') || $this->_get_cache_directory_from_constant())
1122
+ {
1123
+ $inputs['input_cache_dir']['value'] = $overridden_text . ': ' . $this->get_cache_directory();
1124
+ $inputs['input_cache_dir']['disabled'] = 'disabled';
1125
+ }
1126
+ }
1127
+
1128
+ if (isset($inputs['input_alt_module_dir']))
1129
+ {
1130
+ if (has_filter('bwp_gxs_module_dir'))
1131
+ {
1132
+ $inputs['input_alt_module_dir']['value'] = $overridden_text . ': ' . $this->custom_module_directory;
1133
+ $inputs['input_alt_module_dir']['disabled'] = 'disabled';
1134
+ }
1135
+ }
1136
+ }
1137
+
1138
+ private function _get_frequencies_as_choices()
1139
+ {
1140
+ $choices = array();
1141
+
1142
+ foreach ($this->frequencies as $freq)
1143
+ $choices[ucfirst($freq)] = $freq;
1144
+
1145
+ return $choices;
1146
+ }
1147
+
1148
+ private function _get_news_languages_as_choices()
1149
+ {
1150
+ $languages = include_once BWP_GXS_PLUGIN_SRC . '/provider/google-news/languages.php';
1151
+
1152
+ /**
1153
+ * Filter the languages used for the Google News Sitemap.
1154
+ *
1155
+ * @param array $languages List of languages to filter.
1156
+ *
1157
+ * @since 1.4.0
1158
+ */
1159
+ return (array) $this->bridge->apply_filters('bwp_gxs_news_languages', $languages);
1160
+ }
1161
+
1162
+ private function _get_formatted_logs($template_file, array $data)
1163
+ {
1164
+ ob_start();
1165
+
1166
+ include_once $template_file;
1167
+
1168
+ $output = ob_get_clean();
1169
+
1170
+ return $output;
1171
+ }
1172
+
1173
+ private function _get_formatted_message_logs()
1174
+ {
1175
+ $data = array(
1176
+ 'items' => array_reverse($this->message_logger->get_log_items())
1177
+ );
1178
+
1179
+ return $this->_get_formatted_logs(dirname(__FILE__) . '/templates/logger/admin/message-log.html.php', $data);
1180
+ }
1181
+
1182
+ private function _get_formatted_sitemap_logs()
1183
+ {
1184
+ if ($this->sitemap_logger->is_empty())
1185
+ {
1186
+ $url = add_query_arg(array('generate' => 1, 't' => time()), $this->get_sitemap_url('sitemapindex'));
1187
+ return __('It appears that no sitemap has been generated yet', $this->domain)
1188
+ . ', '
1189
+ . '<a href="#" target="_blank" class="button-secondary button-inline" '
1190
+ . 'onclick="this.href=\'' . esc_attr($url) . '\';">'
1191
+ . __('click to generate your Sitemap Index', $this->domain)
1192
+ . '</a>'
1193
+ . ' .'
1194
+ ;
1195
+ }
1196
+
1197
+ $items = $this->sitemap_logger->get_log_items();
1198
+ $sitemap_log_times = array();
1199
+
1200
+ /* @var $item BWP_Sitemaps_Logger_Sitemap_LogItem */
1201
+ foreach ($items as $item) {
1202
+ $sitemap_log_times[] = $item->get_timestamp();
1203
+ }
1204
+
1205
+ // sort the log DESC by timestamp
1206
+ array_multisort($sitemap_log_times, SORT_DESC, SORT_NUMERIC, $items);
1207
+
1208
+ /* @var $item BWP_Sitemaps_Logger_Sitemap_LogItem */
1209
+ foreach ($items as $key => $item)
1210
+ {
1211
+ // remove sitemapindex log item because we will add it manually
1212
+ // later on
1213
+ if ($item->get_sitemap_slug() === 'sitemapindex')
1214
+ {
1215
+ unset($items[$key]);
1216
+ break;
1217
+ }
1218
+ }
1219
+
1220
+ // add sitemapindex log item to the top
1221
+ if ($sitemapindex = $this->sitemap_logger->get_sitemap_log_item('sitemapindex'))
1222
+ array_unshift($items, $sitemapindex);
1223
+
1224
+ $data = array(
1225
+ 'items' => $items
1226
+ );
1227
+
1228
+ $logs = $this->_get_formatted_logs(dirname(__FILE__) . '/templates/logger/admin/sitemap-log.html.php', $data);
1229
+
1230
+ $logs .= '<p class="bwp-paragraph">'
1231
+ . sprintf(__('To proceed, submit your <a href="%s" target="_blank">sitemapindex</a> '
1232
+ . 'to major search engines like <a href="%s" target="_blank">Google</a> or '
1233
+ . '<a href="%s" target="_blank">Bing</a>.', $this->domain),
1234
+ $this->get_sitemap_index_url(),
1235
+ 'https://www.google.com/webmasters/tools/home?hl=en',
1236
+ 'http://www.bing.com/toolbox/webmasters/')
1237
+ . ' '
1238
+ . sprintf(__('For more details, see <a target="_blank" href="%1$s">this article</a>.', $this->domain),
1239
+ 'https://support.google.com/webmasters/answer/75712?hl=en&ref_topic=4581190')
1240
+ . '</p>';
1241
+
1242
+ return $logs;
1243
+ }
1244
+
1245
+ private function _get_post_types_as_choices($placeholder = true)
1246
+ {
1247
+ $choices = $placeholder
1248
+ ? array(__('Select a post type', $this->domain) => '')
1249
+ : array();
1250
+
1251
+ $post_types = $this->get_provider('post')->get_post_types();
1252
+
1253
+ foreach ($post_types as $post_type)
1254
+ $choices[$post_type->labels->singular_name] = $post_type->name;
1255
+
1256
+ return $choices;
1257
+ }
1258
+
1259
+ private function _get_taxonomies_as_choices($post_type = null, $placeholder = true)
1260
+ {
1261
+ $placeholder_text = is_string($placeholder)
1262
+ ? $placeholder : __('Select a taxonomy', $this->domain);
1263
+
1264
+ $choices = $placeholder
1265
+ ? array($placeholder_text => '')
1266
+ : array();
1267
+
1268
+ $taxonomies = $this->get_provider('taxonomy')->get_taxonomies($post_type);
1269
+
1270
+ foreach ($taxonomies as $taxonomy)
1271
+ $choices[$taxonomy->labels->singular_name] = $taxonomy->name;
1272
+
1273
+ return $choices;
1274
+ }
1275
+
1276
+ protected function build_option_page()
1277
+ {
1278
+ $page = $this->get_current_admin_page();
1279
+ $option_page = $this->current_option_page;
1280
+
1281
+ if (empty($page))
1282
+ return;
1283
+
1284
+ $form_options = array();
1285
+
1286
+ if ($page == BWP_GXS_GENERATOR)
1287
+ {
1288
+ $option_page->set_current_tab(1);
1289
+
1290
+ $form = array(
1291
+ 'items' => array(
1292
+ 'heading',
1293
+ 'heading', // sitemaps to generate
1294
+ 'section',
1295
+ 'section',
1296
+ 'section',
1297
+ 'heading', // exclude items
1298
+ 'select',
1299
+ 'select',
1300
+ 'checkbox',
1301
+ 'heading', // external pages
1302
+ 'heading', // item limits
1303
+ 'input',
1304
+ 'checkbox',
1305
+ 'input',
1306
+ 'heading', // default values
1307
+ 'select',
1308
+ 'select',
1309
+ 'select',
1310
+ 'heading', // ping search engines
1311
+ 'checkbox',
1312
+ 'section',
1313
+ 'section',
1314
+ 'input',
1315
+ 'heading', // look and feel
1316
+ 'checkbox',
1317
+ 'input',
1318
+ 'checkbox',
1319
+ ),
1320
+ 'item_labels' => array(
1321
+ __('Generated Sitemaps', $this->domain),
1322
+ __('Sitemaps to generate', $this->domain),
1323
+ __('Enable following sitemaps', $this->domain),
1324
+ __('Enable following post types', $this->domain),
1325
+ __('Enable following taxonomies', $this->domain),
1326
+ __('Exclude items', $this->domain),
1327
+ __('Exclude posts', $this->domain),
1328
+ __('Exclude terms', $this->domain),
1329
+ __('Exclude posts by terms', $this->domain),
1330
+ __('External pages', $this->domain),
1331
+ __('Item limits', $this->domain),
1332
+ __('Global limit', $this->domain),
1333
+ __('Split <strong>post-based</strong> sitemaps', $this->domain),
1334
+ __('Split limit', $this->domain),
1335
+ __('Default values', $this->domain),
1336
+ __('Default change frequency', $this->domain),
1337
+ __('Default priority', $this->domain),
1338
+ __('Minimum priority', $this->domain),
1339
+ __('Ping search engines', $this->domain),
1340
+ __('Enable pinging', $this->domain),
1341
+ __('Search engines to ping', $this->domain),
1342
+ __('Enable following post types', $this->domain),
1343
+ __('Ping limit', $this->domain),
1344
+ __('Look and Feel', $this->domain),
1345
+ __('Make sitemaps look pretty', $this->domain),
1346
+ __('Custom XSLT stylesheet URL', $this->domain),
1347
+ __('Enable credit', $this->domain),
1348
+ ),
1349
+ 'item_names' => array(
1350
+ 'heading_submit',
1351
+ 'heading_contents',
1352
+ 'sec_index',
1353
+ 'sec_post',
1354
+ 'sec_tax',
1355
+ 'heading_exclude',
1356
+ 'select_exclude_post_type',
1357
+ 'select_exclude_taxonomy',
1358
+ 'enable_exclude_posts_by_terms',
1359
+ 'heading_external_pages',
1360
+ 'heading_limit',
1361
+ 'input_item_limit',
1362
+ 'enable_sitemap_split_post',
1363
+ 'input_split_limit_post',
1364
+ 'heading_default',
1365
+ 'select_default_freq',
1366
+ 'select_default_pri',
1367
+ 'select_min_pri',
1368
+ 'heading_ping',
1369
+ 'enable_ping',
1370
+ 'sec_ping_vendors',
1371
+ 'sec_post_ping',
1372
+ 'input_ping_limit',
1373
+ 'heading_look',
1374
+ 'enable_xslt',
1375
+ 'input_custom_xslt',
1376
+ 'enable_credit',
1377
+ ),
1378
+ 'heading' => array(
1379
+ 'heading_submit' => '',
1380
+ 'heading_contents' => '<em>'
1381
+ . __('Choose appropriate sitemaps to generate.', $this->domain)
1382
+ . '</em>',
1383
+ 'heading_exclude' => '<em>'
1384
+ . sprintf(
1385
+ __('Exclude individual items for each sitemap.'
1386
+ . ' You can also use '
1387
+ . '<a href="%s#exclude-items" target="_blank">filters</a> '
1388
+ . 'to exclude items programmatically.', $this->domain),
1389
+ $this->plugin_url
1390
+ )
1391
+ . '</em>',
1392
+ 'heading_external_pages' => '<em>'
1393
+ . sprintf(
1394
+ __('Add non-WordPress pages to the %s sitemap. '
1395
+ . 'You can also use %s to add external pages programmatically.', $this->domain),
1396
+ '<a href="' . $this->get_sitemap_url('page_external') . '" target="_blank">'
1397
+ . __('External pages', $this->domain)
1398
+ . '</a>',
1399
+ '<a href="' . $this->plugin_url . '#external-pages" target="_blank">'
1400
+ . __('filter', $this->domain)
1401
+ . '</a>'
1402
+ )
1403
+ .'</em>',
1404
+ 'heading_limit' => '<em>'
1405
+ . __('Limit the number of items to output in one sitemap. ', $this->domain)
1406
+ . sprintf(__('Setting too high limits might lead to '
1407
+ . 'white page error due to timeout or memory issue. '
1408
+ . 'Refer to this plugin\'s <a target="_blank" href="%s">FAQ section</a> for more info.', $this->domain),
1409
+ $this->plugin_url . 'faq/')
1410
+ . '</em>',
1411
+ 'heading_default' => '<em>'
1412
+ . __('Default values are only used when valid ones can not '
1413
+ . 'be calculated.', $this->domain)
1414
+ . '</em>',
1415
+ 'heading_look' => '<em>'
1416
+ . __('Customize the look and feel of your sitemaps. '
1417
+ . 'Note that no stylesheet will be used '
1418
+ . 'for the Google News sitemap.', $this->domain)
1419
+ . '</em>',
1420
+ 'heading_ping' => '<em>'
1421
+ . __('Whenever you post something new to your blog, '
1422
+ . 'you can <em>ping</em> search engines with your sitemap index '
1423
+ . 'to tell them your blog just got updated.', $this->domain)
1424
+ . '</em>',
1425
+ ),
1426
+ 'sec_index' => array(
1427
+ array('checkbox', 'name' => 'enable_sitemap_site'),
1428
+ array('checkbox', 'name' => 'enable_sitemap_taxonomy'),
1429
+ array('checkbox', 'name' => 'enable_sitemap_date'),
1430
+ array('checkbox', 'name' => 'enable_sitemap_author'),
1431
+ array('checkbox', 'name' => 'enable_sitemap_external')
1432
+ ),
1433
+ 'sec_post' => array(),
1434
+ 'sec_post_ping' => array(),
1435
+ 'sec_tax' => array(),
1436
+ 'sec_ping_vendors' => array(
1437
+ array('checkbox', 'name' => 'enable_ping_google'),
1438
+ array('checkbox', 'name' => 'enable_ping_bing')
1439
+ ),
1440
+ 'select' => array(
1441
+ 'select_oldest_type' => array(
1442
+ __('second(s)', $this->domain) => 1,
1443
+ __('minute(s)', $this->domain) => 60,
1444
+ __('hour(s)', $this->domain) => 3600,
1445
+ __('day(s)', $this->domain) => 86400
1446
+ ),
1447
+ 'select_default_freq' => $this->_get_frequencies_as_choices(),
1448
+ 'select_default_pri' => $this->priorities,
1449
+ 'select_min_pri' => $this->priorities,
1450
+ 'select_exclude_post_type' => $this->_get_post_types_as_choices(),
1451
+ 'select_exclude_taxonomy' => $this->_get_taxonomies_as_choices()
1452
+ ),
1453
+ 'checkbox' => array(
1454
+ 'enable_sitemap_taxonomy' => array(__('Taxonomy (including custom taxonomies)', $this->domain) => ''),
1455
+ 'enable_sitemap_date' => array(__('Date archives', $this->domain) => ''),
1456
+ 'enable_sitemap_author' => array(__('Author archives', $this->domain) => ''),
1457
+ 'enable_sitemap_external' => array(__('External (non-WordPress) pages.', $this->domain) => ''),
1458
+ 'enable_exclude_posts_by_terms' => array(__('Also exclude posts that belong to excluded terms.', $this->domain) => ''),
1459
+ 'enable_credit' => array(__('Some copyrighted info is added to your sitemaps.', $this->domain) => ''),
1460
+ 'enable_xslt' => array(__('Default XSLT stylesheets will be used. Set your custom stylesheets below or filter the <code>bwp_gxs_xslt</code> hook.', $this->domain) => ''),
1461
+ 'enable_sitemap_split_post' => array(__('Sitemaps like <code>post.xml</code> are split into <code>post_part1.xml</code>, <code>post_part2.xml</code>, etc. when limit reached.', $this->domain) => ''),
1462
+ 'enable_sitemap_site' => array(__('Site Address', $this->domain) => ''),
1463
+ 'enable_ping' => array(__('Ping search engines when you publish new posts.', $this->domain) => ''),
1464
+ 'enable_ping_google' => array(__('Google', $this->domain) => ''),
1465
+ 'enable_ping_bing' => array(__('Bing', $this->domain) => ''),
1466
+ ),
1467
+ 'input' => array(
1468
+ 'input_item_limit' => array(
1469
+ 'size' => 5,
1470
+ 'label' => __('Maximum is <strong>50,000</strong>. '
1471
+ . 'This setting is applied to all sitemaps.', $this->domain)
1472
+ ),
1473
+ 'input_split_limit_post' => array(
1474
+ 'size' => 5,
1475
+ 'label' => __('Maximum is <strong>50,000</strong>. '
1476
+ . 'Set to 0 to use the Global limit.', $this->domain)
1477
+ ),
1478
+ 'input_custom_xslt' => array(
1479
+ 'size' => 91
1480
+ ),
1481
+ 'input_oldest' => array(
1482
+ 'size' => 3,
1483
+ 'label' => '&mdash;'
1484
+ ),
1485
+ 'input_ping_limit' => array(
1486
+ 'size' => 5,
1487
+ 'label' => __('time(s) per search engine per day. '
1488
+ . 'Increase this limit if you '
1489
+ . 'publish a lot of posts in a single day.', $this->domain)
1490
+ ),
1491
+ ),
1492
+ 'container' => array(
1493
+ 'heading_submit' => array(
1494
+ $this->_get_formatted_sitemap_logs(),
1495
+ ),
1496
+ 'select_exclude_post_type' => array(
1497
+ $this->get_template_contents('templates/provider/admin/exclude-posts.html.php'),
1498
+ '_settings' => array(
1499
+ 'need_wrapper' => false
1500
+ )
1501
+ ),
1502
+ 'select_exclude_taxonomy' => array(
1503
+ $this->get_template_contents('templates/provider/admin/exclude-terms.html.php'),
1504
+ '_settings' => array(
1505
+ 'need_wrapper' => false
1506
+ )
1507
+ ),
1508
+ 'heading_external_pages' => array(
1509
+ $this->get_template_contents('templates/provider/admin/external-pages.html.php')
1510
+ )
1511
+ ),
1512
+ 'formats' => array(
1513
+ 'input_item_limit' => 'int',
1514
+ 'input_split_limit_post' => 'int',
1515
+ 'input_ping_limit' => 'int',
1516
+ ),
1517
+ 'helps' => array(
1518
+ 'enable_sitemap_site' => array(
1519
+ 'content' => __('For a multi-site installation of WordPress, '
1520
+ . 'this sitemap will list all appropriate blogs\' addresses within your network, '
1521
+ . 'not just the main blog\'s.', $this->domain),
1522
+ ),
1523
+ 'enable_exclude_posts_by_terms' => array(
1524
+ 'target' => 'icon',
1525
+ 'content' => __('When a post belongs to multiple terms, '
1526
+ . 'it will be excluded if <strong>ANY</strong> of those terms '
1527
+ . 'is currently excluded.', $this->domain)
1528
+ ),
1529
+ 'select_default_freq' => array(
1530
+ 'type' => 'link',
1531
+ 'content' => 'http://www.sitemaps.org/protocol.html#xmlTagDefinitions'
1532
+ ),
1533
+ 'select_default_pri' => array(
1534
+ 'type' => 'link',
1535
+ 'content' => 'http://www.sitemaps.org/protocol.html#xmlTagDefinitions'
1536
+ ),
1537
+ 'select_min_pri' => array(
1538
+ 'type' => 'link',
1539
+ 'content' => 'http://www.sitemaps.org/protocol.html#xmlTagDefinitions'
1540
+ ),
1541
+ 'input_custom_xslt' => array(
1542
+ 'type' => 'focus',
1543
+ 'content' => __('Expect an absolute URL, '
1544
+ . 'e.g. <code>http://example.com/my-stylesheet.xsl</code>. '
1545
+ . 'You must also have a stylesheet for the sitemap index '
1546
+ . 'that can be accessed through the above URL, '
1547
+ . 'e.g. <code>my-stylesheet.xsl</code> and '
1548
+ . '<code>my-stylesheetindex.xsl</code>. '
1549
+ . 'Leave blank to use provided stylesheets.', $this->domain),
1550
+ 'size' => 'medium'
1551
+ )
1552
+ ),
1553
+ 'attributes' => array(
1554
+ 'enable_sitemap_external' => array(
1555
+ 'class' => 'bwp-switch-select bwp-switch-on-load',
1556
+ 'data-target' => 'external-pages',
1557
+ ),
1558
+ 'select_exclude_post_type' => array(
1559
+ 'class' => 'bwp-switch-select',
1560
+ 'data-target' => 'wrapper-exclude-posts',
1561
+ 'data-callback-after' => 'bwp_select_exclude_post_cb'
1562
+ ),
1563
+ 'select_exclude_taxonomy' => array(
1564
+ 'class' => 'bwp-switch-select',
1565
+ 'data-target' => 'wrapper-exclude-terms',
1566
+ 'data-callback-after' => 'bwp_select_exclude_term_cb'
1567
+ ),
1568
+ 'enable_sitemap_split_post' => array(
1569
+ 'class' => 'bwp-switch-on-load bwp-switch-select',
1570
+ 'data-target' => 'input_split_limit_post'
1571
+ )
1572
+ )
1573
+ );
1574
+
1575
+ $form_options = array(
1576
+ 'input_item_limit',
1577
+ 'input_split_limit_post',
1578
+ 'input_custom_xslt',
1579
+ 'input_ping_limit',
1580
+ 'enable_sitemap_date',
1581
+ 'enable_sitemap_taxonomy',
1582
+ 'enable_sitemap_external',
1583
+ 'enable_sitemap_author',
1584
+ 'enable_sitemap_site',
1585
+ 'enable_exclude_posts_by_terms',
1586
+ 'enable_sitemap_split_post',
1587
+ 'enable_ping',
1588
+ 'enable_ping_google',
1589
+ 'enable_ping_bing',
1590
+ 'enable_xslt',
1591
+ 'enable_credit',
1592
+ 'select_default_freq',
1593
+ 'select_default_pri',
1594
+ 'select_min_pri'
1595
+ );
1596
+
1597
+ $this->current_option_page->register_custom_submit_action('exclude_posts');
1598
+ $this->current_option_page->register_custom_submit_action('exclude_terms');
1599
+ add_action('bwp_option_page_custom_action_exclude_posts', array($this, 'handle_exclude_posts'));
1600
+ add_action('bwp_option_page_custom_action_exclude_terms', array($this, 'handle_exclude_terms'));
1601
+
1602
+ $this->_add_checkboxes_to_generator_form('sec_post', 'ept_', $form, $form_options);
1603
+ $this->_add_checkboxes_to_generator_form('sec_tax', 'etax_', $form, $form_options);
1604
+ $this->_add_checkboxes_to_generator_form('sec_post_ping', 'eppt_', $form, $form_options);
1605
+
1606
+ $this->_disable_overridden_inputs($form['input']);
1607
+
1608
+ // add extra forms
1609
+ add_action('bwp_option_action_after_form', array($this, 'add_external_page_modal'));
1610
+
1611
+ // build options dynamically
1612
+ add_filter('bwp_option_page_submit_options', array($this, 'handle_dynamic_generator_options'));
1613
+ }
1614
+ elseif ($page == BWP_GXS_EXTENSIONS)
1615
+ {
1616
+ $option_page->set_current_tab(2);
1617
+
1618
+ $form = array(
1619
+ 'items' => array(
1620
+ 'heading', // image sitemap
1621
+ 'checkbox',
1622
+ 'section',
1623
+ 'heading', // google news sitemap
1624
+ 'checkbox',
1625
+ 'checkbox',
1626
+ 'heading4', // news contents
1627
+ 'input',
1628
+ 'select',
1629
+ 'input',
1630
+ 'select',
1631
+ 'select',
1632
+ 'select',
1633
+ 'checkbox',
1634
+ 'checkbox',
1635
+ 'select',
1636
+ ),
1637
+ 'item_labels' => array
1638
+ (
1639
+ __('Google Image Sitemap', $this->domain),
1640
+ __('Enable extension', $this->domain),
1641
+ __('Enable for following post types', $this->domain),
1642
+ __('Google News Sitemap', $this->domain),
1643
+ __('Enable extension', $this->domain),
1644
+ __('Enable pinging', $this->domain),
1645
+ __('Sitemap Contents', $this->domain),
1646
+ __('News name', $this->domain),
1647
+ __('News language', $this->domain),
1648
+ __('News age', $this->domain),
1649
+ __('News post type', $this->domain),
1650
+ __('News taxonomy', $this->domain),
1651
+ __('News terms and genres', $this->domain),
1652
+ __('Enable multi-term support', $this->domain),
1653
+ __('Enable keywords support', $this->domain),
1654
+ __('Keyword source', $this->domain),
1655
+ ),
1656
+ 'item_names' => array(
1657
+ 'heading_image',
1658
+ 'enable_image_sitemap',
1659
+ 'sec_image_post_types',
1660
+ 'heading_news',
1661
+ 'enable_news_sitemap',
1662
+ 'enable_news_ping',
1663
+ 'heading_contents',
1664
+ 'input_news_name',
1665
+ 'select_news_lang',
1666
+ 'input_news_age',
1667
+ 'select_news_post_type',
1668
+ 'select_news_taxonomy',
1669
+ 'select_news_cat_action',
1670
+ 'enable_news_multicat',
1671
+ 'enable_news_keywords',
1672
+ 'select_news_keyword_source',
1673
+ ),
1674
+ 'heading' => array(
1675
+ 'heading_image' => '<em>'
1676
+ . __('Add featured images to existing post-based sitemaps.', $this->domain)
1677
+ . '</em>',
1678
+ 'heading_news' => '<em>'
1679
+ . __('A Google News Sitemap is a file that '
1680
+ . 'allows you to control which content '
1681
+ . 'you submit to Google News. By creating and '
1682
+ . 'submitting a Google News Sitemap, you\'re able '
1683
+ . 'to help Google News discover and crawl your site\'s news articles '
1684
+ . '&mdash; http://support.google.com/', $this->domain)
1685
+ . '</em>'
1686
+ ),
1687
+ 'heading4' => array(
1688
+ 'heading_contents' => ''
1689
+ ),
1690
+ 'select' => array(
1691
+ 'select_news_post_type' => $this->_get_post_types_as_choices(),
1692
+ 'select_news_taxonomy' => $this->_get_taxonomies_as_choices(
1693
+ $this->options['select_news_post_type']
1694
+ ? $this->options['select_news_post_type']
1695
+ : null
1696
+ ),
1697
+ 'select_news_lang' => $this->_get_news_languages_as_choices(),
1698
+ 'select_news_cat_action' => array(
1699
+ __('Include', $this->domain) => 'inc',
1700
+ __('Exclude', $this->domain) => 'exc'
1701
+ ),
1702
+ 'select_news_keyword_source' => $this->_get_taxonomies_as_choices(
1703
+ $this->options['select_news_post_type']
1704
+ ? $this->options['select_news_post_type']
1705
+ : null,
1706
+ __('Use the selected "News taxonomy"', $this->domain)
1707
+ )
1708
+ ),
1709
+ 'input' => array(
1710
+ 'input_news_name' => array(
1711
+ 'size' => 70
1712
+ ),
1713
+ 'input_news_age' => array(
1714
+ 'size' => 3,
1715
+ 'label' => __('day(s).', $this->domain)
1716
+ )
1717
+ ),
1718
+ 'checkbox' => array(
1719
+ 'enable_image_sitemap' => array(__('Add an <code>&lt;image:image&gt;</code> entry to each sitemap item when possible.', $this->domain) => ''),
1720
+ 'enable_news_sitemap' => array(sprintf(__('Add <code>post_google_news.xml</code> to the main <a href="%s" target="_blank">sitemapindex.xml</a>.', $this->domain), $this->get_sitemap_index_url()) => ''),
1721
+ 'enable_news_keywords' => array('' => ''),
1722
+ 'enable_news_ping' => array(__('Ping search engines when a news article is published.', $this->domain) => ''),
1723
+ 'enable_news_multicat' => array(__('Enable this if you have posts assigned to more than one terms.', $this->domain) => '')
1724
+ ),
1725
+ 'sec_image_post_types' => array(),
1726
+ 'inline_fields' => array(),
1727
+ 'post' => array(
1728
+ 'select_news_cat_action' => '&nbsp;<em>'
1729
+ . __('selected terms.', $this->domain)
1730
+ . '</em>&nbsp; '
1731
+ . '<button type="button" class="button-secondary bwp-switch-button" '
1732
+ . 'id="button-toggle-selected-term-genres" '
1733
+ . 'data-target="wrapper-selected-term-genres" '
1734
+ . 'data-loader="loader-selected-term-genres" '
1735
+ . 'data-callback="bwp_button_view_selected_term_genres_cb"'
1736
+ . '>'
1737
+ . __('Show/Hide selected terms', $this->domain)
1738
+ . '</button>'
1739
+ . '<span style="display: none;" id="loader-selected-term-genres"> '
1740
+ . '<em>' . __('... loading', $this->domain) . '</em>'
1741
+ . '</span>'
1742
+ ),
1743
+ 'container' => array(
1744
+ 'sec_image_post_types' => '<strong>'
1745
+ . __('Note:', $this->domain)
1746
+ . '</strong> '
1747
+ . sprintf(
1748
+ __('You can only select post types that <a href="%s" target="_blank">support the thumbnail feature</a>.', $this->domain),
1749
+ 'http://codex.wordpress.org/Function_Reference/register_post_type#supports'
1750
+ ),
1751
+ 'select_news_cat_action' => $this->get_template_contents('templates/provider/admin/news-contents.html.php'),
1752
+ ),
1753
+ 'helps' => array(
1754
+ 'enable_image_sitemap' => array(
1755
+ 'type' => 'switch',
1756
+ 'target' => 'icon',
1757
+ 'content' =>
1758
+ sprintf(
1759
+ __('Please make sure you have enabled the '
1760
+ . '<a href="%s" target="_blank">Post Thumbnails feature</a> in your theme before '
1761
+ . 'enabling this extension.', $this->domain),
1762
+ 'http://codex.wordpress.org/Post_Thumbnails'
1763
+ )
1764
+ . '<br /><br />'
1765
+ . sprintf(
1766
+ __('Learn more about <a href="%s" target="_blank">Image sitemaps</a>.', $this->domain),
1767
+ 'https://support.google.com/webmasters/answer/178636?hl=en'
1768
+ )
1769
+ . '<br /><br />'
1770
+ . '<strong>' . __('Important', $this->domain) . ':</strong> '
1771
+ . __('This extension has an effect on performance, '
1772
+ . 'if you notice any slowdown please try disabling '
1773
+ . 'it first.', $this->domain)
1774
+ ),
1775
+ 'enable_news_sitemap' => array(
1776
+ 'type' => 'switch',
1777
+ 'target' => 'icon',
1778
+ 'content' =>
1779
+ sprintf(
1780
+ __('Please take a look at '
1781
+ . '<a href="%s" target="_blank">Google News\'s guidelines</a> '
1782
+ . 'before enabling this feature.', $this->domain),
1783
+ 'https://support.google.com/news/publisher/answer/74288?hl=en#sitemapguidelines'
1784
+ )
1785
+ . '<br /><br />'
1786
+ . sprintf(
1787
+ __('Also, if you notice that some non-news contents are '
1788
+ . 'indexed too, read <a href="%sfaq#google-news" target="_blank">this</a>.', $this->domain),
1789
+ $this->plugin_url
1790
+ )
1791
+ ),
1792
+ 'input_news_name' => array(
1793
+ 'type' => 'focus',
1794
+ 'content' => __('Set a different name for your news sitemap. '
1795
+ . 'By default, your <em>Site Title</em> is used.', $this->domain)
1796
+ ),
1797
+ 'input_news_age' => array(
1798
+ 'type' => 'switch',
1799
+ 'content' => __('Articles that are older than specified day(s) will NOT be considered.', $this->domain)
1800
+ . '<br /><br />'
1801
+ . '<em>' . __('Set to <code>0</code> to disable (not recommended).', $this->domain) . '</em>'
1802
+ . '<br /><br />'
1803
+ . sprintf(
1804
+ __('Please take a look at '
1805
+ . '<a href="%s" target="_blank">Google News\'s guidelines</a> '
1806
+ . 'for more info.', $this->domain),
1807
+ 'https://support.google.com/news/publisher/answer/74288?hl=en#sitemapguidelines'
1808
+ )
1809
+ ),
1810
+ 'select_news_post_type' => array(
1811
+ 'target' => 'icon',
1812
+ 'content' => __('If you enable the "Google Image Extension" for '
1813
+ . 'selected post type, featured image will also be '
1814
+ . 'added automatically to the news sitemap.', $this->domain)
1815
+ ),
1816
+ 'select_news_taxonomy' => array(
1817
+ 'target' => 'icon',
1818
+ 'content' => __('Due to performance reason, it is advised '
1819
+ . 'to NOT use a tag-like taxonomy (such as <em>Post Tag</em>) '
1820
+ . 'as the news taxonomy.', $this->domain)
1821
+ ),
1822
+ 'enable_news_keywords' => array(
1823
+ 'type' => 'link',
1824
+ 'content' => 'https://support.google.com/news/publisher/answer/116037?hl=en&ref_topic=4359874'
1825
+ ),
1826
+ 'enable_news_ping' => array(
1827
+ 'content' => __('This ping works separately from the sitemap index ping, '
1828
+ . 'and only occurs when you publish an article '
1829
+ . 'in one of the news categories set below.', $this->domain)
1830
+ )
1831
+ ),
1832
+ 'attributes' => array(
1833
+ 'input_news_name' => array(
1834
+ 'placeholder' => get_bloginfo('title')
1835
+ ),
1836
+ 'select_news_post_type' => array(
1837
+ 'class' => 'bwp-switch-select',
1838
+ /* 'data-target' => 'select_news_taxonomy', */
1839
+ 'data-callback' => 'bwp_select_news_post_type_cb'
1840
+ ),
1841
+ 'select_news_taxonomy' => array(
1842
+ 'class' => 'bwp-switch-select',
1843
+ 'data-target' => 'select_news_cat_action',
1844
+ 'data-callback' => 'bwp_select_news_taxonomy_cb'
1845
+ ),
1846
+ 'enable_news_keywords' => array(
1847
+ 'class' => 'bwp-switch-on-load bwp-switch-select',
1848
+ 'data-target' => 'select_news_keyword_source'
1849
+ )
1850
+ ),
1851
+ 'formats' => array(
1852
+ 'input_news_age' => 'int'
1853
+ )
1854
+ );
1855
+
1856
+ $form_options = array(
1857
+ 'enable_image_sitemap',
1858
+ 'enable_news_sitemap',
1859
+ 'enable_news_ping',
1860
+ 'enable_news_keywords',
1861
+ 'enable_news_multicat',
1862
+ 'select_news_post_type',
1863
+ 'select_news_taxonomy',
1864
+ 'select_news_lang',
1865
+ 'select_news_keyword_source',
1866
+ 'select_news_cat_action',
1867
+ 'select_news_cats',
1868
+ 'input_news_name',
1869
+ 'input_news_age',
1870
+ 'input_news_genres'
1871
+ );
1872
+
1873
+ $this->_add_checkboxes_to_image_sitemap_form('sec_image_post_types', 'ipt_', $form, $form_options);
1874
+
1875
+ // build options dynamically
1876
+ add_filter('bwp_option_page_submit_options', array($this, 'handle_dynamic_image_sitemap_options'));
1877
+ add_filter('bwp_option_page_submit_options', array($this, 'handle_dynamic_google_news_options'));
1878
+
1879
+ // handle option changes
1880
+ add_filter('bwp_option_page_action_submitted', array($this, 'handle_google_news_option_changes'));
1881
+ }
1882
+ elseif ($page == BWP_GXS_GENERATOR_ADVANCED)
1883
+ {
1884
+ $option_page->set_current_tab(3);
1885
+
1886
+ $form = array(
1887
+ 'items' => array(
1888
+ 'heading',
1889
+ 'checkbox',
1890
+ 'checkbox',
1891
+ 'heading', // virtual robots
1892
+ 'checkbox',
1893
+ 'checkbox',
1894
+ 'heading', // caching
1895
+ 'checkbox',
1896
+ 'checkbox',
1897
+ 'input',
1898
+ 'input',
1899
+ 'heading', // modules
1900
+ 'input',
1901
+ 'input',
1902
+ 'heading', // debugging
1903
+ 'checkbox',
1904
+ 'checkbox',
1905
+ 'checkbox',
1906
+ 'checkbox'
1907
+ ),
1908
+ 'item_labels' => array(
1909
+ __('Formatting', $this->domain),
1910
+ __('Use GMT for Last Modified date', $this->domain),
1911
+ __('Compress sitemaps', $this->domain),
1912
+ __('Robots.txt', $this->domain),
1913
+ __('Enable robots.txt support', $this->domain),
1914
+ __('Enable multisite robots.txt support', $this->domain),
1915
+ __('Sitemap Cache', $this->domain),
1916
+ __('Enable caching', $this->domain),
1917
+ __('Enable auto cache re-generation', $this->domain),
1918
+ __('Cache expiry time', $this->domain),
1919
+ __('Cache directory', $this->domain),
1920
+ __('Sitemap modules', $this->domain),
1921
+ __('Database query limit', $this->domain),
1922
+ __('Custom module directory', $this->domain),
1923
+ __('Debugging', $this->domain),
1924
+ __('Enable build stats', $this->domain),
1925
+ __('Enable message log', $this->domain),
1926
+ __('Enable debugging mode', $this->domain),
1927
+ __('Enable extra debugging mode', $this->domain)
1928
+ ),
1929
+ 'item_names' => array(
1930
+ 'heading_format',
1931
+ 'enable_gmt',
1932
+ 'enable_gzip',
1933
+ 'heading_robot',
1934
+ 'enable_robots',
1935
+ 'enable_global_robots',
1936
+ 'heading_cache',
1937
+ 'enable_cache',
1938
+ 'enable_cache_auto_gen',
1939
+ 'input_cache_age',
1940
+ 'input_cache_dir',
1941
+ 'heading_module',
1942
+ 'input_sql_limit',
1943
+ 'input_alt_module_dir',
1944
+ 'heading_debug',
1945
+ 'enable_stats',
1946
+ 'enable_log',
1947
+ 'enable_debug',
1948
+ 'enable_debug_extra'
1949
+ ),
1950
+ 'heading' => array(
1951
+ 'heading_format' => '',
1952
+ 'heading_cache' => '<em>'
1953
+ . __('Cache your sitemaps for better performance. '
1954
+ . 'If you are still configuring the plugin it\'s best to '
1955
+ . 'disable caching or you might have to manually flush the cache '
1956
+ . 'for any changes to show up.', $this->domain)
1957
+ . '</em>',
1958
+ 'heading_robot' => '<em>'
1959
+ . sprintf(__('WordPress generates a %svirtual robots.txt%s '
1960
+ . 'file for your blog by default. '
1961
+ . 'You can add the sitemap index file '
1962
+ . 'to that robots.txt file using settings below.', $this->domain),
1963
+ !self::is_multisite() || self::is_subdomain_install()
1964
+ ? '<a href="' . home_url('robots.txt') . '" target="_blank">'
1965
+ : '',
1966
+ !self::is_multisite() || self::is_subdomain_install()
1967
+ ? '</a>'
1968
+ : '')
1969
+ . '</em>',
1970
+ 'heading_module' => '<em>'
1971
+ . sprintf(__('Extend this plugin using customizable modules. '
1972
+ . 'More info <a href="%s#module-api">here</a>.', $this->domain),
1973
+ $this->plugin_url)
1974
+ . '</em>',
1975
+ 'heading_debug' => ''
1976
+ ),
1977
+ 'checkbox' => array(
1978
+ 'enable_gmt' => array(__('Disable this to use the local timezone setting in <em>Settings >> General</em>.', $this->domain) => ''),
1979
+ 'enable_gzip' => array(__('Use gzip to make sitemaps ~70% smaller. If you see an error after enabling this, it\'s very likely that you have gzip active on your server already.', $this->domain) => ''),
1980
+ 'enable_cache' => array(__('Your sitemaps are generated and then cached to reduce unnecessary work.', $this->domain) => ''),
1981
+ 'enable_cache_auto_gen' => array(__('Re-generate sitemap cache when expired. If you disable this, remember to manually flush the cache once in a while.', $this->domain) => ''),
1982
+ 'enable_robots' => array(__('Add a sitemap index entry to blog\'s robots.txt', $this->domain) => ''),
1983
+ 'enable_global_robots' => array(__('Add sitemap index entries from all blogs to primary blog\'s robots.txt', $this->domain) => ''),
1984
+ 'enable_stats' => array(__('Print useful information such as build time, memory usage, SQL queries, etc.', $this->domain) => ''),
1985
+ 'enable_log' => array(sprintf(__('Log useful messages when sitemaps are generated. The log can be viewed <a href="%s">here</a>.', $this->domain), $this->get_admin_page_url(BWP_GXS_STATS)) => ''),
1986
+ 'enable_debug' => array(__('When this is on, NO caching is used and <code>WP_DEBUG</code> is respected, useful when developing new modules.', $this->domain) => ''),
1987
+ 'enable_debug_extra' => array(sprintf(__('When this is on, NO headers are sent and sitemaps are NOT compressed, useful when debugging <em>Content Encoding Error</em>. More info <a href="%s#sitemap-log-debug" target="_blank">here</a>.', $this->domain), $this->plugin_url) => ''),
1988
+ ),
1989
+ 'input' => array(
1990
+ 'input_cache_age' => array(
1991
+ 'size' => 5,
1992
+ 'label' => '&mdash;'
1993
+ ),
1994
+ 'input_cache_dir' => array(
1995
+ 'size' => 91
1996
+ ),
1997
+ 'input_alt_module_dir' => array(
1998
+ 'size' => 91
1999
+ ),
2000
+ 'input_sql_limit' => array(
2001
+ 'size' => 5,
2002
+ 'label' => __('Maximum number of items to fetch '
2003
+ . 'in each query to database. '
2004
+ . 'This helps when a sitemap has thousands of items and '
2005
+ . 'host is low on memory.', $this->domain)
2006
+ ),
2007
+ ),
2008
+ 'select' => array(
2009
+ 'select_time_type' => array(
2010
+ __('second(s)', $this->domain) => 1,
2011
+ __('minute(s)', $this->domain) => 60,
2012
+ __('hour(s)', $this->domain) => 3600,
2013
+ __('day(s)', $this->domain) => 86400
2014
+ ),
2015
+ ),
2016
+ 'inline_fields' => array(
2017
+ 'input_cache_age' => array('select_time_type' => 'select')
2018
+ ),
2019
+ 'inline' => array(
2020
+ 'cb_enable_autogen' => '<br /><br />'
2021
+ ),
2022
+ 'helps' => array(
2023
+ 'enable_robots' => array(
2024
+ 'type' => 'switch',
2025
+ 'target' => 'icon',
2026
+ 'content' => sprintf(
2027
+ __('If you\'re on a Multi-site installation with <strong>Sub-domain</strong> enabled, '
2028
+ . 'each blog will have its own robots.txt. '
2029
+ . 'Blogs in <strong>sub-directory</strong> will not, however. '
2030
+ . 'Please read the <a href="%s#robots.txt" target="_blank">documentation</a> for more info.', $this->domain),
2031
+ $this->plugin_url
2032
+ )
2033
+ ),
2034
+ 'enable_global_robots' => array(
2035
+ 'type' => 'switch',
2036
+ 'target' => 'icon',
2037
+ 'content' => sprintf(
2038
+ __('If you have for example 50 blogs, 50 sitemap index entries '
2039
+ . 'will be added to your primary blog\'s <a href="%s" target="_blank">robots.txt</a>.', $this->domain),
2040
+ get_site_option('home') . '/robots.txt'
2041
+ )
2042
+ ),
2043
+ 'input_cache_dir' => array(
2044
+ 'type' => 'focus',
2045
+ 'content' => __('Expect an absolute path to a writable directory '
2046
+ . '(i.e. CHMOD to 755 or 777). ', $this->domain)
2047
+ . '<br />'
2048
+ . sprintf(
2049
+ __('Leave empty to use <code>%s</code>.', $this->domain),
2050
+ $this->_get_default_cache_directory()
2051
+ ),
2052
+ 'size' => 'medium'
2053
+ ),
2054
+ 'input_alt_module_dir' => array(
2055
+ 'type' => 'focus',
2056
+ 'content' => __('Expect an absolute path to the directory '
2057
+ . 'where you put your custom modules '
2058
+ . '(e.g. <code>/home/mysite/public_html/gxs-modules/</code>). ', $this->domain)
2059
+ . '<br />'
2060
+ . __('Override a built-in module by having a module '
2061
+ . 'with the same filename in specified directory.', $this->domain),
2062
+ 'size' => 'large'
2063
+ )
2064
+ ),
2065
+ 'attributes' => array(
2066
+ 'input_cache_dir' => array(
2067
+ 'placeholder' => $this->_get_default_cache_directory()
2068
+ )
2069
+ ),
2070
+ 'env' => array(
2071
+ 'enable_global_robots' => 'multisite'
2072
+ ),
2073
+ 'role' => array(
2074
+ 'heading_cache' => 'superadmin',
2075
+ 'heading_module' => 'superadmin',
2076
+ 'heading_debug' => 'superadmin',
2077
+ ),
2078
+ 'formats' => array(
2079
+ 'input_cache_age' => 'int',
2080
+ 'select_time_type' => 'int',
2081
+ 'input_sql_limit' => 'int',
2082
+ )
2083
+ );
2084
+
2085
+ $form_options = array(
2086
+ 'enable_gmt',
2087
+ 'enable_gzip',
2088
+ 'enable_cache',
2089
+ 'enable_cache_auto_gen',
2090
+ 'input_cache_dir',
2091
+ 'input_cache_age',
2092
+ 'select_time_type',
2093
+ 'enable_robots',
2094
+ 'enable_global_robots',
2095
+ 'input_sql_limit',
2096
+ 'input_alt_module_dir',
2097
+ 'enable_stats',
2098
+ 'enable_log',
2099
+ 'enable_debug',
2100
+ 'enable_debug_extra',
2101
+ );
2102
+
2103
+ $this->_disable_overridden_inputs($form['input']);
2104
+
2105
+ // use same option key as XML Sitemaps page
2106
+ add_filter('bwp_option_page_submit_form_name', create_function('', "return BWP_GXS_GENERATOR;"));
2107
+ }
2108
+ elseif ($page == BWP_GXS_STATS)
2109
+ {
2110
+ $option_page->set_current_tab(4);
2111
+
2112
+ $form = array(
2113
+ 'items' => array(
2114
+ 'heading',
2115
+ ),
2116
+ 'item_labels' => array
2117
+ (
2118
+ __('Message Log', $this->domain),
2119
+ ),
2120
+ 'item_names' => array(
2121
+ 'h3',
2122
+ ),
2123
+ 'heading' => array(
2124
+ 'h3' => 'yes' == $this->options['enable_log']
2125
+ ? '<em>'
2126
+ . __('Below are messages logged when your sitemaps were generated, '
2127
+ . 'including <span style="color: #999999;">notices</span>, '
2128
+ . '<span style="color: #FF0000;">errors</span> and '
2129
+ . '<span style="color: #009900;">success messages</span>.', $this->domain)
2130
+ . '</em>'
2131
+ : '<em>'
2132
+ . __('Logging is not currently enabled. '
2133
+ . 'You can enable this feature by checking '
2134
+ . '"Enable logging" in <strong>XML Sitemaps >> Sitemap log & debug</strong>.', $this->domain)
2135
+ . '</em>',
2136
+ ),
2137
+ 'container' => array(
2138
+ 'h3' => 'yes' == $this->options['enable_log'] ? $this->_get_formatted_message_logs() : '',
2139
+ )
2140
+ );
2141
+
2142
+ if ('yes' != $this->options['enable_log'] || $this->message_logger->is_empty())
2143
+ {
2144
+ // no log is found, or logging is disabled, hide sidebar and
2145
+ // save changes button to save space
2146
+ add_filter('bwp_feed_showable', create_function('', 'return "";'));
2147
+ add_filter('bwp_option_submit_button', create_function('', 'return "";'));
2148
+ }
2149
+ else
2150
+ {
2151
+ // add a clear log button, also remove the save changes button
2152
+ $this->current_option_page->register_custom_submit_action('clear_log');
2153
+ add_filter('bwp_option_submit_button', array($this, 'add_clear_log_button'));
2154
+ add_action('bwp_option_page_custom_action_clear_log', array($this, 'handle_clear_log_action'));
2155
+ }
2156
+ }
2157
+
2158
+ // add flush cache buttons for super admins on main blog
2159
+ // @todo allow normal admins to flush the cache as well,
2160
+ // but only for sitemaps on their sites
2161
+ if (self::can_update_site_option()
2162
+ && (BWP_GXS_GENERATOR == $page || BWP_GXS_GENERATOR_ADVANCED == $page)
2163
+ ) {
2164
+ $this->current_option_page->register_custom_submit_action('flush_cache');
2165
+ $this->current_option_page->register_custom_submit_action('save_flush_cache');
2166
+ add_filter('bwp_option_submit_button', array($this, 'add_flush_cache_buttons'));
2167
+ add_action('bwp_option_page_custom_action_flush_cache', array($this, 'handle_flush_action'));
2168
+ add_action('bwp_option_page_custom_action_save_flush_cache', array($this, 'handle_save_flush_action'));
2169
+ }
2170
+
2171
+ $option_page->init($form, $form_options);
2172
+ }
2173
+
2174
+ public function show_option_pages()
2175
+ {
2176
+ if ($this->options['enable_cache'] == 'yes')
2177
+ {
2178
+ // show a warning if caching is enabled but cache directory is
2179
+ // not writable
2180
+ $cache_directory = $this->get_cache_directory();
2181
+
2182
+ if (!@file_exists($cache_directory) || !@is_writable($cache_directory))
2183
+ {
2184
+ $this->add_notice(
2185
+ '<strong>' . __('Warning') . ':</strong> '
2186
+ . sprintf(__('Cache directory (<code>%s</code>) does not exist or is not writable. '
2187
+ . 'Please try CHMODing it to either 755 or 777, or disable caching to hide '
2188
+ . 'this warning (not recommended).', $this->domain), $cache_directory)
2189
+ );
2190
+ }
2191
+ }
2192
+
2193
+ $this->current_option_page->generate_html_form();
2194
+ }
2195
+
2196
+ public function add_external_page_modal()
2197
+ {
2198
+ echo $this->get_template_contents('templates/provider/admin/external-page-modal.html.php', array(
2199
+ 'frequencies' => $this->_get_frequencies_as_choices(),
2200
+ 'priorities' => $this->priorities
2201
+ ));
2202
+ }
2203
+
2204
+ public function handle_dynamic_generator_options(array $options)
2205
+ {
2206
+ $post_types = $this->get_provider('post')->get_post_types();
2207
+ $taxonomies = $this->get_provider('taxonomy')->get_taxonomies();
2208
+
2209
+ $excluded_post_types = array();
2210
+ $excluded_post_types_ping = array();
2211
+ $excluded_taxonomies = array();
2212
+
2213
+ foreach ($post_types as $post_type)
2214
+ {
2215
+ if (!array_key_exists('ept_' . $post_type->name, $_POST))
2216
+ $excluded_post_types[] = $post_type->name;
2217
+
2218
+ if (!array_key_exists('eppt_' . $post_type->name, $_POST))
2219
+ $excluded_post_types_ping[] = $post_type->name;
2220
+ }
2221
+
2222
+ foreach ($taxonomies as $taxonomy)
2223
+ {
2224
+ if (!array_key_exists('etax_' . $taxonomy->name, $_POST))
2225
+ $excluded_taxonomies[] = $taxonomy->name;
2226
+ }
2227
+
2228
+ // @since 1.4.0 remove temporary options so they're not saved into db
2229
+ foreach ($options as $key => $value)
2230
+ {
2231
+ if (strpos($key, 'ept_') === 0
2232
+ || strpos($key, 'eppt_') === 0
2233
+ || strpos($key, 'etax_') === 0
2234
+ ) {
2235
+ unset($options[$key]);
2236
+ }
2237
+ }
2238
+
2239
+ $options['input_exclude_post_type'] = implode(',', $excluded_post_types);
2240
+ $options['input_exclude_post_type_ping'] = implode(',', $excluded_post_types_ping);
2241
+ $options['input_exclude_taxonomy'] = implode(',', $excluded_taxonomies);
2242
+
2243
+ // no more than 50000 URLs per sitemap
2244
+ $options['input_item_limit'] = 50000 < $options['input_item_limit']
2245
+ ? 50000 : $options['input_item_limit'];
2246
+
2247
+ $options['input_split_limit_post'] = 50000 < $options['input_split_limit_post']
2248
+ ? 50000 : $options['input_split_limit_post'];
2249
+
2250
+ return $options;
2251
+ }
2252
+
2253
+ public function handle_dynamic_image_sitemap_options(array $options)
2254
+ {
2255
+ $post_types = $this->get_provider('post')->get_post_types();
2256
+ $included_post_types = array();
2257
+
2258
+ foreach ($post_types as $post_type)
2259
+ {
2260
+ if (array_key_exists('ipt_' . $post_type->name, $_POST))
2261
+ $included_post_types[] = $post_type->name;
2262
+ }
2263
+
2264
+ foreach ($options as $key => $value)
2265
+ {
2266
+ if (strpos($key, 'ipt_') === 0)
2267
+ unset($options[$key]);
2268
+ }
2269
+
2270
+ $options['input_image_post_types'] = implode(',', $included_post_types);
2271
+
2272
+ return $options;
2273
+ }
2274
+
2275
+ public function handle_dynamic_google_news_options(array $options)
2276
+ {
2277
+ // only do this if we can actually submit
2278
+ if (empty($_POST['term_genre_can_submit']))
2279
+ return $options;
2280
+
2281
+ $news_terms = array();
2282
+ $news_genres = array();
2283
+
2284
+ $terms = $this->get_provider('taxonomy')->get_all_terms($options['select_news_taxonomy']);
2285
+
2286
+ foreach ($terms as $term)
2287
+ {
2288
+ if (!empty($_POST['term_' . $term->term_id]))
2289
+ $news_terms[] = $term->term_id;
2290
+
2291
+ $term_genre_post_key = 'term_' . $term->term_id . '_genres';
2292
+ if (isset($_POST[$term_genre_post_key])
2293
+ && is_array($_POST[$term_genre_post_key])
2294
+ ) {
2295
+ $genres = $_POST[$term_genre_post_key];
2296
+ $genres = array_map('trim', $genres);
2297
+
2298
+ $news_genres['term_' . $term->term_id] = implode(', ', $genres);
2299
+ }
2300
+ }
2301
+
2302
+ $options['select_news_cats'] = implode(',', $news_terms);
2303
+ $options['input_news_genres'] = $news_genres;
2304
+
2305
+ return $options;
2306
+ }
2307
+
2308
+ public function handle_google_news_option_changes()
2309
+ {
2310
+ // google news sitemap has just been enabled, try generating for the
2311
+ // first time to make sure it works
2312
+ if ($this->current_options['enable_news_sitemap'] != $this->options['enable_news_sitemap']
2313
+ && $this->options['enable_news_sitemap'] == 'yes'
2314
+ ) {
2315
+ // @todo 2.0.0 use a provider to fetch data here instead
2316
+ $response = wp_remote_get($this->get_sitemap_url('post_google_news'));
2317
+
2318
+ $is_news_sitemap_ok = false;
2319
+
2320
+ if (!is_wp_error($response))
2321
+ {
2322
+ $response_status = wp_remote_retrieve_response_code($response);
2323
+
2324
+ // the news sitemap can be generated successfully
2325
+ if ($response_status === 200)
2326
+ $is_news_sitemap_ok = true;
2327
+ }
2328
+
2329
+ if (!$is_news_sitemap_ok)
2330
+ {
2331
+ $this->add_error_flash(sprintf(
2332
+ __('Google News sitemap could not be generated, '
2333
+ . 'please check <a href="%s">Sitemap Log</a> '
2334
+ . 'for possible errors.', $this->domain),
2335
+ $this->get_admin_page_url(BWP_GXS_STATS)
2336
+ ));
2337
+ }
2338
+ }
2339
+ }
2340
+
2341
+ public function add_flush_cache_buttons($button)
2342
+ {
2343
+ $button = str_replace(
2344
+ '</p>',
2345
+ '&nbsp; <input type="submit" class="button-secondary action" name="save_flush_cache" '
2346
+ . 'value="' . __('Save Changes and Flush Cache', $this->domain) . '" />'
2347
+ . '&nbsp; <input type="submit" class="button-secondary action" name="flush_cache" '
2348
+ . 'value="' . __('Flush Cache', $this->domain) . '" /></p>',
2349
+ $button
2350
+ );
2351
+
2352
+ return $button;
2353
+ }
2354
+
2355
+ public function add_clear_log_button($button)
2356
+ {
2357
+ $button = '<p class="submit">'
2358
+ . '<input type="submit" class="button-primary action" name="clear_log" value="'
2359
+ . __('Clear Message Log', $this->domain) . '" />'
2360
+ . '</p>';
2361
+
2362
+ return $button;
2363
+ }
2364
+
2365
+ /**
2366
+ * Flush sitemap cache
2367
+ *
2368
+ * @return mixed int|bool false if there's something wrong
2369
+ * int the number of cached sitemaps flushed
2370
+ */
2371
+ public function flush_cache()
2372
+ {
2373
+ $deleted = false;
2374
+ $dir = trailingslashit($this->get_cache_directory());
2375
+
2376
+ if (is_dir($dir))
2377
+ {
2378
+ if ($dh = opendir($dir))
2379
+ {
2380
+ $deleted = 0;
2381
+
2382
+ while (($file = readdir($dh)) !== false)
2383
+ {
2384
+ if (preg_match('/^gxs_[a-z0-9]+\.(xml|xml\.gz)$/i', $file))
2385
+ {
2386
+ @unlink($dir . $file);
2387
+ $deleted++;
2388
+ }
2389
+ }
2390
+
2391
+ closedir($dh);
2392
+ }
2393
+ }
2394
+
2395
+ return $deleted;
2396
+ }
2397
+
2398
+ /**
2399
+ * Flush sitemap cache inside admin area
2400
+ *
2401
+ * @since 1.3.0
2402
+ * @internal
2403
+ */
2404
+ public function handle_flush_action()
2405
+ {
2406
+ $deleted = $this->flush_cache();
2407
+
2408
+ if ($deleted !== false)
2409
+ {
2410
+ $message = $deleted > 0
2411
+ ? sprintf(
2412
+ __('<strong>%d</strong> cached sitemaps have '
2413
+ . 'been flushed successfully!', $this->domain),
2414
+ $deleted
2415
+ )
2416
+ : __('There are no cached sitemaps to flush.', $this->domain);
2417
+
2418
+ $this->add_notice_flash($message);
2419
+
2420
+ return true;
2421
+ }
2422
+ else
2423
+ {
2424
+ $this->add_error_flash(sprintf(
2425
+ __('Could not flush the cache, '
2426
+ . 'cache directory is either not found or is not writable. '
2427
+ . 'See <a href="%s" target="_blank">this FAQ entry</a> '
2428
+ . 'for a possible solution.', $this->domain),
2429
+ $this->plugin_url . 'faq/#flush-cache-error'
2430
+ ));
2431
+
2432
+ return false;
2433
+ }
2434
+ }
2435
+
2436
+ /**
2437
+ * @internal
2438
+ */
2439
+ public function handle_save_flush_action()
2440
+ {
2441
+ $this->current_option_page->submit_html_form();
2442
+ $this->add_notice_flash(__('All options have been saved.', $this->domain));
2443
+
2444
+ return $this->handle_flush_action();
2445
+ }
2446
+
2447
+ /**
2448
+ * Clear all sitemap logs including sitemap generation log and sitemap item log
2449
+ *
2450
+ * @since 1.4.0
2451
+ * @internal
2452
+ */
2453
+ public function handle_clear_log_action()
2454
+ {
2455
+ $this->_reset_logs();
2456
+
2457
+ $this->add_notice_flash(
2458
+ '<strong>' . __('Notice', $this->domain) . ':</strong> '
2459
+ . __('All logs have been cleared successfully!', $this->domain)
2460
+ );
2461
+ }
2462
+
2463
+ private function _handle_exclude_items($group, array $items_to_exclude, BWP_Sitemaps_Excluder $excluder)
2464
+ {
2465
+ // merge currently excluded items with new items to exclude
2466
+ $excluded_items = $excluder->get_excluded_items($group);
2467
+ $excluded_items = array_unique(array_merge($excluded_items, $items_to_exclude));
2468
+
2469
+ $excluder->update_excluded_items($group, $excluded_items);
2470
+
2471
+ $this->add_notice_flash(
2472
+ sprintf(__('Successfully excluded <strong>%d</strong> items.', $this->domain),
2473
+ count($items_to_exclude))
2474
+ );
2475
+ }
2476
+
2477
+ public function handle_exclude_posts()
2478
+ {
2479
+ if (! ($post_type = BWP_Framework_Util::get_request_var('select_exclude_post_type')))
2480
+ return;
2481
+
2482
+ if (! ($posts_to_exclude = BWP_Framework_Util::get_request_var('select-exclude-posts')))
2483
+ {
2484
+ $this->add_error_flash(__('Please select at least one item to exclude.', $this->domain));
2485
+ return;
2486
+ }
2487
+
2488
+ $this->_handle_exclude_items($post_type, (array) $posts_to_exclude, $this->post_excluder);
2489
+ }
2490
+
2491
+ public function handle_exclude_terms()
2492
+ {
2493
+ if (! ($taxonomy = BWP_Framework_Util::get_request_var('select_exclude_taxonomy')))
2494
+ return;
2495
+
2496
+ if (! ($terms_to_exclude = BWP_Framework_Util::get_request_var('select-exclude-terms')))
2497
+ {
2498
+ $this->add_error_flash(__('Please select at least one item to exclude.', $this->domain));
2499
+ return;
2500
+ }
2501
+
2502
+ $this->_handle_exclude_items($taxonomy, (array) $terms_to_exclude, $this->term_excluder);
2503
+ }
2504
+
2505
+ private static function _format_header_time($time)
2506
+ {
2507
+ return bwp_gxs_format_header_time($time);
2508
+ }
2509
+
2510
+ /**
2511
+ * Normalize path separator in different environments
2512
+ *
2513
+ * @access private
2514
+ */
2515
+ private function _normalize_path_separator($path = '')
2516
+ {
2517
+ return str_replace('\\', '/', $path);
2518
+ }
2519
+
2520
+ /**
2521
+ * Displays sitemap generation error with an error code
2522
+ *
2523
+ * @since 1.3.0
2524
+ * @access private
2525
+ */
2526
+ private function _die($message, $error_code)
2527
+ {
2528
+ wp_die(__('<strong>BWP Google XML Sitemaps Error:</strong> ', $this->domain)
2529
+ . $message, __('BWP Google XML Sitemaps Error', $this->domain),
2530
+ array('response' => $error_code)
2531
+ );
2532
+ }
2533
+
2534
+ public function commit_logs()
2535
+ {
2536
+ $this->bridge->update_option(BWP_GXS_LOG, array(
2537
+ 'messages' => $this->message_logger->get_log_item_data(),
2538
+ 'sitemaps' => $this->sitemap_logger->get_log_item_data()
2539
+ ));
2540
+ }
2541
+
2542
+ private function _log_message_item($message, $type, $time = null)
2543
+ {
2544
+ $time = $time ? $time : current_time('mysql', true);
2545
+
2546
+ $item = new BWP_Sitemaps_Logger_Message_LogItem($message, $type, $time);
2547
+ $item->set_datetimezone($this->get_current_timezone());
2548
+
2549
+ $this->message_logger->log($item);
2550
+ }
2551
+
2552
+ /**
2553
+ * Log a message when generating a sitemap
2554
+ *
2555
+ * @param string $message
2556
+ * @param string $type @since 1.4.0 before this is a boolean and optional
2557
+ */
2558
+ public function log_message($message, $type, $deprecated = null)
2559
+ {
2560
+ if (isset($sitemap))
2561
+ _deprecated_argument(__FUNCTION__, 'BWP Google XML Sitemaps 1.4.0');
2562
+
2563
+ // dont log anything if not allowed
2564
+ if ('yes' !== $this->options['enable_log'])
2565
+ return;
2566
+
2567
+ // dont log anything if message or type is empty
2568
+ if (empty($message) || empty($type))
2569
+ return;
2570
+
2571
+ $debug_message = $this->_debug_extra
2572
+ ? __('extra debugging was on', $this->domain)
2573
+ : __('debugging was on', $this->domain);
2574
+
2575
+ $debug = $this->_debug ? ' (' . $debug_message . ')' : '';
2576
+
2577
+ $this->_log_message_item($message . $debug, $type);
2578
+ }
2579
+
2580
+ public function elog($message, $die = false, $error_code = 404)
2581
+ {
2582
+ _deprecated_function(__FUNCTION__, 'BWP Google XML Sitemaps 1.4.0', 'BWP_Sitemaps::log_error');
2583
+
2584
+ $this->log_error($message, $die, $error_code);
2585
+ }
2586
+
2587
+ public function log_error($message, $die = false, $error_code = 404)
2588
+ {
2589
+ $this->log_message($message, BWP_Sitemaps_Logger_Message_LogItem::TYPE_ERROR);
2590
+
2591
+ if (true == $die)
2592
+ {
2593
+ $this->commit_logs();
2594
+ $this->_die($message, $error_code);
2595
+ }
2596
+ }
2597
+
2598
+ public function slog($message)
2599
+ {
2600
+ _deprecated_function(__FUNCTION__, 'BWP Google XML Sitemaps 1.4.0', 'BWP_Sitemaps::log_success');
2601
+
2602
+ $this->log_success($message);
2603
+ }
2604
+
2605
+ public function log_success($message)
2606
+ {
2607
+ $this->log_message($message, BWP_Sitemaps_Logger_Message_LogItem::TYPE_SUCCESS);
2608
+ }
2609
+
2610
+ public function nlog($message)
2611
+ {
2612
+ _deprecated_function(__FUNCTION__, 'BWP Google XML Sitemaps 1.4.0', 'BWP_Sitemaps::log_notice');
2613
+
2614
+ $this->log_notice($message);
2615
+ }
2616
+
2617
+ public function log_notice($message)
2618
+ {
2619
+ $this->log_message($message, BWP_Sitemaps_Logger_Message_LogItem::TYPE_NOTICE);
2620
+ }
2621
+
2622
+ public function smlog($url)
2623
+ {
2624
+ _deprecated_function(__FUNCTION__, 'BWP Google XML Sitemaps 1.4.0', 'BWP_Sitemaps::log_sitemap');
2625
+
2626
+ $this->log_sitemap($url);
2627
+ }
2628
+
2629
+ private function _log_sitemap_item($url, $time = null)
2630
+ {
2631
+ $time = $time ? $time : current_time('mysql', true);
2632
+
2633
+ $item = new BWP_Sitemaps_Logger_Sitemap_LogItem($url, $time);
2634
+ $item->set_datetimezone($this->get_current_timezone());
2635
+
2636
+ $this->sitemap_logger->log($item);
2637
+ }
2638
+
2639
+ public function log_sitemap($url)
2640
+ {
2641
+ $this->_log_sitemap_item($url);
2642
+ }
2643
+
2644
+ public function get_sitemap_logger()
2645
+ {
2646
+ return $this->sitemap_logger;
2647
+ }
2648
+
2649
+ public function do_robots($output, $public)
2650
+ {
2651
+ global $blog_id, $wpdb;
2652
+
2653
+ if ('0' == $public)
2654
+ return $output;
2655
+
2656
+ if (self::is_subdomain_install() || (isset($blog_id) && 1 == $blog_id))
2657
+ {
2658
+ $output .= "\n";
2659
+ $output .= 'Sitemap: ' . $this->get_sitemap_index_url();
2660
+ $output .= "\n";
2661
+ }
2662
+
2663
+ // add all other sitemapindex within the network into the primary
2664
+ // blog's robots.txt, including mapped domains
2665
+ if (self::is_multisite() && 'yes' == $this->options['enable_global_robots']
2666
+ && isset($blog_id) && 1 == $blog_id
2667
+ ) {
2668
+ $blogs = empty($wpdb->dmtable)
2669
+ ? $wpdb->get_results("
2670
+ SELECT *
2671
+ FROM $wpdb->blogs
2672
+ WHERE public = 1
2673
+ AND spam = 0
2674
+ AND deleted = 0")
2675
+ : $wpdb->get_results('
2676
+ SELECT
2677
+ wpdm.domain as mapped_domain,
2678
+ wpblogs.*
2679
+ FROM ' . $wpdb->blogs . ' wpblogs
2680
+ LEFT JOIN ' . $wpdb->dmtable . ' wpdm
2681
+ ON wpblogs.blog_id = wpdm.blog_id
2682
+ AND wpdm.active = 1
2683
+ WHERE wpblogs.public = 1
2684
+ AND wpblogs.spam = 0
2685
+ AND wpblogs.deleted = 0');
2686
+
2687
+ $num_sites = 0;
2688
+
2689
+ foreach ($blogs as $blog)
2690
+ {
2691
+ if (1 == $blog->blog_id)
2692
+ continue;
2693
+
2694
+ $scheme = is_ssl() ? 'https://' : 'http://';
2695
+ $path = rtrim($blog->path, '/');
2696
+
2697
+ // @since 1.3.0 allow mapped domains
2698
+ // @see https://support.google.com/webmasters/answer/75712?hl=en&ref_topic=4581190
2699
+ // @todo maybe we should use switch_blog here
2700
+ $blog_domain = empty($blog->mapped_domain)
2701
+ ? $blog->domain . $path
2702
+ : $blog->mapped_domain;
2703
+
2704
+ if (!empty($blog_domain))
2705
+ {
2706
+ $output .= 'Sitemap: ' . str_replace(home_url(),
2707
+ $scheme . $blog_domain,
2708
+ $this->get_sitemap_index_url()) . "\n";
2709
+
2710
+ $num_sites++;
2711
+ }
2712
+ }
2713
+
2714
+ if (!empty($num_sites))
2715
+ $output .= "\n";
2716
+ }
2717
+
2718
+ return $output;
2719
+ }
2720
+
2721
+ public function add_excluded_posts($excluded_items, $post_type, $flatten = false)
2722
+ {
2723
+ $excluded_items = array_merge(
2724
+ $excluded_items, $this->post_excluder->get_excluded_items($post_type, $flatten)
2725
+ );
2726
+
2727
+ return array_values(array_unique($excluded_items));
2728
+ }
2729
+
2730
+ public function add_excluded_terms($excluded_items, $taxonomy, $flatten = false)
2731
+ {
2732
+ $excluded_items = array_merge(
2733
+ $excluded_items, $this->term_excluder->get_excluded_items($taxonomy, $flatten)
2734
+ );
2735
+
2736
+ return array_values(array_unique($excluded_items));
2737
+ }
2738
+
2739
+ public function add_external_pages($pages)
2740
+ {
2741
+ $items = array();
2742
+
2743
+ foreach ($pages as $page)
2744
+ {
2745
+ // remove sample pages
2746
+ if (!empty($page['sample']))
2747
+ continue;
2748
+
2749
+ $items[] = $page;
2750
+ }
2751
+
2752
+ // no pages stored in db
2753
+ if (! $this->get_provider('external_page')->has_pages())
2754
+ return $items;
2755
+
2756
+ $db_pages = $this->get_provider('external_page')->get_pages_for_display();
2757
+
2758
+ foreach ($db_pages as $url => $page)
2759
+ {
2760
+ $items[] = array(
2761
+ 'location' => $url,
2762
+ 'lastmod' => $page['last_modified'],
2763
+ 'freq' => $page['frequency'],
2764
+ 'priority' => $page['priority']
2765
+ );
2766
+ }
2767
+
2768
+ return $items;
2769
+ }
2770
+
2771
+ public function add_post_title_like_query_variable($where, WP_Query $wp_query)
2772
+ {
2773
+ global $wpdb;
2774
+
2775
+ if ($post_title_like = $wp_query->get('bwp_post_title_like'))
2776
+ {
2777
+ $post_title_like = $wpdb->esc_like($post_title_like);
2778
+ $where .= " AND LOWER($wpdb->posts.post_title) LIKE '%" . $this->bridge->esc_sql($post_title_like) . "%'";
2779
+ }
2780
+
2781
+ return $where;
2782
+ }
2783
+
2784
+ /**
2785
+ * Redirect to correct domain
2786
+ *
2787
+ * This plugin generates sitemaps dynamically and exits before WordPress
2788
+ * does any canonical redirection. This function makes sure non-www domain
2789
+ * is redirected and vice versa.
2790
+ *
2791
+ * @since 1.0.1
2792
+ * @access private
2793
+ */
2794
+ private function _canonical_redirect($sitemap_name)
2795
+ {
2796
+ $requested_url = is_ssl() ? 'https://' : 'http://';
2797
+ $requested_url .= $_SERVER['HTTP_HOST'];
2798
+ $requested_url .= $_SERVER['REQUEST_URI'];
2799
+
2800
+ $original = @parse_url($requested_url);
2801
+ if (false === $original)
2802
+ return;
2803
+
2804
+ // www.example.com vs example.com
2805
+ $user_home = @parse_url(home_url());
2806
+ if (!empty($user_home['host']))
2807
+ $host = $user_home['host'];
2808
+ else
2809
+ return;
2810
+
2811
+ if (strtolower($original['host']) == strtolower($host)
2812
+ || (strtolower($original['host']) != 'www.' . strtolower($host)
2813
+ && 'www.' . strtolower($original['host']) != strtolower($host))
2814
+ ) {
2815
+ $host = $original['host'];
2816
+ }
2817
+ else
2818
+ {
2819
+ wp_redirect($this->get_sitemap_url($sitemap_name), 301);
2820
+ exit;
2821
+ }
2822
+ }
2823
+
2824
+ /**
2825
+ * Add sitemap modules or sub modules.
2826
+ *
2827
+ * This can be used to add custom sitemaps to the built-in sitemap index via
2828
+ * the `bwp_gxs_modules_built` action hook.
2829
+ *
2830
+ * @example hooks/action_bwp_gxs_modules_built.php 2
2831
+ *
2832
+ * @param string $module name of the parent module
2833
+ * @param string|null $sub_module name of the sub module
2834
+ */
2835
+ public function add_module($module, $sub_module = '')
2836
+ {
2837
+ // Make sure the names are well-formed
2838
+ $module = preg_replace('/[^a-z0-9-_\s]/ui', '', $module);
2839
+ $module = trim(str_replace(' ', '_', $module));
2840
+
2841
+ $sub_module = preg_replace('/[^a-z0-9-_\s]/ui', '', $sub_module);
2842
+ $sub_module = trim(str_replace(' ', '_', $sub_module));
2843
+
2844
+ if (empty($sub_module))
2845
+ {
2846
+ if (!isset($this->modules[$module]))
2847
+ {
2848
+ $this->modules[$module] = array();
2849
+ }
2850
+
2851
+ return;
2852
+ }
2853
+
2854
+ if (!isset($this->modules[$module])
2855
+ || !is_array($this->modules[$module])
2856
+ ) {
2857
+ $this->modules[$module] = array($sub_module);
2858
+ }
2859
+ else if (!in_array($sub_module, $this->modules[$module]))
2860
+ {
2861
+ $this->modules[$module][] = $sub_module;
2862
+ }
2863
+ }
2864
+
2865
+ /**
2866
+ * A convenient function to remove unwanted modules or sub modules
2867
+ *
2868
+ * This can be used to remove sitemaps from the built-in sitemap index via
2869
+ * the `bwp_gxs_modules_built` action hook.
2870
+ *
2871
+ * @example hooks/action_bwp_gxs_modules_built.php 2
2872
+ *
2873
+ * @param string $module name of the parent module
2874
+ * @param string|null $sub_module name of the sub module
2875
+ */
2876
+ public function remove_module($module, $sub_module = null)
2877
+ {
2878
+ // submodule specified but does not exist
2879
+ if (!isset($this->modules[$module]))
2880
+ return false;
2881
+
2882
+ if (empty($sub_module))
2883
+ {
2884
+ unset($this->modules[$module]);
2885
+ }
2886
+ else
2887
+ {
2888
+ $module = trim($module);
2889
+ $sub_module = trim($sub_module);
2890
+ $temp = $this->modules[$module];
2891
+
2892
+ foreach ($temp as $key => $subm)
2893
+ {
2894
+ if ($sub_module == $subm)
2895
+ {
2896
+ unset($this->modules[$module][$key]);
2897
+ break;
2898
+ }
2899
+ }
2900
+
2901
+ // @since 1.4.0 also remove the parent module if there's no
2902
+ // submodules left
2903
+ if (! $this->modules[$module])
2904
+ unset($this->modules[$module]);
2905
+ }
2906
+ }
2907
+
2908
+ /**
2909
+ * Builds a list of sitemap modules that can be generated
2910
+ *
2911
+ * @access private
2912
+ */
2913
+ private function _build_sitemap_modules()
2914
+ {
2915
+ $this->modules = array();
2916
+
2917
+ // site home URL sitemap - @since 1.1.5
2918
+ if ('yes' == $this->options['enable_sitemap_site'])
2919
+ $this->add_module('site');
2920
+
2921
+ // module exclusion list
2922
+ $excluded_post_types = explode(',', $this->options['input_exclude_post_type']);
2923
+ $excluded_taxonomies = explode(',', $this->options['input_exclude_taxonomy']);
2924
+
2925
+ // add public post types to module list
2926
+ $this->post_types = get_post_types(
2927
+ array('public' => true), 'objects'
2928
+ );
2929
+
2930
+ foreach ($this->post_types as $post_type)
2931
+ {
2932
+ // handle page separately
2933
+ if ($post_type->name == 'page')
2934
+ continue;
2935
+
2936
+ // post type is excluded
2937
+ if (in_array($post_type->name, $excluded_post_types))
2938
+ continue;
2939
+
2940
+ $this->add_module('post', $post_type->name);
2941
+ }
2942
+
2943
+ // google News module, @since 1.2.0
2944
+ if ('yes' == $this->options['enable_news_sitemap'])
2945
+ $this->add_module('post', 'google_news');
2946
+
2947
+ // add pages to module list
2948
+ if (!in_array('page', $excluded_post_types))
2949
+ $this->add_module('page', 'page');
2950
+
2951
+ // add archive pages to module list
2952
+ if ('yes' == $this->options['enable_sitemap_date'])
2953
+ {
2954
+ $this->add_module('archive', 'monthly');
2955
+ $this->add_module('archive', 'yearly');
2956
+ }
2957
+
2958
+ // add taxonomies to module list
2959
+ $this->taxonomies = get_taxonomies(array('public' => true), '');
2960
+ if ('yes' == $this->options['enable_sitemap_taxonomy'])
2961
+ {
2962
+ foreach ($this->taxonomies as $taxonomy)
2963
+ {
2964
+ if (!in_array($taxonomy->name, $excluded_taxonomies))
2965
+ $this->add_module('taxonomy', $taxonomy->name);
2966
+ }
2967
+ }
2968
+
2969
+ // remove some unnecessary sitemaps
2970
+ $this->remove_module('post', 'attachment');
2971
+ $this->remove_module('taxonomy', 'post_format');
2972
+ $this->remove_module('taxonomy', 'nav_menu');
2973
+
2974
+ // add/remove modules based on users' preferences
2975
+ if ('yes' == $this->options['enable_sitemap_author'])
2976
+ $this->add_module('author');
2977
+
2978
+ if ('yes' == $this->options['enable_sitemap_external'])
2979
+ $this->add_module('page', 'external');
2980
+
2981
+ /**
2982
+ * Fire after all default modules are defined.
2983
+ *
2984
+ * You can use this action hook to add or remove sitemap modules dynamically.
2985
+ *
2986
+ * For a complete example, see
2987
+ * http://betterwp.net/wordpress-plugins/google-xml-sitemaps/#modules-api
2988
+ *
2989
+ * @see BWP_Sitemaps::add_module() To add a sitemap module
2990
+ * @see BWP_Sitemaps::remove_module() To remove a sitemap module
2991
+ *
2992
+ * @example hooks/action_bwp_gxs_modules_built.php 2
2993
+ *
2994
+ * @param array $modules A list of default modules
2995
+ * @param array $post_types A list of public post types. This is the
2996
+ * output of https://codex.wordpress.org/Function_Reference/get_post_types
2997
+ * @param array $taxonomies A list of public taxonomies.
2998
+ */
2999
+ do_action('bwp_gxs_modules_built', $this->modules, $this->post_types, $this->taxonomies);
3000
+
3001
+ return $this->modules;
3002
+ }
3003
+
3004
+ private function _prepare_sitemap_modules()
3005
+ {
3006
+ $modules = $this->modules;
3007
+ $this->requested_modules = array();
3008
+
3009
+ foreach ($modules as $module => $sub_modules)
3010
+ {
3011
+ if (sizeof($sub_modules) == 0)
3012
+ {
3013
+ $this->requested_modules[] = array(
3014
+ 'module' => $module,
3015
+ 'sub_module' => '',
3016
+ 'module_name' => $module
3017
+ );
3018
+
3019
+ continue;
3020
+ }
3021
+
3022
+ foreach ($sub_modules as $sub_module)
3023
+ {
3024
+ $module_name = $module . '_' . $sub_module;
3025
+
3026
+ if (isset($this->post_types[$sub_module]))
3027
+ {
3028
+ // this is a post type module
3029
+ if ('post' == $sub_module || 'page' == $sub_module || 'attachment' == $sub_module)
3030
+ $module_name = $module;
3031
+ }
3032
+ else if ('google_news' == $sub_module)
3033
+ {
3034
+ // this is the google news sitemap module
3035
+ }
3036
+ else if ('yes' == $this->options['enable_sitemap_taxonomy']
3037
+ && isset($this->taxonomies[$sub_module])
3038
+ ) {
3039
+ // this is a taxonomy sitemap module
3040
+ }
3041
+ else if (!empty($sub_module))
3042
+ {
3043
+ // any sitemap module that has a sub-module
3044
+ }
3045
+
3046
+ $this->requested_modules[] = array(
3047
+ 'module' => $module,
3048
+ 'sub_module' => $sub_module,
3049
+ 'module_name' => $module_name
3050
+ );
3051
+ }
3052
+ }
3053
+ }
3054
+
3055
+ /**
3056
+ * Gets module label to display in friendly log message
3057
+ *
3058
+ * This function needs updating whenever a new sitemap type (new module) is
3059
+ * registered.
3060
+ *
3061
+ * @since 1.3.0
3062
+ * @access private
3063
+ */
3064
+ private function _get_module_label($module, $sub_module)
3065
+ {
3066
+ if ($module == 'post')
3067
+ {
3068
+ if ($sub_module == 'google_news')
3069
+ {
3070
+ if (!empty($this->options['input_news_age']))
3071
+ {
3072
+ return sprintf(
3073
+ __('news posts that are published within the last <strong>%d day(s)</strong>. '
3074
+ . 'To include news posts within a longer time period, '
3075
+ . 'change the "News age" setting via '
3076
+ . 'BWP Sitemaps >> Extensions >> Google News Sitemap >> Sitemap Contents', $this->domain),
3077
+ (int) $this->options['input_news_age']
3078
+ );
3079
+ }
3080
+ else
3081
+ {
3082
+ return __('Google News posts', $this->domain);
3083
+ }
3084
+ }
3085
+
3086
+ if (empty($sub_module))
3087
+ return __('Post');
3088
+
3089
+ return $this->post_types[$sub_module]->labels->singular_name;
3090
+ }
3091
+ elseif ($module == 'page')
3092
+ {
3093
+ if ($sub_module == 'external')
3094
+ return __('External page', $this->domain);
3095
+
3096
+ return __('Page');
3097
+ }
3098
+ elseif ($module == 'taxonomy')
3099
+ {
3100
+ return $this->taxonomies[$sub_module]->labels->singular_name;
3101
+ }
3102
+ elseif ($module == 'archive')
3103
+ {
3104
+ return __('Date archive', $this->domain);
3105
+ }
3106
+ elseif ($module == 'author')
3107
+ {
3108
+ return __('Author archive', $this->domain);
3109
+ }
3110
+
3111
+ return false;
3112
+ }
3113
+
3114
+ private static function _get_modules_from_query_var($module)
3115
+ {
3116
+ preg_match('/([a-z0-9]+)_([a-z0-9_-]+)$/iu', $module, $matches);
3117
+
3118
+ if (0 == sizeof($matches))
3119
+ return false;
3120
+ else
3121
+ return $matches;
3122
+ }
3123
+
3124
+ /**
3125
+ * Serves sitemap when needed using correct sitemap module
3126
+ *
3127
+ * @access public
3128
+ */
3129
+ public function request_sitemap($wp_query)
3130
+ {
3131
+ if (isset($wp_query->query_vars['gxs_module']))
3132
+ {
3133
+ // friendly sitemap url is used
3134
+ // sitemap module and sub-module are separated into two different
3135
+ // query variables
3136
+ $module = $wp_query->query_vars['gxs_module'];
3137
+ $sub_module = isset($wp_query->query_vars['gxs_sub_module'])
3138
+ ? $wp_query->query_vars['gxs_sub_module'] : '';
3139
+
3140
+ if (!empty($module))
3141
+ $this->_load_sitemap_module($module, $sub_module);
3142
+ }
3143
+ else if (isset($wp_query->query_vars[$this->_get_non_permalink_query_var()]))
3144
+ {
3145
+ // non-friendly sitemap url is used, i.e. http://example.com/?bwpsitemap=xxx
3146
+ $sitemap_name = $wp_query->query_vars[$this->_get_non_permalink_query_var()];
3147
+ $modules = self::_get_modules_from_query_var($sitemap_name);
3148
+
3149
+ if ($modules && is_array($modules))
3150
+ $this->_load_sitemap_module($modules[1], $modules[2]);
3151
+ else
3152
+ $this->_load_sitemap_module($sitemap_name);
3153
+ }
3154
+ }
3155
+
3156
+ /**
3157
+ * Checks whether requested sitemap is a BWP sitemap
3158
+ *
3159
+ * @since 1.3.0
3160
+ * @access private
3161
+ */
3162
+ private static function _is_bwp_sitemap($sitemap_name)
3163
+ {
3164
+ $third_party_sitemaps = array(
3165
+ 'sitemap_index',
3166
+ 'post_tag-sitemap'
3167
+ );
3168
+
3169
+ if (in_array($sitemap_name, $third_party_sitemaps))
3170
+ return false;
3171
+
3172
+ return true;
3173
+ }
3174
+
3175
+ /**
3176
+ * Inits building some sitemap generation stats
3177
+ *
3178
+ * @since 1.3.0
3179
+ * @access private
3180
+ */
3181
+ private function _init_stats()
3182
+ {
3183
+ // track sitemap generation time
3184
+ timer_start();
3185
+
3186
+ // number of queries used to generate a sitemap
3187
+ $this->build_stats['query'] = get_num_queries();
3188
+ }
3189
+
3190
+ /**
3191
+ * Inits the sitemap generation process
3192
+ *
3193
+ * @since 1.3.0
3194
+ * @access private
3195
+ */
3196
+ private function _init_sitemap_generation()
3197
+ {
3198
+ if (!$this->_debug)
3199
+ {
3200
+ // don't let error reporting messes up sitemap generation when
3201
+ // debug is off
3202
+ error_reporting(0);
3203
+ }
3204
+
3205
+ $this->_init_stats();
3206
+
3207
+ // don't let other instrusive plugins mess up our permalnks - @since 1.1.4
3208
+ remove_filter('post_link', 'syndication_permalink', 1, 3);
3209
+ remove_filter('page_link', 'suffusion_unlink_page', 10, 2);
3210
+ }
3211
+
3212
+ private function _load_sitemap_from_cache($module_name, $sitemap_name)
3213
+ {
3214
+ // cache is not enabled or debug is enabled
3215
+ if ('yes' != $this->options['enable_cache'] || $this->_debug)
3216
+ {
3217
+ return false;
3218
+ }
3219
+
3220
+ $cache_status = $this->sitemap_cache->get_cache_status($module_name, $sitemap_name);
3221
+
3222
+ // cache is invalid
3223
+ if (!$cache_status)
3224
+ {
3225
+ return false;
3226
+ }
3227
+ elseif (!empty($_GET['generate']) && current_user_can('manage_options'))
3228
+ {
3229
+ // @since 1.4.0 admin is regenerating the sitemap, no cache should
3230
+ // be used, even when cache status is valid. We need to do this
3231
+ // here because we want to regenerate the sitemap, which requires
3232
+ // the cache file, but it is only determined after running
3233
+ // BWP_GXS_CACHE::get_cache_status(). This should be fixed in
3234
+ // future versions.
3235
+ return false;
3236
+ }
3237
+ elseif ($cache_status == '304')
3238
+ {
3239
+ // http cache can be used, we don't need to output anything except
3240
+ // for some headers
3241
+ // @link http://edn.embarcadero.com/article/38123
3242
+ $this->_send_headers(array_merge(
3243
+ array('status' => 304), $this->sitemap_cache->get_headers()
3244
+ ));
3245
+ }
3246
+ elseif ($cache_status == '200')
3247
+ {
3248
+ // file cache is ok, output the cached sitemap
3249
+ $this->_send_headers($this->sitemap_cache->get_headers());
3250
+
3251
+ $cache_file = $this->sitemap_cache->get_cache_file();
3252
+
3253
+ // when server or script is not already gzipping, and gzip is
3254
+ // allowed, we simply read the cached file without any additional
3255
+ // compression because cached sitemap files are stored as gzipped
3256
+ // files.
3257
+ if ($this->_is_gzip_ok() && !self::is_gzipped())
3258
+ {
3259
+ readfile($cache_file);
3260
+ }
3261
+ else
3262
+ {
3263
+ // if we can't use a gzipped file, decompress before reading it
3264
+ readgzfile($cache_file);
3265
+ }
3266
+ }
3267
+
3268
+ if (in_array($cache_status, array('200', '304')))
3269
+ {
3270
+ $this->log_success(sprintf(
3271
+ __('Successfully served a cached version of <em>%s.xml</em>.', $this->domain)
3272
+ , $sitemap_name));
3273
+
3274
+ $this->commit_logs();
3275
+
3276
+ return true;
3277
+ }
3278
+ }
3279
+
3280
+ /**
3281
+ * Puts the current sitemap output in cache
3282
+ *
3283
+ * @return bool|string bool cache file could not be written or read
3284
+ * string cache file's modification timestamp
3285
+ * @since 1.3.0
3286
+ * @access private
3287
+ */
3288
+ private function _cache_sitemap()
3289
+ {
3290
+ // no sitemap to cache
3291
+ if (! $this->sitemap)
3292
+ return false;
3293
+
3294
+ // cache is not enabled or debug is enabled
3295
+ if ('yes' != $this->options['enable_cache'] || $this->_debug)
3296
+ {
3297
+ return false;
3298
+ }
3299
+
3300
+ $cache_directory = $this->get_cache_directory();
3301
+
3302
+ if (!@is_writable($cache_directory))
3303
+ {
3304
+ $this->log_error(sprintf(
3305
+ __('Cache directory <strong>%s</strong> is not writable, '
3306
+ . 'no cache file was created.' , $this->domain),
3307
+ $cache_directory
3308
+ ));
3309
+
3310
+ return false;
3311
+ }
3312
+
3313
+ $lastmod = $this->sitemap_cache->write_cache($this->sitemap->get_xml());
3314
+
3315
+ if (!$lastmod)
3316
+ {
3317
+ $this->log_error(sprintf(
3318
+ __('Could not write sitemap file to cache directory <strong>%s</strong>' , $this->domain),
3319
+ $cache_directory));
3320
+
3321
+ return false;
3322
+ }
3323
+
3324
+ return $lastmod;
3325
+ }
3326
+
3327
+ /**
3328
+ * Gets correct module file to generate a sitemap
3329
+ *
3330
+ * @access private
3331
+ */
3332
+ private function _get_module_file($module_name, $sitemap_name, $is_submodule = false)
3333
+ {
3334
+ $module_dir = trailingslashit($this->module_directory);
3335
+ $custom_module_dir = $this->custom_module_directory
3336
+ ? trailingslashit($this->custom_module_directory)
3337
+ : '';
3338
+
3339
+ $module_file = ''; // path to module file
3340
+ $module_filename = $module_name . '.php'; // filename of the module
3341
+
3342
+ if (!empty($custom_module_dir)
3343
+ && @file_exists($custom_module_dir . $module_filename)
3344
+ ) {
3345
+ // a module file exists at custom module directory
3346
+ $module_file = $custom_module_dir . $module_filename;
3347
+
3348
+ $this->log_notice(sprintf(
3349
+ __('<em>%s.xml</em> will be served using module file <em>%s</em> '
3350
+ . 'in the custom module directory.', $this->domain)
3351
+ , $sitemap_name, $module_filename));
3352
+
3353
+ $this->_is_using_custom_module = true;
3354
+ }
3355
+ else if (@file_exists($module_dir . $module_filename))
3356
+ {
3357
+ // use module at default module directory
3358
+ $module_file = $module_dir . $module_filename;
3359
+ }
3360
+ else
3361
+ {
3362
+ if ($is_submodule)
3363
+ {
3364
+ // sub-module file is missing, use parent module file instead
3365
+ $this->log_notice(sprintf(
3366
+ __('<em>%s.xml</em> will be served using module file <em>%s</em>.', $this->domain)
3367
+ , $sitemap_name, preg_replace('/_.*(\.[a-z]+)/ui', '$1', $module_filename)));
3368
+ }
3369
+ else
3370
+ {
3371
+ // no module available, log an error
3372
+ $error_log = sprintf(
3373
+ __('<strong>%s</strong> can not be served because of '
3374
+ . 'a missing module file: <strong>%s</strong>.', $this->domain)
3375
+ , $sitemap_name, $module_filename);
3376
+
3377
+ // issue a WP die with a 500 internal server error response code
3378
+ $this->log_error($error_log, true, 500);
3379
+ }
3380
+ }
3381
+
3382
+ return $module_file;
3383
+ }
3384
+
3385
+ /**
3386
+ * @param BWP_GXS_MODULE $module
3387
+ * @return BWP_Sitemaps_Sitemap
3388
+ */
3389
+ private function create_sitemap_from_module(BWP_GXS_MODULE $module)
3390
+ {
3391
+ $sitemap_provider = new BWP_Sitemaps_Sitemap_Provider($this, $module);
3392
+ $sanitizer_factory = new BWP_Sitemaps_Sitemap_Sanitizer_Factory($this);
3393
+ $sitemap_xsl = null;
3394
+
3395
+ switch ($module->get_type())
3396
+ {
3397
+ case 'url':
3398
+ $sitemap_class = 'BWP_Sitemaps_Sitemap_Xml';
3399
+ $sitemap_xsl = $this->xslt;
3400
+ break;
3401
+
3402
+ case 'news':
3403
+ $sitemap_class = 'BWP_Sitemaps_Sitemap_XmlGoogleNews';
3404
+ break;
3405
+
3406
+ case 'index':
3407
+ $sitemap_class = 'BWP_Sitemaps_Sitemap_XmlIndex';
3408
+ $sitemap_xsl = $this->xslt_index;
3409
+ break;
3410
+ }
3411
+
3412
+ return new $sitemap_class(
3413
+ $sitemap_provider, $sanitizer_factory, $sitemap_xsl
3414
+ );
3415
+ }
3416
+
3417
+ /**
3418
+ * Locates correct sitemap module to serve requested sitemap
3419
+ *
3420
+ * @access private
3421
+ */
3422
+ private function _load_sitemap_module($module, $sub_module = '')
3423
+ {
3424
+ $success = false; // can we successfully serve the sitemap?
3425
+ $module_found = false; // do we have a sitemap module as requested
3426
+
3427
+ $module = stripslashes($module);
3428
+ $sub_module = stripslashes($sub_module);
3429
+ $part = 0;
3430
+ $module_name = ''; // the final module name used to generate requested sitemap
3431
+
3432
+ // a full sitemap name consists of a module and a sub-module including
3433
+ // any split part (`_part1`, `_part2`, etc.) if any
3434
+ $sitemap_name = !empty($sub_module) ? $module . '_' . $sub_module : $module;
3435
+
3436
+ if (!self::_is_bwp_sitemap($sitemap_name))
3437
+ {
3438
+ // not a BWP sitemap, return this handle to WordPress
3439
+ return false;
3440
+ }
3441
+
3442
+ // make sure we're on the canonical domain to avoid styling issue
3443
+ $this->_canonical_redirect($sitemap_name);
3444
+
3445
+ if ('yes' == $this->options['enable_sitemap_split_post']
3446
+ && (preg_match('/_part([0-9]+)$/i', $sub_module, $matches)
3447
+ || preg_match('/part([0-9]+)$/i', $sub_module, $matches))
3448
+ ) {
3449
+ // Check whether or not splitting is enabled and the sub_module has a
3450
+ // 'part' part, if so we strip the part from sub-module name
3451
+ $sub_module = str_replace($matches[0], '', $sub_module);
3452
+
3453
+ // save the requested part for later use
3454
+ $part = (int) $matches[1];
3455
+ }
3456
+
3457
+ $modules = $this->_build_sitemap_modules();
3458
+
3459
+ if ('sitemapindex' != $sitemap_name && isset($modules[$module]))
3460
+ {
3461
+ // the currently requested sitemap is not the sitemapindex, and a
3462
+ // sitemap module is available
3463
+ $module_found = true;
3464
+
3465
+ if (!empty($sub_module))
3466
+ {
3467
+ // a sub-module is being requested, and found
3468
+ if (in_array($sub_module, $modules[$module]))
3469
+ $module_name = $module . '_' . $sub_module;
3470
+ else
3471
+ $module_found = false;
3472
+ }
3473
+ else
3474
+ {
3475
+ $module_name = $module;
3476
+ }
3477
+ }
3478
+ else if ('sitemapindex' == $sitemap_name)
3479
+ {
3480
+ // this is the sitemapindex, use sitemapindex sitemap module
3481
+ $module_found = true;
3482
+ $module_name = 'sitemapindex';
3483
+ }
3484
+
3485
+ if (!$module_found)
3486
+ {
3487
+ // no module is available to handle requested sitemap
3488
+ $message = sprintf(
3489
+ __('Requested sitemap (<em>%s.xml</em>) '
3490
+ . 'was not found or not enabled.', $this->domain),
3491
+ $sitemap_name
3492
+ );
3493
+
3494
+ // @since 1.3.0 log a notice instead of an error
3495
+ $this->log_notice($message);
3496
+ $this->commit_logs();
3497
+
3498
+ // @since 1.3.0 return this handle to WordPress
3499
+ return false;
3500
+ }
3501
+
3502
+ $this->_init_sitemap_generation();
3503
+
3504
+ if ($this->_load_sitemap_from_cache($module_name, $sitemap_name))
3505
+ {
3506
+ // if sitemap can be loaded from cache, no need to do anything else
3507
+ exit;
3508
+ }
3509
+
3510
+ // global module data for later use
3511
+ $this->module_data = array(
3512
+ 'module' => $module,
3513
+ 'sub_module' => $sub_module,
3514
+ 'module_key' => $module_name, // leave this for back-compat
3515
+ 'module_name' => $module_name, // @since 1.3.0 this is the same as module_key
3516
+ 'module_part' => $part, // leave this for back-compat
3517
+ 'part' => $part,
3518
+ 'sitemap_name' => $sitemap_name // @since 1.3.0 this is the actual sitemap name
3519
+ );
3520
+
3521
+ if ('sitemapindex' != $sitemap_name)
3522
+ {
3523
+ // generating a regular sitemap
3524
+ $module_file = ''; // path to module file
3525
+
3526
+ if (!empty($sub_module))
3527
+ {
3528
+ // try generating the sitemap using a sub-module
3529
+ if (!empty($this->module_map[$sub_module]))
3530
+ {
3531
+ // this module is mapped to use another module, no need to
3532
+ // update global module data
3533
+ $module_name = $module . '_' . $this->module_map[$sub_module];
3534
+ }
3535
+
3536
+ $module_file = $this->_get_module_file($module_name, $sitemap_name, true);
3537
+ }
3538
+
3539
+ if (empty($module_file))
3540
+ {
3541
+ // try again with parent module, no need to update global module data
3542
+ $module_name = $module;
3543
+ $module_file = $this->_get_module_file($module_name, $sitemap_name);
3544
+ }
3545
+
3546
+ if (empty($module_file))
3547
+ {
3548
+ // no luck, let WordPress handles this page
3549
+ // reach here if gxs debug is off
3550
+ return false;
3551
+ }
3552
+
3553
+ include_once $module_file;
3554
+
3555
+ $class_name = 'BWP_GXS_MODULE_' . str_replace('-', '_', $module_name);
3556
+
3557
+ if (class_exists($class_name))
3558
+ {
3559
+ $module_object = new $class_name();
3560
+
3561
+ $module_object->set_module_data($this->module_data);
3562
+ $module_object->set_current_time();
3563
+ $module_object->build_sitemap_data();
3564
+
3565
+ $this->sitemap = $this->create_sitemap_from_module($module_object);
3566
+ }
3567
+ }
3568
+ else if ('sitemapindex' == $sitemap_name)
3569
+ {
3570
+ $module_file = $this->_get_module_file($module_name, $sitemap_name);
3571
+
3572
+ include_once $module_file;
3573
+
3574
+ $class_name = 'BWP_GXS_MODULE_INDEX';
3575
+
3576
+ if (class_exists($class_name))
3577
+ {
3578
+ $this->_prepare_sitemap_modules(); // this should fill $this->requested_modules
3579
+
3580
+ $module_object = new $class_name($this->requested_modules);
3581
+
3582
+ $module_object->set_module_data($this->module_data);
3583
+ $module_object->set_current_time();
3584
+ $module_object->build_sitemap_data();
3585
+
3586
+ $this->sitemap = $this->create_sitemap_from_module($module_object);
3587
+ }
3588
+ }
3589
+
3590
+ $module_filename = $module_name . '.php';
3591
+
3592
+ // no sitemap was created, this is due to a missing module
3593
+ // should issue a WP DIE with 500 internal server error response code
3594
+ if (! $this->sitemap)
3595
+ {
3596
+ $this->log_error(
3597
+ sprintf(__('There is no class named <strong>%s</strong> '
3598
+ . 'in the module file <strong>%s</strong>.', $this->domain),
3599
+ $class_name,
3600
+ $module_filename),
3601
+ true, 500
3602
+ );
3603
+ }
3604
+
3605
+ if ($this->sitemap->has_items())
3606
+ {
3607
+ // append sitemap stats
3608
+ $this->sitemap
3609
+ ->append("\n\n" . $this->_get_credit())
3610
+ ->append("\n\n" . $this->_get_sitemap_stats());
3611
+
3612
+ $lastmod = $this->_cache_sitemap();
3613
+ $lastmod = $lastmod ? $lastmod : time();
3614
+ $expires = self::_format_header_time($lastmod + $this->cache_time);
3615
+
3616
+ // send proper headers
3617
+ $this->_send_headers(array(
3618
+ 'lastmod' => self::_format_header_time($lastmod),
3619
+ 'expires' => $expires,
3620
+ 'etag' => md5($expires . bwp_gxs_get_filename($sitemap_name))
3621
+ ));
3622
+
3623
+ // display the requested sitemap
3624
+ $this->_display_sitemap();
3625
+
3626
+ $success_message = $this->_is_using_custom_module
3627
+ ? __('Successfully generated <em>%s.xml</em> using custom module file <em>%s</em>.', $this->domain)
3628
+ : __('Successfully generated <em>%s.xml</em> using module file <em>%s</em>.', $this->domain);
3629
+
3630
+ $this->log_success(sprintf($success_message, $sitemap_name, $module_filename));
3631
+ $this->log_sitemap($sitemap_name);
3632
+ $this->commit_logs();
3633
+
3634
+ exit;
3635
+ }
3636
+ else
3637
+ {
3638
+ // if output is empty we log it so the user knows what's going on,
3639
+ // and should die accordingly
3640
+ $error_message = sprintf(
3641
+ __('<em>%s.xml</em> does not have any item.', $this->domain),
3642
+ $this->module_data['sitemap_name']
3643
+ );
3644
+
3645
+ $module_label = $this->_get_module_label($this->module_data['module'], $this->module_data['sub_module']);
3646
+ $module_guide = 'google_news' != $this->module_data['sub_module']
3647
+ ? __('Enable/disable sitemaps via <em>BWP Sitemaps >> XML Sitemaps</em>.', $this->domain)
3648
+ : '';
3649
+
3650
+ $error_message_module = $module_label
3651
+ ? ' ' . sprintf(
3652
+ __('There are no public <em>%s</em>.', $this->domain)
3653
+ . " $module_guide",
3654
+ $module_label)
3655
+ : ' ' . $module_guide;
3656
+
3657
+ $error_message_admin = $this->module_data['sitemap_name'] == 'sitemapindex'
3658
+ ? ' ' . __('Please make sure that you have at least one sitemap enabled '
3659
+ . 'in <em>BWP Sitemaps >> XML Sitemaps >> Sitemaps to generate</em>.', $this->domain)
3660
+ : $error_message_module;
3661
+
3662
+ // issue a WP DIE with 404 not found response code
3663
+ // this is equivalent to calling "exit"
3664
+ $this->log_error($error_message . $error_message_admin, true, 404);
3665
+ }
3666
+ }
3667
+
3668
+ private function _send_headers($headers = array())
3669
+ {
3670
+ if (headers_sent($filename, $linenum))
3671
+ {
3672
+ // @since 1.3.0 if headers have already been sent, we can't send
3673
+ // these headers anymore so stop here but log an error
3674
+ $this->log_error(sprintf(
3675
+ __('<em>%s.xml</em> was successfully generated but '
3676
+ . 'could not be served properly because some '
3677
+ . 'headers have already been sent '
3678
+ . '(something was printed on line <strong>%s</strong> '
3679
+ . 'in file <strong>%s</strong>).', $this->domain),
3680
+ $this->module_data['sitemap_name'],
3681
+ $linenum,
3682
+ $filename
3683
+ ));
3684
+
3685
+ return false;
3686
+ }
3687
+
3688
+ if ($this->_debug_extra)
3689
+ {
3690
+ // @since 1.3.0 when debug extra is turned on no headers should
3691
+ // be sent. Sitemap will be displayed as raw text output to avoid
3692
+ // Content Encoding Error. The raw text output can then be used to
3693
+ // find the cause of the encoding error.
3694
+ return false;
3695
+ }
3696
+
3697
+ $content_types = array(
3698
+ 'google' => 'text/xml',
3699
+ 'yahoo' => 'text/plain'
3700
+ );
3701
+
3702
+ $default_headers = array(
3703
+ 'status' => 200,
3704
+ 'vary' => 'Accept-Encoding'
3705
+ );
3706
+
3707
+ $headers = wp_parse_args($headers, $default_headers);
3708
+
3709
+ if ($this->_debug || $this->options['enable_cache'] != 'yes')
3710
+ {
3711
+ // if debug is on, or caching is not enabled, send no cache headers
3712
+ nocache_headers();
3713
+ }
3714
+ else
3715
+ {
3716
+ // otherwise send proper cache headers
3717
+ header('Cache-Control: max-age=' . (int) $this->cache_time);
3718
+ header('Expires: ' . $headers['expires']);
3719
+
3720
+ if (!empty($headers['etag']))
3721
+ header('Etag: ' . $headers['etag']);
3722
+ }
3723
+
3724
+ // some headers are only needed when sending a 200 OK response
3725
+ if ($headers['status'] == 200)
3726
+ {
3727
+ // only send a last modified header if debug is NOT on, and caching
3728
+ // is enabled
3729
+ if (!$this->_debug && $this->options['enable_cache'] == 'yes')
3730
+ header('Last-Modified: ' . $headers['lastmod']);
3731
+
3732
+ header('Accept-Ranges: bytes');
3733
+ header('Content-Type: ' . $content_types['google'] . '; charset=UTF-8');
3734
+
3735
+ if ($this->_is_gzip_ok())
3736
+ header('Content-Encoding: ' . self::_get_gzip_type());
3737
+ }
3738
+
3739
+ header('Vary: ' . $headers['vary']);
3740
+
3741
+ // @since 1.4.0 add a noindex header to prevent sitemaps from being
3742
+ // indexed by search engines (Google supports this fully)
3743
+ // @link https://developers.google.com/webmasters/control-crawl-index/docs/robots_meta_tag?hl=en#using-the-x-robots-tag-http-header
3744
+ header('X-Robots-Tag: noindex');
3745
+
3746
+ status_header($headers['status']);
3747
+
3748
+ return true;
3749
+ }
3750
+
3751
+ private function _get_credit()
3752
+ {
3753
+ if ('yes' != $this->options['enable_credit']) {
3754
+ return null;
3755
+ }
3756
+
3757
+ return sprintf($this->templates['credit'], $this->get_version(), date('Y'), $this->plugin_url);
3758
+ }
3759
+
3760
+ /**
3761
+ * Get sitemap stats to append to a sitemap's output
3762
+ */
3763
+ private function _get_sitemap_stats()
3764
+ {
3765
+ // stats not enabled or there's no sitemap
3766
+ if ('yes' != $this->options['enable_stats'] || ! $this->sitemap)
3767
+ return null;
3768
+
3769
+ $time = timer_stop(0, 3);
3770
+ $sql = get_num_queries() - $this->build_stats['query'];
3771
+ $memory = size_format(memory_get_usage() - $this->build_stats['mem'], 2);
3772
+
3773
+ return sprintf($this->templates['stats'], $time, $memory, $sql, $this->sitemap->get_item_count());
3774
+ }
3775
+
3776
+ private function _display_sitemap()
3777
+ {
3778
+ // no sitemap to display
3779
+ if (! $this->sitemap)
3780
+ return;
3781
+
3782
+ $xml = $this->sitemap->get_xml();
3783
+
3784
+ // compress the output using gzip if needed, but only if no active
3785
+ // compressor is active
3786
+ if ($this->_is_gzip_ok() && !self::is_gzipped())
3787
+ echo gzencode($xml, 6);
3788
+ else
3789
+ echo $xml;
3790
+ }
3791
+
3792
+ public static function is_gzipped()
3793
+ {
3794
+ if (ini_get('zlib.output_compression')
3795
+ || ini_get('output_handler') == 'ob_gzhandler'
3796
+ || in_array('ob_gzhandler', @ob_list_handlers()))
3797
+ {
3798
+ return true;
3799
+ }
3800
+
3801
+ return false;
3802
+ }
3803
+
3804
+ private function _is_gzip_ok()
3805
+ {
3806
+ if ($this->options['enable_gzip'] != 'yes')
3807
+ return false;
3808
+
3809
+ if (headers_sent() || $this->_debug_extra)
3810
+ // headers sent or debug extra is on, which means we could not send
3811
+ // the encoding header, so gzip is not allowed
3812
+ return false;
3813
+
3814
+ if (!empty($_SERVER['HTTP_ACCEPT_ENCODING'])
3815
+ && (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false
3816
+ || strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'x-gzip') !== false)
3817
+ ) {
3818
+ return true;
3819
+ }
3820
+ else
3821
+ {
3822
+ return false;
3823
+ }
3824
+ }
3825
+
3826
+ private static function _get_gzip_type()
3827
+ {
3828
+ if (strpos($_SERVER['HTTP_ACCEPT_ENCODING'],'gzip') !== false)
3829
+ return 'gzip';
3830
+ else if (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'x-gzip') !== false)
3831
+ return 'x-gzip';
3832
+
3833
+ return 'gzip';
3834
+ }
3835
+
3836
+ private function _is_post_pingable($post)
3837
+ {
3838
+ $post_types = $this->bridge->get_post_types(array('public' => true));
3839
+
3840
+ if (!in_array($post->post_type, $post_types))
3841
+ {
3842
+ // not a public post type, no pinging
3843
+ return false;
3844
+ }
3845
+
3846
+ if (!empty($post->post_password))
3847
+ {
3848
+ // password-protected post, no pinging
3849
+ return false;
3850
+ }
3851
+
3852
+ $excluded_post_types = explode(',', $this->options['input_exclude_post_type']);
3853
+
3854
+ if (in_array($post->post_type, $excluded_post_types))
3855
+ {
3856
+ // sitemap for this post type is not enabled, no pinging
3857
+ return false;
3858
+ }
3859
+
3860
+ $excluded_post_types_from_ping = explode(',', $this->options['input_exclude_post_type_ping']);
3861
+
3862
+ if (in_array($post->post_type, $excluded_post_types_from_ping))
3863
+ {
3864
+ // pinging for this post type is disabled explicitly
3865
+ return false;
3866
+ }
3867
+
3868
+ // otherwise pinging is allowed
3869
+ return true;
3870
+ }
3871
+
3872
+ public function ping_google_news($post)
3873
+ {
3874
+ if (empty($post->ID))
3875
+ return;
3876
+
3877
+ // only carry out the ping if this post is in a news category
3878
+ $is_news = 'inc' == $this->options['select_news_cat_action'] ? false : true;
3879
+ $news_cats = explode(',', $this->options['select_news_cats']);
3880
+ $categories = $this->bridge->get_the_category($post->ID);
3881
+
3882
+ foreach ($categories as $cat)
3883
+ {
3884
+ if (in_array($cat->term_id, $news_cats))
3885
+ {
3886
+ $is_news = 'inc' == $this->options['select_news_cat_action']
3887
+ ? true : false;
3888
+
3889
+ break;
3890
+ }
3891
+ }
3892
+
3893
+ if ($is_news)
3894
+ {
3895
+ $this->_ping_sitemap = 'post_google_news';
3896
+ $this->ping($post);
3897
+ }
3898
+ }
3899
+
3900
+ public function ping($post)
3901
+ {
3902
+ $time = $this->bridge->current_time('timestamp');
3903
+ $ping_data = $this->bridge->get_option(BWP_GXS_PING);
3904
+
3905
+ if (!$ping_data || !is_array($ping_data)
3906
+ || isset($ping_data['data_pinged']['yahoo'])
3907
+ || isset($ping_data['data_pinged']['ask'])
3908
+ ) {
3909
+ // remove old data from yahoo and ask, to be removed in 1.4.0
3910
+ $ping_data = array(
3911
+ 'data_pinged' => array('google' => 0, 'bing' => 0),
3912
+ 'data_last_pinged' => array('google' => 0, 'bing' => 0)
3913
+ );
3914
+ }
3915
+
3916
+ if (!$this->_is_post_pingable($post))
3917
+ {
3918
+ // this post is not suitable for pinging
3919
+ return false;
3920
+ }
3921
+
3922
+ foreach ($this->_ping_urls as $key => $service)
3923
+ {
3924
+ if ('yes' == $this->options['enable_ping_' . $key])
3925
+ {
3926
+ if ($time - $ping_data['data_last_pinged'][$key] > 86400)
3927
+ {
3928
+ // a day has gone, reset the count
3929
+ $ping_data['data_pinged'][$key] = 0;
3930
+ $ping_data['data_last_pinged'][$key] = $time;
3931
+ }
3932
+
3933
+ if ($this->pings_per_day > $ping_data['data_pinged'][$key])
3934
+ {
3935
+ // ping limit has not been reached
3936
+ $ping_data['data_pinged'][$key]++;
3937
+
3938
+ $url = sprintf($service, urlencode(str_replace(
3939
+ '&', '&amp;', $this->get_sitemap_url($this->_ping_sitemap)
3940
+ )));
3941
+
3942
+ $response = $this->bridge->wp_remote_post($url,
3943
+ array('timeout' => $this->ping_timeout)
3944
+ );
3945
+
3946
+ if ($this->bridge->is_wp_error($response))
3947
+ {
3948
+ $errno = $response->get_error_code();
3949
+ $errorstr = $response->get_error_message();
3950
+
3951
+ $this->log_error($errorstr);
3952
+ }
3953
+ else if (isset($response['response']))
3954
+ {
3955
+ $the_response = $response['response'];
3956
+
3957
+ if (empty($the_response['code']))
3958
+ {
3959
+ $this->log_error(__('Unknown response code from search engines. Ping failed.', $this->domain));
3960
+ }
3961
+ else if (200 == $the_response['code'])
3962
+ {
3963
+ $this->log_success(sprintf(
3964
+ __('Pinged <em>%s</em> with <em>%s</em> successfully!', $this->domain), ucfirst($key),
3965
+ $this->_ping_sitemap . '.xml')
3966
+ );
3967
+ }
3968
+ else
3969
+ {
3970
+ $errno = $the_response['code'];
3971
+ $errorstr = $the_response['message'];
3972
+
3973
+ $this->log_error(sprintf(
3974
+ __('<strong>Error %s</strong> from <em>%s</em>.', $this->domain), $errno, ucfirst($key))
3975
+ . ': ' . $errorstr
3976
+ );
3977
+ }
3978
+ }
3979
+ }
3980
+ else
3981
+ {
3982
+ // ping limit reached for this particular search engine,
3983
+ // log an appropriate error message
3984
+ $this->log_error(sprintf(
3985
+ __('Ping limit for today to <em>%s</em> has been reached, '
3986
+ . 'consider increasing the ping limit via '
3987
+ . '<em>XML Sitemaps >> Ping search engines >> "Ping limit for each search engine"</em>', $this->domain),
3988
+ ucfirst($key))
3989
+ );
3990
+ }
3991
+ }
3992
+ }
3993
+
3994
+ $this->bridge->update_option(BWP_GXS_PING, $ping_data);
3995
+
3996
+ $this->commit_logs();
3997
+ }
3998
+
3999
+ /**
4000
+ * @param BWP_Sitemaps_Excluder $excluder
4001
+ */
4002
+ public function set_post_excluder(BWP_Sitemaps_Excluder $excluder)
4003
+ {
4004
+ $this->post_excluder = $excluder;
4005
+ }
4006
+
4007
+ /**
4008
+ * @param BWP_Sitemaps_Excluder $excluder
4009
+ */
4010
+ public function set_term_excluder(BWP_Sitemaps_Excluder $excluder)
4011
+ {
4012
+ $this->term_excluder = $excluder;
4013
+ }
4014
+
4015
+ /**
4016
+ * Get a content provider
4017
+ *
4018
+ * @param string $name
4019
+ * @return BWP_Sitemaps_Provider
4020
+ */
4021
+ public function get_provider($name)
4022
+ {
4023
+ if (!isset($this->providers[$name]))
4024
+ throw new DomainException(sprintf('invalid provider name "%s"', $name));
4025
+
4026
+ return $this->providers[$name];
4027
+ }
4028
+
4029
+ /**
4030
+ * Get an ajax action handler
4031
+ *
4032
+ * @param string $name
4033
+ * @return BWP_Sitemaps_Handler_AjaxHandler
4034
+ */
4035
+ public function get_ajax_handler($name)
4036
+ {
4037
+ if (!isset($this->ajax_handlers[$name]))
4038
+ throw new DomainException(sprintf('invalid ajax handler name "%s"', $name));
4039
+
4040
+ return $this->ajax_handlers[$name];
4041
+ }
4042
+
4043
+ /**
4044
+ * Check whether image sitemap extension is allowed for a particular post type
4045
+ *
4046
+ * This checks whether the following conditions are met:
4047
+ * 1. The current theme supports featured image.
4048
+ * 2. Image extension is enabled (this is a Google-specific extension, see
4049
+ * https://support.google.com/webmasters/answer/178636?hl=en).
4050
+ * 3. The post type being checked supports featured image and is allowed to
4051
+ * have image.
4052
+ *
4053
+ * @param string $post_type
4054
+ * @return bool
4055
+ * @since 1.4.0
4056
+ */
4057
+ public function is_image_sitemap_allowed_for($post_type)
4058
+ {
4059
+ // current theme does not support featured image
4060
+ if (! $this->bridge->current_theme_supports('post-thumbnails'))
4061
+ return false;
4062
+
4063
+ // image extension not enabled
4064
+ if ($this->options['enable_image_sitemap'] != 'yes')
4065
+ return false;
4066
+
4067
+ // post type does not support featured image
4068
+ if (! $this->bridge->post_type_supports($post_type, 'thumbnail'))
4069
+ return false;
4070
+
4071
+ // image must be explicitly enabled for this post type
4072
+ $post_types_with_image = explode(',', $this->options['input_image_post_types']);
4073
+
4074
+ return in_array($post_type, $post_types_with_image);
4075
+ }
4076
+
4077
+ /**
4078
+ * Get publication name for Google news sitemap
4079
+ *
4080
+ * @return string
4081
+ * @since 1.4.0
4082
+ */
4083
+ public function get_news_name()
4084
+ {
4085
+ $news_name = $this->options['input_news_name'];
4086
+ $news_name = empty($news_name) ? $this->bridge->get_bloginfo('name') : $news_name;
4087
+
4088
+ /**
4089
+ * Filter the name used for the Google News Sitemap.
4090
+ *
4091
+ * @param string $news_name The name to filter.
4092
+ */
4093
+ return $this->bridge->apply_filters('bwp_gxs_news_name', $news_name);
4094
+ }
4095
+ }
{includes → src}/common-functions.php RENAMED
@@ -6,11 +6,11 @@ function bwp_gxs_get_filename($sitemap_name)
6
 
7
  // cache filename, use gz all the time to save space
8
  // @todo save both .xml version and .xml.gz version
9
- // append home_url to be WPMS compatible
10
  $filename = 'gxs_' . md5($sitemap_name . '_' . home_url());
11
  $filename .= '.xml.gz';
12
 
13
- return trailingslashit($bwp_gxs->cache_directory) . $filename;
14
  }
15
 
16
  function bwp_gxs_format_header_time($time)
6
 
7
  // cache filename, use gz all the time to save space
8
  // @todo save both .xml version and .xml.gz version
9
+ // append home_url to be WPMS compatible
10
  $filename = 'gxs_' . md5($sitemap_name . '_' . home_url());
11
  $filename .= '.xml.gz';
12
 
13
+ return trailingslashit($bwp_gxs->get_cache_directory()) . $filename;
14
  }
15
 
16
  function bwp_gxs_format_header_time($time)
src/handler/ajax/external-page.php ADDED
@@ -0,0 +1,219 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ class BWP_Sitemaps_Handler_Ajax_ExternalPageHandler extends BWP_Sitemaps_Handler_AjaxHandler
12
+ {
13
+ protected $provider;
14
+
15
+ protected $frequencies;
16
+
17
+ protected $priorities;
18
+
19
+ protected $timezone;
20
+
21
+ protected $date_format = 'Y-m-d H:i';
22
+
23
+ protected $domain;
24
+
25
+ public function __construct(
26
+ BWP_Sitemaps_Provider_ExternalPage $provider,
27
+ array $frequencies,
28
+ array $priorities,
29
+ DateTimeZone $timezone
30
+ ) {
31
+ $this->provider = $provider;
32
+
33
+ $this->frequencies = $frequencies;
34
+ $this->frequencies[] = 'auto';
35
+
36
+ $this->priorities = $priorities;
37
+
38
+ $this->timezone = $timezone;
39
+
40
+ $this->bridge = $provider->get_bridge();
41
+ $this->domain = $provider->get_domain();
42
+ }
43
+
44
+ /**
45
+ * Save an external page, be it a new or existing one
46
+ *
47
+ * Response should contain ESCAPED contents.
48
+ */
49
+ public function save_external_page_action()
50
+ {
51
+ $this->bridge->check_ajax_referer('bwp_gxs_manage_external_page');
52
+
53
+ // 'frequency' and 'priority' are not technically required, but if a
54
+ // page is submitted via the form, they are always set anyway
55
+ $required = array('url', 'frequency', 'priority');
56
+ $values = array();
57
+
58
+ // return error if any required field is missing
59
+ foreach ($required as $required_field) {
60
+ if (! $values[$required_field] = BWP_Framework_Util::get_request_var($required_field)) {
61
+ $this->response_with(array(
62
+ 'error' => 1,
63
+ 'message' => __('Please provide all required fields.', $this->domain)
64
+ ));
65
+ }
66
+ }
67
+
68
+ extract($values);
69
+
70
+ // must be a valid url and starts with the Site Address (either scheme)
71
+ if (! BWP_Sitemaps_Validator_Url::validate($url)
72
+ || (strpos($url, $this->bridge->home_url()) !== 0
73
+ && strpos($url, $this->bridge->home_url('', 'https')) !== 0)
74
+ ) {
75
+ $this->response_with(array(
76
+ 'error' => 1,
77
+ 'message' => sprintf(
78
+ __('Please provide an absolute URL under your domain, '
79
+ . 'for example: %s.', $this->domain),
80
+ home_url('a-page/')
81
+ )
82
+ ));
83
+ }
84
+
85
+ // frequency and priority must be valid if provided
86
+ if (!in_array($frequency, $this->frequencies)
87
+ || !in_array($priority, $this->priorities)
88
+ ) {
89
+ $this->response_with(array(
90
+ 'error' => 1,
91
+ 'message' => __('Invalid frequency or priority.', $this->domain)
92
+ ));
93
+ }
94
+
95
+ $last_modified = isset($last_modified) ? $last_modified : null;
96
+
97
+ // last_modified must be valid if provided
98
+ if (isset($last_modified)) {
99
+ try {
100
+ // expect last modified date time in local timezone, but we will
101
+ // save it in UTC timezone
102
+ $last_modified = new DateTime($last_modified, $this->timezone);
103
+ $last_modified->setTimezone(new DateTimeZone('UTC'));
104
+ } catch (Exception $e) {
105
+ $this->response_with(array(
106
+ 'error' => 1,
107
+ 'message' => __('Please provide a valid last modified date time.', $this->domain)
108
+ ));
109
+ }
110
+ }
111
+
112
+ $data = array(
113
+ 'frequency' => $frequency,
114
+ 'priority' => $priority,
115
+ 'last_modified' => $last_modified ? $last_modified->format($this->date_format) : null
116
+ );
117
+
118
+ if ($result = $this->save($url, $data)) {
119
+ $data['url'] = $this->bridge->esc_html($url);
120
+
121
+ // always display in local timezone
122
+ $data['last_modified'] = $last_modified
123
+ ? $last_modified
124
+ ->setTimezone($this->timezone)
125
+ ->format($this->date_format)
126
+ : null;
127
+
128
+ $this->response_with(array(
129
+ 'data' => $data,
130
+ 'updated' => $result === 2,
131
+ 'message' => __('External page has been successfully added/updated.', $this->domain)
132
+ ));
133
+ } else {
134
+ $this->response_with(array(
135
+ 'error' => 1,
136
+ 'message' => __('Could not add/update page, please try again.', $this->domain)
137
+ ));
138
+ }
139
+ }
140
+
141
+ /**
142
+ * Remove page action
143
+ */
144
+ public function remove_external_page_action()
145
+ {
146
+ $this->bridge->check_ajax_referer('bwp_gxs_manage_external_page');
147
+
148
+ if ($url = BWP_Framework_Util::get_request_var('url')) {
149
+ // no matching page
150
+ if (! ($page = $this->provider->get_page($url))) {
151
+ $this->fail();
152
+ }
153
+
154
+ $this->remove($url);
155
+ $this->succeed();
156
+ }
157
+
158
+ $this->fail();
159
+ }
160
+
161
+ /**
162
+ * Get pages action
163
+ *
164
+ * Response should contain ESCAPED contents.
165
+ */
166
+ public function get_pages_action()
167
+ {
168
+ $items = array();
169
+ $pages = $this->provider->get_pages_for_display();
170
+
171
+ foreach ($pages as $url => $page) {
172
+ $items[] = array(
173
+ 'url' => $this->bridge->esc_html($url),
174
+ 'frequency' => $this->bridge->esc_html($page['frequency']),
175
+ 'priority' => $this->bridge->esc_html($page['priority']),
176
+ 'last_modified' => $page['last_modified']
177
+ );
178
+ }
179
+
180
+ $this->response_with($items);
181
+ }
182
+
183
+ /**
184
+ * @param string $url
185
+ * @param array $data
186
+ * @return bool|int 1 if new, 2 if updated and false if failed
187
+ */
188
+ protected function save($url, $data)
189
+ {
190
+ $pages = $this->provider->get_pages();
191
+
192
+ // updating a page, but the data is the same, return 2 immediately
193
+ if (isset($pages[$url]) && $data == $pages[$url]) {
194
+ return 2;
195
+ }
196
+
197
+ $return = isset($pages[$url]) ? 2 : 1;
198
+ $pages[$url] = $data;
199
+
200
+ if ($this->bridge->update_option($this->provider->get_storage_key(), $pages)) {
201
+ return $return;
202
+ }
203
+
204
+ return false;
205
+ }
206
+
207
+ /**
208
+ * @param string $url
209
+ */
210
+ protected function remove($url)
211
+ {
212
+ $pages = $this->provider->get_pages();
213
+
214
+ if (isset($pages[$url])) {
215
+ unset($pages[$url]);
216
+ $this->bridge->update_option($this->provider->get_storage_key(), $pages);
217
+ }
218
+ }
219
+ }
src/handler/ajax/handler.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ abstract class BWP_Sitemaps_Handler_AjaxHandler
12
+ {
13
+ /**
14
+ * @var BWP_WP_Bridge
15
+ */
16
+ protected $bridge;
17
+
18
+ protected function response_with(array $data)
19
+ {
20
+ @header('Content-Type: application/json');
21
+
22
+ echo json_encode($data);
23
+
24
+ exit;
25
+ }
26
+
27
+ protected function fail()
28
+ {
29
+ echo 0; exit;
30
+ }
31
+
32
+ protected function succeed()
33
+ {
34
+ echo 1; exit;
35
+ }
36
+ }
src/handler/ajax/news-terms.php ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ class BWP_Sitemaps_Handler_Ajax_NewsTermsHandler extends BWP_Sitemaps_Handler_AjaxHandler
12
+ {
13
+ protected $provider;
14
+
15
+ protected $news_terms;
16
+
17
+ protected $news_genres;
18
+
19
+ public function __construct(
20
+ BWP_Sitemaps_Provider_Taxonomy $provider,
21
+ array $news_terms,
22
+ array $news_genres
23
+ ) {
24
+ $this->provider = $provider;
25
+
26
+ $this->news_terms = $news_terms;
27
+ $this->news_genres = $news_genres;
28
+
29
+ $this->bridge = $provider->get_bridge();
30
+ $this->domain = $provider->get_domain();
31
+ }
32
+
33
+ /**
34
+ * Get term genres action
35
+ *
36
+ * Response should contain ESCAPED contents.
37
+ */
38
+ public function get_term_genres_action()
39
+ {
40
+ $items = array();
41
+
42
+ // @link http://support.google.com/news/publisher/bin/answer.py?hl=en&answer=93992
43
+ $genres = array(
44
+ 'PressRelease',
45
+ 'Satire',
46
+ 'Blog',
47
+ 'OpEd',
48
+ 'Opinion',
49
+ 'UserGenerated'
50
+ );
51
+
52
+ if ($taxonomy = BWP_Framework_Util::get_request_var('news_taxonomy')) {
53
+ $terms = $this->provider->get_all_terms($taxonomy);
54
+
55
+ foreach ($terms as $term) {
56
+ $item = array(
57
+ 'id' => (int) $term->term_id,
58
+ 'name' => esc_html($term->name),
59
+ 'slug' => esc_attr($term->slug),
60
+ 'selected' => in_array($term->term_id, $this->news_terms),
61
+ 'genres' => array()
62
+ );
63
+
64
+ $item_genres = array();
65
+
66
+ foreach ($genres as $genre) {
67
+ $item_genre_selected = false;
68
+ if (isset($this->news_genres['term_' . $term->term_id])
69
+ && stripos($this->news_genres['term_' . $term->term_id], $genre) !== false
70
+ ) {
71
+ $item_genre_selected = true;
72
+ }
73
+
74
+ $item_genres[] = array(
75
+ 'name' => $genre,
76
+ 'selected' => $item_genre_selected
77
+ );
78
+ }
79
+
80
+ $item['genres'] = $item_genres;
81
+
82
+ $items[] = $item;
83
+ }
84
+ }
85
+
86
+ $this->response_with($items);
87
+ }
88
+ }
src/handler/ajax/post.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ class BWP_Sitemaps_Handler_Ajax_PostHandler extends BWP_Sitemaps_Handler_Ajax_WPContentHandler
12
+ {
13
+ public function __construct(BWP_Sitemaps_Provider $provider)
14
+ {
15
+ if (! ($provider instanceof BWP_Sitemaps_Provider_Post)) {
16
+ throw new InvalidArgumentException(sprintf(
17
+ 'expect a provider of type "%s", type "%s" provided.',
18
+ 'BWP_Sitemaps_Provider_Post',
19
+ get_class($provider)
20
+ ));
21
+ }
22
+
23
+ parent::__construct($provider);
24
+ }
25
+
26
+ /**
27
+ * Get posts action
28
+ *
29
+ * Response should contain UNESCAPED contents.
30
+ */
31
+ public function get_posts_action()
32
+ {
33
+ $items = array();
34
+
35
+ if (($post_type = BWP_Framework_Util::get_request_var('group'))
36
+ && ($title = BWP_Framework_Util::get_request_var('q'))
37
+ ) {
38
+ $posts = $this->provider->get_public_posts_by_title($post_type, $title);
39
+
40
+ foreach ($posts as $post) {
41
+ $items[] = array(
42
+ 'id' => (int) $post->ID,
43
+ 'title' => $post->post_title
44
+ );
45
+ }
46
+ }
47
+
48
+ $this->response_with(array('items' => $items));
49
+ }
50
+
51
+ /**
52
+ * Get excluded posts action
53
+ *
54
+ * Response should contain ESCAPED contents
55
+ */
56
+ public function get_excluded_posts_action()
57
+ {
58
+ $items = array();
59
+
60
+ if (($post_type = BWP_Framework_Util::get_request_var('group'))
61
+ && ($excluded_items = $this->excluder->get_excluded_items($post_type))
62
+ ) {
63
+ $posts = $this->provider->get_public_posts(
64
+ $post_type, $excluded_items
65
+ );
66
+
67
+ /* @var $post WP_Post */
68
+ foreach ($posts as $post) {
69
+ $items[] = array(
70
+ 'id' => (int) $post->ID,
71
+ 'title' => esc_html($post->post_title)
72
+ );
73
+ }
74
+ }
75
+
76
+ $this->response_with($items);
77
+ }
78
+ }
src/handler/ajax/taxonomy.php ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ class BWP_Sitemaps_Handler_Ajax_TaxonomyHandler extends BWP_Sitemaps_Handler_Ajax_WPContentHandler
12
+ {
13
+ public function __construct(BWP_Sitemaps_Provider $provider)
14
+ {
15
+ if (! ($provider instanceof BWP_Sitemaps_Provider_Taxonomy)) {
16
+ throw new InvalidArgumentException(sprintf(
17
+ 'expect a provider of type "%s", type "%s" provided.',
18
+ 'BWP_Sitemaps_Provider_Taxonomy',
19
+ get_class($provider)
20
+ ));
21
+ }
22
+
23
+ parent::__construct($provider);
24
+ }
25
+
26
+ /**
27
+ * Get taxonomies action
28
+ *
29
+ * Response should contain ESCAPED contents.
30
+ */
31
+ public function get_taxonomies_action()
32
+ {
33
+ $items = array();
34
+
35
+ if ($post_type = BWP_Framework_Util::get_request_var('post_type')) {
36
+ $taxonomies = $this->provider->get_taxonomies($post_type);
37
+
38
+ foreach ($taxonomies as $taxonomy) {
39
+ $items[] = array(
40
+ 'name' => esc_attr($taxonomy->name),
41
+ 'title' => esc_html($taxonomy->labels->singular_name)
42
+ );
43
+ }
44
+ }
45
+
46
+ $this->response_with($items);
47
+ }
48
+
49
+ /**
50
+ * Get terms action
51
+ *
52
+ * Response should contain UNESCAPED contents.
53
+ */
54
+ public function get_terms_action()
55
+ {
56
+ $items = array();
57
+
58
+ if (($taxonomy = BWP_Framework_Util::get_request_var('group'))
59
+ && ($name = BWP_Framework_Util::get_request_var('q'))
60
+ ) {
61
+ $terms = $this->provider->get_terms_by_name($taxonomy, $name);
62
+
63
+ foreach ($terms as $term) {
64
+ $items[] = array(
65
+ 'id' => (int) $term->term_id,
66
+ 'title' => $term->name
67
+ );
68
+ }
69
+ }
70
+
71
+ $this->response_with(array('items' => $items));
72
+ }
73
+
74
+ /**
75
+ * Get excluded terms action
76
+ *
77
+ * Response should contain ESCAPED contents
78
+ */
79
+ public function get_excluded_terms_action()
80
+ {
81
+ $items = array();
82
+
83
+ if (($taxonomy = BWP_Framework_Util::get_request_var('group'))
84
+ && ($excluded_items = $this->excluder->get_excluded_items($taxonomy))
85
+ ) {
86
+ $terms = $this->provider->get_terms(
87
+ $taxonomy, $excluded_items
88
+ );
89
+
90
+ foreach ($terms as $term) {
91
+ $items[] = array(
92
+ 'id' => (int) $term->term_id,
93
+ 'title' => esc_html($term->name)
94
+ );
95
+ }
96
+ }
97
+
98
+ $this->response_with($items);
99
+ }
100
+ }
src/handler/ajax/wp-content.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ abstract class BWP_Sitemaps_Handler_Ajax_WPContentHandler extends BWP_Sitemaps_Handler_AjaxHandler
12
+ {
13
+ /**
14
+ * @var BWP_Sitemaps_Provider
15
+ */
16
+ protected $provider;
17
+
18
+ /**
19
+ * @var BWP_Sitemaps_Excluder
20
+ */
21
+ protected $excluder;
22
+
23
+ public function __construct(BWP_Sitemaps_Provider $provider)
24
+ {
25
+ $this->provider = $provider;
26
+ $this->excluder = $provider->get_exluder();
27
+ $this->bridge = $provider->get_bridge();
28
+ }
29
+
30
+ /**
31
+ * Remove excluded item action
32
+ */
33
+ public function remove_excluded_item_action()
34
+ {
35
+ $this->bridge->check_ajax_referer('bwp_gxs_remove_excluded_item');
36
+
37
+ if (($group = BWP_Framework_Util::get_request_var('group'))
38
+ && ($id = BWP_Framework_Util::get_request_var('id'))
39
+ ) {
40
+ $excluded_items = $this->excluder->get_excluded_items($group);
41
+
42
+ $key = array_search($id, $excluded_items);
43
+
44
+ if ($key !== false) {
45
+ unset($excluded_items[$key]);
46
+ $this->excluder->update_excluded_items($group, $excluded_items);
47
+ $this->succeed();
48
+ }
49
+ }
50
+
51
+ $this->fail();
52
+ }
53
+ }
src/index.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+ //white page
src/logger/log-item.php ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ abstract class BWP_Sitemaps_Logger_LogItem
12
+ {
13
+ /**
14
+ * Datetime of the item
15
+ *
16
+ * @var DateTime
17
+ */
18
+ protected $datetime;
19
+
20
+ /**
21
+ * Timezone of the datetime of this item
22
+ *
23
+ * @var DateTimeZone
24
+ */
25
+ protected $timezone;
26
+
27
+ /**
28
+ * Get a simple array representation of the item
29
+ *
30
+ * This is intended to be stored in a persistence layer
31
+ *
32
+ * @return array
33
+ */
34
+ abstract public function get_item_data();
35
+
36
+ public function set_datetime(DateTime $datetime)
37
+ {
38
+ $this->datetime = $datetime;
39
+ }
40
+
41
+ public function set_datetimezone(DateTimeZone $timezone)
42
+ {
43
+ $this->timezone = $timezone;
44
+ }
45
+
46
+ /**
47
+ * Get datetime of this item, with proper timezone set if applicable
48
+ *
49
+ * @return DateTime
50
+ */
51
+ public function get_datetime()
52
+ {
53
+ $datetime = clone $this->datetime;
54
+
55
+ if ($this->timezone) {
56
+ $datetime->setTimezone($this->timezone);
57
+ }
58
+
59
+ return $datetime;
60
+ }
61
+
62
+ /**
63
+ * Get datetime of this item, in Unix Timestamp and UTC
64
+ *
65
+ * @return int
66
+ */
67
+ public function get_timestamp()
68
+ {
69
+ return $this->datetime->getTimestamp();
70
+ }
71
+
72
+ /**
73
+ * Same as get_timestamp() but the result is in local timezone
74
+ *
75
+ * @return int
76
+ */
77
+ public function get_local_timestamp()
78
+ {
79
+ return $this->get_datetime()->getTimestamp();
80
+ }
81
+
82
+ /**
83
+ * Get datetime formatted in a way that's suitable for storage
84
+ *
85
+ * This should use $datetime with UTC timezone
86
+ *
87
+ * @return string
88
+ */
89
+ public function get_storage_datetime()
90
+ {
91
+ return $this->datetime->format('Y-m-d H:i:s');
92
+ }
93
+
94
+ /**
95
+ * Get datetime formatted in a way that is suitable for displaying
96
+ *
97
+ * This should use $datetime with local timezone set
98
+ *
99
+ * @return string
100
+ */
101
+ public function get_formatted_datetime($format = 'M d, Y h:i:s A')
102
+ {
103
+ return $this->get_datetime()->format($format);
104
+ }
105
+ }
src/logger/logger.php ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ abstract class BWP_Sitemaps_Logger
12
+ {
13
+ /**
14
+ * Log items
15
+ *
16
+ * @var array
17
+ */
18
+ protected $items;
19
+
20
+ /**
21
+ * Maximum number of items to keep
22
+ *
23
+ * @var int
24
+ */
25
+ protected $limit;
26
+
27
+ protected function __construct()
28
+ {
29
+ $this->items = array();
30
+ }
31
+
32
+ /**
33
+ * Create a message logger
34
+ *
35
+ * @param int $limit default to 0 for no limit
36
+ * @return BWP_Sitemaps_Logger_MessageLogger
37
+ */
38
+ public static function create_message_logger($limit = 0)
39
+ {
40
+ $logger = new BWP_Sitemaps_Logger_MessageLogger();
41
+ $logger->set_limit($limit);
42
+
43
+ return $logger;
44
+ }
45
+
46
+ /**
47
+ * Create a sitemap logger
48
+ *
49
+ * @var int $limit default to 0 for no limit
50
+ * @return BWP_Sitemaps_Logger_SitemapLogger
51
+ */
52
+ public static function create_sitemap_logger($limit = 0)
53
+ {
54
+ $logger = new BWP_Sitemaps_Logger_SitemapLogger();
55
+ $logger->set_limit($limit);
56
+
57
+ return $logger;
58
+ }
59
+
60
+ public function set_limit($limit)
61
+ {
62
+ $this->limit = (int) $limit;
63
+ }
64
+
65
+ /**
66
+ * Log an item
67
+ *
68
+ * @param BWP_Sitemaps_Logger_LogItem $item
69
+ */
70
+ public function log(BWP_Sitemaps_Logger_LogItem $item)
71
+ {
72
+ if (!empty($this->limit) && count($this->items) >= $this->limit) {
73
+ array_shift($this->items);
74
+ }
75
+
76
+ $this->items[] = $item;
77
+ }
78
+
79
+ /**
80
+ * Reset logger, remove all logged items
81
+ */
82
+ public function reset()
83
+ {
84
+ $this->items = array();
85
+ }
86
+
87
+ /**
88
+ * @return int
89
+ */
90
+ public function get_limit()
91
+ {
92
+ return (int) $this->limit;
93
+ }
94
+
95
+ /**
96
+ * Filter out some items
97
+ *
98
+ * @return false
99
+ */
100
+ public function filter_items(BWP_Sitemaps_Logger_LogItem $item)
101
+ {
102
+ // if this item can become obsolete, so they should be filtered out if
103
+ // they are obsolete
104
+ if ($item instanceof BWP_Sitemaps_Logger_Sitemap_LogItem && $item->is_obsolete()) {
105
+ return false;
106
+ }
107
+
108
+ return true;
109
+ }
110
+
111
+ /**
112
+ * @return BWP_Sitemaps_Logger_LogItem[] array of BWP_Sitemaps_Logger_LogItem
113
+ */
114
+ public function get_log_items()
115
+ {
116
+ return array_filter($this->items, array($this, 'filter_items'));
117
+ }
118
+
119
+ /**
120
+ * Get a simple array representation of the log items
121
+ *
122
+ * This is intended to be stored in a persistence layer
123
+ *
124
+ * @return array
125
+ */
126
+ public function get_log_item_data()
127
+ {
128
+ $data = array();
129
+ $items = $this->get_log_items();
130
+
131
+ /* @var $item BWP_Sitemaps_Logger_LogItem */
132
+ foreach ($items as $item) {
133
+ $data[] = $item->get_item_data();
134
+ }
135
+
136
+ return $data;
137
+ }
138
+
139
+ /**
140
+ * @return bool
141
+ */
142
+ public function is_empty()
143
+ {
144
+ $items = $this->get_log_items();
145
+
146
+ return count($items) == 0;
147
+ }
148
+ }
src/logger/message-log-item.php ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ class BWP_Sitemaps_Logger_Message_LogItem extends BWP_Sitemaps_Logger_LogItem
12
+ {
13
+ const TYPE_SUCCESS = 'success';
14
+ const TYPE_ERROR = 'error';
15
+ const TYPE_NOTICE = 'notice';
16
+
17
+ /**
18
+ * The message of this log item
19
+ *
20
+ * @var string
21
+ */
22
+ protected $message;
23
+
24
+ /**
25
+ * Message type
26
+ *
27
+ * @var string
28
+ */
29
+ protected $type;
30
+
31
+ /**
32
+ * @param string $message
33
+ * @param string $type
34
+ * @param string $datetime default to now, expect to be in UTC timezone
35
+ */
36
+ public function __construct($message, $type, $datetime = null)
37
+ {
38
+ if (!is_string($message) || empty($message)) {
39
+ throw new DomainException('provided message must be string and not empty');
40
+ }
41
+
42
+ $this->message = $message;
43
+
44
+ if (!in_array($type, self::get_allowed_types())) {
45
+ throw new DomainException(sprintf('invalid message type provided: "%s"', $type));
46
+ }
47
+
48
+ $this->type = $type;
49
+
50
+ // datetime will be converted to UTC timezone
51
+ $this->datetime = new DateTime($datetime, new DateTimeZone('UTC'));
52
+ }
53
+
54
+ public static function get_allowed_types()
55
+ {
56
+ return array(
57
+ self::TYPE_SUCCESS,
58
+ self::TYPE_ERROR,
59
+ self::TYPE_NOTICE
60
+ );
61
+ }
62
+
63
+ public function get_message()
64
+ {
65
+ return $this->message;
66
+ }
67
+
68
+ public function is_error()
69
+ {
70
+ return $this->type === self::TYPE_ERROR;
71
+ }
72
+
73
+ public function is_success()
74
+ {
75
+ return $this->type === self::TYPE_SUCCESS;
76
+ }
77
+
78
+ public function is_notice()
79
+ {
80
+ return $this->type === self::TYPE_NOTICE;
81
+ }
82
+
83
+ public function get_type()
84
+ {
85
+ return $this->type;
86
+ }
87
+
88
+ public function get_item_data()
89
+ {
90
+ return array(
91
+ 'message' => $this->message,
92
+ 'type' => $this->type,
93
+ 'datetime' => $this->get_storage_datetime()
94
+ );
95
+ }
96
+ }
src/logger/message-logger.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ class BWP_Sitemaps_Logger_MessageLogger extends BWP_Sitemaps_Logger
12
+ {
13
+ /**
14
+ * {@inheritDoc}
15
+ */
16
+ public function log(BWP_Sitemaps_Logger_LogItem $item)
17
+ {
18
+ if (!($item instanceof BWP_Sitemaps_Logger_Message_LogItem)) {
19
+ throw new InvalidArgumentException(sprintf('expect an item of type BWP_Sitemaps_Logger_Message_LogItem, "%s" provded.', get_class($item)));
20
+ }
21
+
22
+ parent::log($item);
23
+ }
24
+ }
src/logger/sitemap-log-item.php ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ class BWP_Sitemaps_Logger_Sitemap_LogItem extends BWP_Sitemaps_Logger_LogItem
12
+ {
13
+ /**
14
+ * Slug of the logged sitemap
15
+ *
16
+ * @var string
17
+ */
18
+ protected $sitemap_slug;
19
+
20
+ /**
21
+ * @param string $slug
22
+ * @param string $datetime default to now, expect to be in UTC timezone
23
+ */
24
+ public function __construct($slug, $datetime = null)
25
+ {
26
+ if (!is_string($slug) || empty($slug)) {
27
+ throw new DomainException('provided slug must be string and not empty');
28
+ }
29
+
30
+ $this->sitemap_slug = $slug;
31
+
32
+ $this->datetime = new DateTime($datetime, new DateTimeZone('UTC'));
33
+ }
34
+
35
+ /**
36
+ * Check whether this log item is obsolete
37
+ *
38
+ * An item is obsolete when it's at least 1-month old
39
+ *
40
+ * @return bool
41
+ */
42
+ public function is_obsolete()
43
+ {
44
+ $last_month = new DateTime('-1 month', new DateTimeZone('UTC'));
45
+
46
+ return $this->datetime <= $last_month;
47
+ }
48
+
49
+ public function get_sitemap_slug()
50
+ {
51
+ return $this->sitemap_slug;
52
+ }
53
+
54
+ /**
55
+ * {@inheritDoc}
56
+ */
57
+ public function get_item_data()
58
+ {
59
+ return array(
60
+ 'slug' => $this->sitemap_slug,
61
+ 'datetime' => $this->get_storage_datetime()
62
+ );
63
+ }
64
+ }
src/logger/sitemap-logger.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ class BWP_Sitemaps_Logger_SitemapLogger extends BWP_Sitemaps_Logger
12
+ {
13
+ /**
14
+ * {@inheritDoc}
15
+ */
16
+ public function log(BWP_Sitemaps_Logger_LogItem $item)
17
+ {
18
+ if (!($item instanceof BWP_Sitemaps_Logger_Sitemap_LogItem)) {
19
+ throw new InvalidArgumentException(sprintf('expect an item of type BWP_Sitemaps_Logger_Sitemap_LogItem, "%s" provded.', get_class($item)));
20
+ }
21
+
22
+ // replace existing item
23
+ $this->items[$item->get_sitemap_slug()] = $item;
24
+ }
25
+
26
+ /**
27
+ * Get a log item based on sitemap slug
28
+ *
29
+ * @param string $slug
30
+ * @return BWP_Sitemaps_Logger_Sitemap_LogItem
31
+ */
32
+ public function get_sitemap_log_item($slug)
33
+ {
34
+ foreach ($this->items as $item) {
35
+ if ($item->get_sitemap_slug() === $slug) {
36
+ return $item;
37
+ }
38
+ }
39
+ }
40
+ }
{includes → src}/modules/archive.php RENAMED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- * Copyright (c) 2014 Khang Minh <betterwp.net>
4
  * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE
5
  * @package BWP Google XML Sitemaps
6
  */
1
  <?php
2
  /**
3
+ * Copyright (c) 2011 Khang Minh <betterwp.net>
4
  * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE
5
  * @package BWP Google XML Sitemaps
6
  */
{includes → src}/modules/author.php RENAMED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- * Copyright (c) 2014 Khang Minh <betterwp.net>
4
  * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE
5
  * @package BWP Google XML Sitemaps
6
  */
1
  <?php
2
  /**
3
+ * Copyright (c) 2011 Khang Minh <betterwp.net>
4
  * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE
5
  * @package BWP Google XML Sitemaps
6
  */
{includes → src}/modules/index.php RENAMED
File without changes
{includes → src}/modules/page.php RENAMED
@@ -1,11 +1,11 @@
1
  <?php
2
  /**
3
- * Copyright (c) 2014 Khang Minh <betterwp.net>
4
  * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE
5
  * @package BWP Google XML Sitemaps
6
  */
7
 
8
- class BWP_GXS_MODULE_PAGE extends BWP_GXS_MODULE
9
  {
10
  public function __construct()
11
  {
@@ -16,6 +16,14 @@ class BWP_GXS_MODULE_PAGE extends BWP_GXS_MODULE
16
  {
17
  global $wpdb, $post;
18
 
 
 
 
 
 
 
 
 
19
  $sql_where = apply_filters('bwp_gxs_post_where', '', 'page');
20
  $sql_where = str_replace('wposts', 'p', $sql_where);
21
 
@@ -24,7 +32,9 @@ class BWP_GXS_MODULE_PAGE extends BWP_GXS_MODULE
24
  FROM ' . $wpdb->posts . " p
25
  WHERE p.post_status = 'publish'
26
  AND p.post_password = ''
27
- AND p.post_type = 'page' $sql_where" . '
 
 
28
  ORDER BY p.post_modified DESC';
29
 
30
  $latest_posts = $this->get_results($latest_post_query);
@@ -36,6 +46,9 @@ class BWP_GXS_MODULE_PAGE extends BWP_GXS_MODULE
36
 
37
  $data = array();
38
 
 
 
 
39
  for ($i = 0; $i < sizeof($latest_posts); $i++)
40
  {
41
  $post = $latest_posts[$i];
@@ -55,6 +68,10 @@ class BWP_GXS_MODULE_PAGE extends BWP_GXS_MODULE
55
  $data['freq'] = $this->cal_frequency($post);
56
  $data['priority'] = $this->cal_priority($post, $data['freq']);
57
 
 
 
 
 
58
  $this->data[] = $data;
59
  }
60
 
1
  <?php
2
  /**
3
+ * Copyright (c) 2011 Khang Minh <betterwp.net>
4
  * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE
5
  * @package BWP Google XML Sitemaps
6
  */
7
 
8
+ class BWP_GXS_MODULE_PAGE extends BWP_GXS_MODULE_POST
9
  {
10
  public function __construct()
11
  {
16
  {
17
  global $wpdb, $post;
18
 
19
+ // @since 1.3.1 use a different filter hook that expects an array instead
20
+ $excluded_posts = apply_filters('bwp_gxs_excluded_posts', array(), 'page');
21
+ $exclude_post_sql = sizeof($excluded_posts) > 0
22
+ ? ' AND p.ID NOT IN (' . implode(',', $excluded_posts) . ') '
23
+ : '';
24
+
25
+ // @since 1.3.1 this should be used to add other things to the SQL
26
+ // instead of excluding posts
27
  $sql_where = apply_filters('bwp_gxs_post_where', '', 'page');
28
  $sql_where = str_replace('wposts', 'p', $sql_where);
29
 
32
  FROM ' . $wpdb->posts . " p
33
  WHERE p.post_status = 'publish'
34
  AND p.post_password = ''
35
+ AND p.post_type = 'page'"
36
+ . $exclude_post_sql
37
+ . $sql_where . '
38
  ORDER BY p.post_modified DESC';
39
 
40
  $latest_posts = $this->get_results($latest_post_query);
46
 
47
  $data = array();
48
 
49
+ // @since 1.4.0 try to get image ids as well
50
+ $image_ids = $this->get_image_ids_from_posts($latest_posts);
51
+
52
  for ($i = 0; $i < sizeof($latest_posts); $i++)
53
  {
54
  $post = $latest_posts[$i];
68
  $data['freq'] = $this->cal_frequency($post);
69
  $data['priority'] = $this->cal_priority($post, $data['freq']);
70
 
71
+ // prepare an image if there's any
72
+ if (isset($image_ids[$post->ID]))
73
+ $data['image'] = $this->get_image_data($image_ids[$post->ID]);
74
+
75
  $this->data[] = $data;
76
  }
77
 
src/modules/page_external.php ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright (c) 2011 Khang Minh <betterwp.net>
4
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE
5
+ * @package BWP Google XML Sitemaps
6
+ */
7
+
8
+ class BWP_GXS_MODULE_PAGE_EXTERNAL extends BWP_GXS_MODULE
9
+ {
10
+ public function __construct()
11
+ {
12
+ // @since 1.3.0 this method is empty
13
+ }
14
+
15
+ protected function build_data()
16
+ {
17
+ global $wpdb, $bwp_gxs;
18
+
19
+ // The structure of your external pages should be like the below sample item
20
+ // array('location' => '', 'lastmod' => '', 'priority' => '')
21
+ // Frequency will be calculated based on lastmod
22
+ $sample_pages = array(
23
+ array(
24
+ 'location' => home_url('a-page-not-belong-to-wordpress.html'),
25
+ 'lastmod' => '06/02/2011',
26
+ 'priority' => '1.0',
27
+ 'sample' => true // ignore this
28
+ ),
29
+ array(
30
+ 'location' => home_url('another-page-not-belong-to-wordpress.html'),
31
+ 'lastmod' => '05/02/2011',
32
+ 'priority' => '0.8',
33
+ 'sample' => true // ignore this
34
+ )
35
+ );
36
+
37
+ /**
38
+ * Filter the pages that are added to the external-page sitemap.
39
+ *
40
+ * @example hooks/filter_bwp_gxs_external_pages.php 2
41
+ *
42
+ * @param array $pages External pages to add.
43
+ *
44
+ * @return array List of external pages with following fields:
45
+ *
46
+ * * `location`
47
+ * - This field is **required**.
48
+ * - Must be an absolute url.
49
+ * - Have the same scheme and host as your Site Address.
50
+ * * `lastmod` Should follow the [PHP datetime
51
+ * formats](http://php.net/manual/en/datetime.formats.php). It can be a
52
+ * date, or a date with time.
53
+ * * `frequency` See
54
+ * http://www.sitemaps.org/protocol.html#changefreqdef. You can also
55
+ * set this to `auto`, in that case change frequency will be calculated
56
+ * using the last modified date (or date time) you provide.
57
+ * * `priority` See http://www.sitemaps.org/protocol.html#prioritydef
58
+ *
59
+ */
60
+ $external_pages = (array) apply_filters('bwp_gxs_external_pages', $sample_pages);
61
+
62
+ $data = array();
63
+
64
+ for ($i = 0; $i < sizeof($external_pages); $i++)
65
+ {
66
+ $page = $external_pages[$i];
67
+
68
+ $data['location'] = $page['location'];
69
+
70
+ $data['lastmod'] = isset($page['lastmod'])
71
+ ? $this->format_local_datetime($page['lastmod'])
72
+ : null;
73
+
74
+ if (isset($page['freq']))
75
+ {
76
+ $data['freq'] = $page['freq'] == 'auto'
77
+ ? $this->cal_frequency(false, $page['lastmod'])
78
+ : $page['freq'];
79
+ }
80
+ else
81
+ {
82
+ $data['freq'] = null;
83
+ }
84
+
85
+ $data['priority'] = isset($page['priority']) ? $page['priority'] : null;
86
+
87
+ $this->data[] = $data;
88
+ }
89
+ }
90
+ }
{includes → src}/modules/post.php RENAMED
@@ -1,10 +1,9 @@
1
  <?php
2
  /**
3
- * Copyright (c) 2014 Khang Minh <betterwp.net>
 
4
  * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE
5
  * @package BWP Google XML Sitemaps
6
- *
7
- * You can take this as a sample module, it is documented rather well ;)
8
  */
9
 
10
  class BWP_GXS_MODULE_POST extends BWP_GXS_MODULE
@@ -50,6 +49,70 @@ class BWP_GXS_MODULE_POST extends BWP_GXS_MODULE
50
  $this->post_type = get_post_type_object($this->requested);
51
  }
52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  /**
54
  * This is the main function that generates our data.
55
  *
@@ -65,22 +128,80 @@ class BWP_GXS_MODULE_POST extends BWP_GXS_MODULE
65
 
66
  $requested = $this->requested;
67
 
68
- // @since 1.3.0 use a different filter hook that expects an array instead
69
- $excluded_posts = apply_filters('bwp_gxs_excluded_posts', array(), $requested);
70
- $exclude_post_sql = sizeof($excluded_posts) > 0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  ? ' AND p.ID NOT IN (' . implode(',', $excluded_posts) . ') '
72
  : '';
73
 
74
- // @since 1.3.0 this should be used to add other things to the SQL
75
- // instead of excluding posts
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  $sql_where = apply_filters('bwp_gxs_post_where', '', $requested);
77
- $sql_where = str_replace('wposts', 'p', $sql_where); // @since 1.3.0 use a different alias for post table
78
 
 
 
 
 
 
 
79
  if ('post' == $requested && strpos($this->perma_struct, '%category%') !== false)
80
  {
81
- // If $requested is 'post' and this site uses %category% in
82
- // permalink structure, we will have to use a complex SQL query so
83
- // this plugin can scale up to millions of posts.
84
  // @since 1.3.0 do not fetch posts that are password-protected
85
  $latest_post_query = '
86
  SELECT *
@@ -88,27 +209,29 @@ class BWP_GXS_MODULE_POST extends BWP_GXS_MODULE
88
  INNER JOIN ' . $wpdb->posts . ' p
89
  ON tr.object_id = p.ID' . "
90
  AND p.post_status = 'publish'
91
- AND p.post_password = ''" . '
 
92
  INNER JOIN ' . $wpdb->term_taxonomy . ' tt
93
  ON tr.term_taxonomy_id = tt.term_taxonomy_id' . "
94
- AND tt.taxonomy = 'category'" . '
95
- , ' . $wpdb->terms . ' t
96
- WHERE tt.term_id = t.term_id '
97
- . "$exclude_post_sql"
98
- . "$sql_where" . '
 
99
  GROUP BY p.ID
100
- ORDER BY p.post_modified DESC';
101
  }
102
  else
103
  {
104
  // @since 1.3.0 do not fetch posts that are password-protected
105
  $latest_post_query = '
106
- SELECT *
107
  FROM ' . $wpdb->posts . " p
108
  WHERE p.post_status = 'publish'
109
  AND p.post_password = ''
110
  AND p.post_type = %s
111
- $exclude_post_sql
112
  $sql_where" . '
113
  ORDER BY p.post_modified DESC';
114
  }
@@ -129,8 +252,12 @@ class BWP_GXS_MODULE_POST extends BWP_GXS_MODULE
129
  // always init your $data
130
  $data = array();
131
 
 
 
 
132
  for ($i = 0; $i < sizeof($latest_posts); $i++)
133
  {
 
134
  $post = $latest_posts[$i];
135
 
136
  // init your $data with the previous item's data. This makes sure
@@ -149,7 +276,11 @@ class BWP_GXS_MODULE_POST extends BWP_GXS_MODULE
149
  $data['freq'] = $this->cal_frequency($post);
150
  $data['priority'] = $this->cal_priority($post, $data['freq']);
151
 
152
- // Pass data back to the plugin to handle
 
 
 
 
153
  $this->data[] = $data;
154
  }
155
 
1
  <?php
2
  /**
3
+ * Copyright (c) 2011 Khang Minh <betterwp.net>
4
+ *
5
  * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE
6
  * @package BWP Google XML Sitemaps
 
 
7
  */
8
 
9
  class BWP_GXS_MODULE_POST extends BWP_GXS_MODULE
49
  $this->post_type = get_post_type_object($this->requested);
50
  }
51
 
52
+ /**
53
+ * Get ids of the images attached with latest posts
54
+ *
55
+ * @param WP_Post[] $posts
56
+ * @return array
57
+ * @since 1.4.0
58
+ */
59
+ protected function get_image_ids_from_posts(array $posts)
60
+ {
61
+ $post_ids = array();
62
+ foreach ($posts as $post)
63
+ $post_ids[] = $post->ID;
64
+
65
+ if ($post_ids && $this->is_image_allowed())
66
+ {
67
+ global $wpdb;
68
+
69
+ $image_query = "
70
+ SELECT
71
+ pm.post_id,
72
+ pm.meta_value as image_id
73
+ FROM $wpdb->postmeta pm
74
+ WHERE pm.meta_key = '_thumbnail_id'
75
+ AND pm.post_id IN (" . implode(',', $post_ids) . ")
76
+ ";
77
+
78
+ // this will be an array that have:
79
+ // 1. post id as key
80
+ // 2. an object with image_id property which is the image id we need
81
+ $image_ids = $wpdb->get_results($image_query, OBJECT_K);
82
+
83
+ // convert image ids to a simple array of post id => image id
84
+ foreach ($image_ids as $key => $value)
85
+ $image_ids[$key] = $value->image_id;
86
+
87
+ // get posts without storing the returnd values, this is done to
88
+ // warm up the cache for later image-related operation
89
+ get_posts(array(
90
+ 'post_type' => 'attachment',
91
+ 'include' => array_values($image_ids)
92
+ ));
93
+
94
+ return $image_ids;
95
+ }
96
+ }
97
+
98
+ /**
99
+ * Get actual image data from a single post
100
+ *
101
+ * @param int $image_id
102
+ * @return mixed null|array that should have 'location', 'title' and 'caption'
103
+ * @since 1.4.0
104
+ */
105
+ protected function get_image_data($image_id)
106
+ {
107
+ $image = get_post($image_id);
108
+
109
+ return array(
110
+ 'location' => wp_get_attachment_thumb_url($image->ID),
111
+ 'title' => $image->post_title,
112
+ 'caption' => $image->post_excerpt
113
+ );
114
+ }
115
+
116
  /**
117
  * This is the main function that generates our data.
118
  *
128
 
129
  $requested = $this->requested;
130
 
131
+ /**
132
+ * Filter posts that are added to a post-based sitemaps.
133
+ *
134
+ * @example hooks/filter_bwp_gxs_excluded_posts.php 2
135
+ *
136
+ * @param array $post_ids Post IDs to exclude.
137
+ * @param string $post_type The post type being processed. See
138
+ * http://codex.wordpress.org/Function_Reference/register_post_type
139
+ * for more info.
140
+ *
141
+ * @since 1.3.0 Use a different filter hook that expects an array instead.
142
+ */
143
+ $excluded_posts = apply_filters('bwp_gxs_excluded_posts', array(), $requested);
144
+ $excluded_posts = $excluded_posts && is_array($excluded_posts) ? $excluded_posts : array();
145
+
146
+ // @since 1.4.0 if we need to exclude posts by terms, find all the
147
+ // posts that belong to excluded terms so we can later exclude them by
148
+ // their ids
149
+ $excluded_term_ids = apply_filters('bwp_gxs_excluded_terms', array(), null, true);
150
+ if ($bwp_gxs->options['enable_exclude_posts_by_terms'] == 'yes'
151
+ && $excluded_term_ids && is_array($excluded_term_ids)
152
+ ) {
153
+ $excluded_term_ids_sql = 'AND t.term_id IN (' . implode(',', $excluded_term_ids) . ')';
154
+
155
+ $excluded_posts_by_terms_sql = '
156
+ SELECT p.ID
157
+ FROM ' . $wpdb->posts . ' p
158
+ INNER JOIN ' . $wpdb->term_relationships . ' tr
159
+ ON tr.object_id = p.ID
160
+ INNER JOIN ' . $wpdb->term_taxonomy . ' tt
161
+ ON tr.term_taxonomy_id = tt.term_taxonomy_id
162
+ INNER JOIN ' . $wpdb->terms . ' t
163
+ ON tt.term_id = t.term_id' . "
164
+ WHERE p.post_status = 'publish'
165
+ AND p.post_password = ''
166
+ AND p.post_type = %s
167
+ $excluded_term_ids_sql
168
+ GROUP BY p.ID
169
+ ORDER BY p.post_modified DESC";
170
+
171
+ $excluded_posts_by_terms = $wpdb->get_col($wpdb->prepare($excluded_posts_by_terms_sql, $requested));
172
+ $excluded_posts = array_merge($excluded_posts, $excluded_posts_by_terms);
173
+ }
174
+
175
+ $excluded_posts_sql = sizeof($excluded_posts) > 0
176
  ? ' AND p.ID NOT IN (' . implode(',', $excluded_posts) . ') '
177
  : '';
178
 
179
+ /**
180
+ * Filter the WHERE part of a post module's query.
181
+ *
182
+ * @example hooks/filter_bwp_gxs_post_where.php 2
183
+ *
184
+ * @param string $where The `WHERE` part.
185
+ * @param string $post_type The current post type.
186
+ *
187
+ * @return string Make sure you use `p` as the table alias, for e.g.
188
+ * `WHERE p.post_password = 'password'`. The `wposts` alias is kept
189
+ * for backward-compatibility purpose only and can be removed without
190
+ * notice.
191
+ *
192
+ * @since 1.3.0 This should be used to add other things to the SQL
193
+ * instead of excluding posts.
194
+ */
195
  $sql_where = apply_filters('bwp_gxs_post_where', '', $requested);
 
196
 
197
+ // @since 1.3.0 use a different alias for post table
198
+ $sql_where = str_replace('wposts', 'p', $sql_where);
199
+
200
+ // If $requested is 'post' and this site uses %category% in
201
+ // permalink structure, we will have to use a complex SQL query so
202
+ // this plugin can scale up to millions of posts.
203
  if ('post' == $requested && strpos($this->perma_struct, '%category%') !== false)
204
  {
 
 
 
205
  // @since 1.3.0 do not fetch posts that are password-protected
206
  $latest_post_query = '
207
  SELECT *
209
  INNER JOIN ' . $wpdb->posts . ' p
210
  ON tr.object_id = p.ID' . "
211
  AND p.post_status = 'publish'
212
+ AND p.post_password = ''
213
+ AND p.post_type = %s" . '
214
  INNER JOIN ' . $wpdb->term_taxonomy . ' tt
215
  ON tr.term_taxonomy_id = tt.term_taxonomy_id' . "
216
+ AND tt.taxonomy = 'category'
217
+ INNER JOIN $wpdb->terms t
218
+ ON tt.term_id = t.term_id
219
+ WHERE 1 = 1
220
+ $excluded_posts_sql
221
+ $sql_where
222
  GROUP BY p.ID
223
+ ORDER BY p.post_modified DESC, p.ID DESC";
224
  }
225
  else
226
  {
227
  // @since 1.3.0 do not fetch posts that are password-protected
228
  $latest_post_query = '
229
+ SELECT p.*
230
  FROM ' . $wpdb->posts . " p
231
  WHERE p.post_status = 'publish'
232
  AND p.post_password = ''
233
  AND p.post_type = %s
234
+ $excluded_posts_sql
235
  $sql_where" . '
236
  ORDER BY p.post_modified DESC';
237
  }
252
  // always init your $data
253
  $data = array();
254
 
255
+ // @since 1.4.0 try to get image ids as well
256
+ $image_ids = $this->get_image_ids_from_posts($latest_posts);
257
+
258
  for ($i = 0; $i < sizeof($latest_posts); $i++)
259
  {
260
+ /* @var $post WP_Post */
261
  $post = $latest_posts[$i];
262
 
263
  // init your $data with the previous item's data. This makes sure
276
  $data['freq'] = $this->cal_frequency($post);
277
  $data['priority'] = $this->cal_priority($post, $data['freq']);
278
 
279
+ // prepare an image if there's any
280
+ if (isset($image_ids[$post->ID]))
281
+ $data['image'] = $this->get_image_data($image_ids[$post->ID]);
282
+
283
+ // pass data back to the plugin to handle
284
  $this->data[] = $data;
285
  }
286
 
{includes → src}/modules/post_attachment.php RENAMED
File without changes
src/modules/post_google_news.php ADDED
@@ -0,0 +1,312 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @copyright (c) 2012 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE
6
+ * @package BWP Google XML Sitemaps\Google News
7
+ */
8
+
9
+ class BWP_GXS_MODULE_POST_GOOGLE_NEWS extends BWP_GXS_MODULE_POST
10
+ {
11
+ public function __construct()
12
+ {
13
+ $this->type = 'news';
14
+ $this->perma_struct = get_option('permalink_structure');
15
+ }
16
+
17
+ /**
18
+ * Process the posts if Multi-term mode is enabled
19
+ */
20
+ private static function process_posts($posts, $news_terms, $news_term_action)
21
+ {
22
+ // this $post array surely contains duplicate posts, fortunately they
23
+ // are already sorted by post_date_gmt and ID, so we can group them
24
+ // here by IDs
25
+ $ord_num = 0;
26
+
27
+ $excluded_terms = 'inc' == $news_term_action ? array() : explode(',', $news_terms);
28
+
29
+ $processed_posts = array();
30
+
31
+ for ($i = 0; $i < sizeof($posts); $i++)
32
+ {
33
+ $post = $posts[$i];
34
+
35
+ if ($ord_num == $post->ID)
36
+ {
37
+ $cur_position = sizeof($processed_posts) - 1;
38
+
39
+ // nothing to do, continue
40
+ if ($cur_position < 0)
41
+ continue;
42
+
43
+ $current_post = $processed_posts[$cur_position];
44
+
45
+ // not correct post, continue
46
+ if ($current_post->ID != $ord_num)
47
+ continue;
48
+
49
+ // users choose to exclude terms, and this $post is assigned to
50
+ // one of those excluded terms
51
+ if (in_array($post->term_id, $excluded_terms)
52
+ || in_array($current_post->terms[0], $excluded_terms)
53
+ ) {
54
+ array_pop($processed_posts);
55
+ }
56
+ else
57
+ {
58
+ if (!in_array($post->term_id, $current_post->terms))
59
+ $current_post->terms[] = $post->term_id;
60
+
61
+ if (!in_array($post->name, $current_post->term_names))
62
+ $current_post->term_names[] = $post->name;
63
+ }
64
+
65
+ }
66
+ else
67
+ {
68
+ $post->terms = array($post->term_id);
69
+ $post->term_names = array($post->name);
70
+
71
+ $processed_posts[] = $post;
72
+
73
+ $ord_num = $post->ID;
74
+ }
75
+ }
76
+
77
+ return $processed_posts;
78
+ }
79
+
80
+ /**
81
+ * Google news articles should be published in the last two days
82
+ *
83
+ * @link http://www.google.com/support/news_pub/bin/answer.py?answer=74288
84
+ */
85
+ private static function news_time($age)
86
+ {
87
+ $age = (int) $age;
88
+ $days = $age > 1 ? $age . ' days' : $age . ' day';
89
+ $news_post_date = new DateTime('-' . $days, new DateTimeZone('UTC'));
90
+ return $news_post_date->format('Y-m-d H:i:s');
91
+ }
92
+
93
+ /**
94
+ * Map keyword in site language to its English counterpart
95
+ */
96
+ private static function map_keyword($keyword)
97
+ {
98
+ /**
99
+ * Filter to map your categories in your language to Google News's
100
+ * suggested categories in English.
101
+ *
102
+ * See https://support.google.com/news/publisher/answer/116037 for
103
+ * more info.
104
+ *
105
+ * @example hooks/filter_bwp_gxs_news_keyword_map.php 2
106
+ *
107
+ * @param array $keywords_map List of mappings.
108
+ *
109
+ * @return array An array with your local keywords as keys and their
110
+ * English counterparts as values.
111
+ */
112
+ $keywords_map = apply_filters('bwp_gxs_news_keyword_map', array());
113
+
114
+ return !empty($keywords_map[$keyword]) ? trim($keywords_map[$keyword]) : $keyword;
115
+ }
116
+
117
+ private function get_genres_from_post($post)
118
+ {
119
+ global $bwp_gxs;
120
+
121
+ $genres_cache = array();
122
+ $news_genres = $bwp_gxs->options['input_news_genres'];
123
+
124
+ if (isset($post->terms))
125
+ {
126
+ $genres_cache_key = md5(implode('|', $post->terms));
127
+
128
+ if (!isset($genres_cache[$genres_cache_key])
129
+ || !is_array($genres_cache[$genres_cache_key])
130
+ ) {
131
+ $genres_cache[$genres_cache_key] = array();
132
+
133
+ foreach ($post->terms as $term_id)
134
+ {
135
+ $cur_genres = !empty($news_genres['term_' . $term_id])
136
+ ? explode(', ', $news_genres['term_' . $term_id])
137
+ : '';
138
+
139
+ if (is_array($cur_genres))
140
+ {
141
+ foreach ($cur_genres as $cur_genre)
142
+ if (!in_array($cur_genre, $genres_cache[$genres_cache_key]))
143
+ $genres_cache[$genres_cache_key][] = $cur_genre;
144
+ }
145
+ }
146
+ }
147
+
148
+ return implode(', ', $genres_cache[$genres_cache_key]);
149
+ }
150
+ else
151
+ {
152
+ return !empty($news_genres['term_' . $post->term_id])
153
+ ? $news_genres['term_' . $post->term_id]
154
+ : '';
155
+ }
156
+ }
157
+
158
+ private function get_keywords_from_post($post)
159
+ {
160
+ global $bwp_gxs;
161
+
162
+ if ('yes' != $bwp_gxs->options['enable_news_keywords'])
163
+ return;
164
+
165
+ $news_taxonomy = $bwp_gxs->options['select_news_taxonomy'];
166
+
167
+ $keywords = array();
168
+ $keyword_source = $bwp_gxs->options['select_news_keyword_source'];
169
+
170
+ // if we take keywords from the selected news taxonomy, or the
171
+ // selected keyword source is the same as the selected news
172
+ // taxonomy, they have already been fetched
173
+ if (empty($keyword_source) || $keyword_source == $news_taxonomy)
174
+ {
175
+ // we have multiple terms to use as keywords
176
+ if (isset($post->term_names))
177
+ {
178
+ foreach ($post->term_names as $term_name)
179
+ $keywords[] = self::map_keyword($term_name);
180
+ }
181
+ else
182
+ {
183
+ // only one term, so only one keyword
184
+ $keywords[] = self::map_keyword($post->name);
185
+ }
186
+ }
187
+ else
188
+ {
189
+ $terms = get_the_terms($post->ID, $keyword_source);
190
+
191
+ if (is_array($terms))
192
+ {
193
+ foreach ($terms as $term)
194
+ $keywords[] = self::map_keyword($term->name);
195
+ }
196
+ }
197
+
198
+ return implode(', ', $keywords);
199
+ }
200
+
201
+ protected function generate_data()
202
+ {
203
+ global $wpdb, $post, $bwp_gxs;
204
+
205
+ $lang = $bwp_gxs->options['select_news_lang'];
206
+
207
+ // @since 1.4.0 support custom post type for google news sitemap
208
+ $news_post_type = $bwp_gxs->options['select_news_post_type'];
209
+ $news_taxonomy = $bwp_gxs->options['select_news_taxonomy'];
210
+
211
+ $news_terms = $bwp_gxs->options['select_news_cats'];
212
+ $news_term_action = $bwp_gxs->options['select_news_cat_action'];
213
+
214
+ if ($news_term_action == 'inc' && empty($news_terms))
215
+ {
216
+ // if we have to look for news post with certain terms, but news
217
+ // term list is empty, nothing to do. This should stop the SQL
218
+ // cycling btw.
219
+ return false;
220
+ }
221
+
222
+ $term_query = '';
223
+ if ($news_terms)
224
+ {
225
+ $term_query = ' AND t.term_id NOT IN (' . $news_terms . ')';
226
+ $term_query = $news_term_action == 'inc'
227
+ ? str_replace('NOT IN', 'IN', $term_query) : $term_query;
228
+ $term_query = $news_term_action != 'inc'
229
+ && $bwp_gxs->options['enable_news_multicat'] == 'yes'
230
+ ? '' : $term_query;
231
+ }
232
+
233
+ // publishing date restriction
234
+ $publishing_date_query = !empty($bwp_gxs->options['input_news_age'])
235
+ ? $wpdb->prepare('AND p.post_date_gmt > %s', self::news_time($bwp_gxs->options['input_news_age']))
236
+ : '';
237
+
238
+ $group_by = empty($bwp_gxs->options['enable_news_multicat'])
239
+ ? ' GROUP BY p.ID' : '';
240
+
241
+ $latest_post_query = '
242
+ SELECT *
243
+ FROM ' . $wpdb->term_relationships . ' tr
244
+ INNER JOIN ' . $wpdb->posts . ' p
245
+ ON tr.object_id = p.ID' . "
246
+ AND p.post_type = %s
247
+ AND p.post_status = 'publish'
248
+ AND p.post_password = ''
249
+ $publishing_date_query" . '
250
+ INNER JOIN ' . $wpdb->term_taxonomy . ' tt
251
+ ON tr.term_taxonomy_id = tt.term_taxonomy_id' . "
252
+ AND tt.taxonomy = %s" . '
253
+ INNER JOIN ' . $wpdb->terms . ' t
254
+ ON tt.term_id = t.term_id
255
+ WHERE 1 = 1 '
256
+ . $term_query
257
+ . $group_by . '
258
+ ORDER BY p.post_date_gmt DESC, p.ID DESC
259
+ LIMIT 0, ' . $this->limit;
260
+
261
+ $latest_posts = $wpdb->get_results(
262
+ $wpdb->prepare(
263
+ $latest_post_query,
264
+ $news_post_type,
265
+ $news_taxonomy
266
+ )
267
+ );
268
+
269
+ if ('yes' == $bwp_gxs->options['enable_news_multicat'])
270
+ {
271
+ // if Multi-term mode is enabled we will need to process fetched posts
272
+ $latest_posts = self::process_posts($latest_posts, $news_terms, $news_term_action);
273
+ }
274
+
275
+ if (!isset($latest_posts) || 0 == sizeof($latest_posts))
276
+ return false;
277
+
278
+ $using_permalinks = $this->using_permalinks();
279
+
280
+ // @since 1.4.0 try to get image ids as well
281
+ $image_ids = $this->get_image_ids_from_posts($latest_posts);
282
+
283
+ for ($i = 0; $i < sizeof($latest_posts); $i++)
284
+ {
285
+ $post = $latest_posts[$i];
286
+
287
+ $data = array();
288
+
289
+ // @since 1.1.0 - get permalink independently, as we don't need
290
+ // caching or some complicated stuff
291
+ if ($using_permalinks && empty($post->post_name))
292
+ $data['location'] = '';
293
+ else
294
+ $data['location'] = $this->get_permalink();
295
+
296
+ $data['language'] = $lang;
297
+ $data['genres'] = $this->get_genres_from_post($post);
298
+ $data['pub_date'] = $this->get_published_datetime($post);
299
+ $data['title'] = $post->post_title;
300
+ $data['keywords'] = $this->get_keywords_from_post($post);
301
+
302
+ // prepare an image if there's any
303
+ if (isset($image_ids[$post->ID]))
304
+ $data['image'] = $this->get_image_data($image_ids[$post->ID]);
305
+
306
+ $this->data[] = $data;
307
+ }
308
+
309
+ // @since 1.4.0 we don't use SQL cyclying for google news sitemap
310
+ return false;
311
+ }
312
+ }
{includes → src}/modules/post_most_popular.php RENAMED
@@ -1,11 +1,9 @@
1
  <?php
2
  /**
3
- * Copyright (c) 2014 Khang Minh <betterwp.net>
 
4
  * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE
5
  * @package BWP Google XML Sitemaps
6
- *
7
- * This is a sample custom module. Some if about the module developer here
8
- * would be nice!
9
  */
10
 
11
  class BWP_GXS_MODULE_POST_MOST_POPULAR extends BWP_GXS_MODULE
@@ -39,7 +37,7 @@ class BWP_GXS_MODULE_POST_MOST_POPULAR extends BWP_GXS_MODULE
39
  WHERE post_status = 'publish'
40
  AND post_type = 'post'
41
  AND comment_count > 2" . '
42
- ORDER BY comment_count, post_modified DESC';
43
 
44
  // Use $this->get_results instead of $wpdb->get_results, remember to
45
  // escape your query using $wpdb->prepare or $wpdb->escape,
@@ -50,7 +48,7 @@ class BWP_GXS_MODULE_POST_MOST_POPULAR extends BWP_GXS_MODULE
50
  // there is nothing to loop through anymore we return false so the
51
  // cycling can stop.
52
  if (!isset($latest_posts) || 0 == sizeof($latest_posts))
53
- return false;
54
 
55
  $using_permalinks = $this->using_permalinks();
56
 
1
  <?php
2
  /**
3
+ * Copyright (c) 2011 Khang Minh <betterwp.net>
4
+ *
5
  * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE
6
  * @package BWP Google XML Sitemaps
 
 
 
7
  */
8
 
9
  class BWP_GXS_MODULE_POST_MOST_POPULAR extends BWP_GXS_MODULE
37
  WHERE post_status = 'publish'
38
  AND post_type = 'post'
39
  AND comment_count > 2" . '
40
+ ORDER BY comment_count DESC, post_modified DESC';
41
 
42
  // Use $this->get_results instead of $wpdb->get_results, remember to
43
  // escape your query using $wpdb->prepare or $wpdb->escape,
48
  // there is nothing to loop through anymore we return false so the
49
  // cycling can stop.
50
  if (!isset($latest_posts) || 0 == sizeof($latest_posts))
51
+ return false;
52
 
53
  $using_permalinks = $this->using_permalinks();
54
 
{includes → src}/modules/site.php RENAMED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- * Copyright (c) 2014 Khang Minh <betterwp.net>
4
  * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE
5
  */
6
 
@@ -15,8 +15,8 @@ class BWP_GXS_MODULE_SITE extends BWP_GXS_MODULE
15
  {
16
  global $wpdb, $blog_id;
17
 
18
- if (!BWP_SIMPLE_GXS::is_multisite()
19
- || BWP_SIMPLE_GXS::is_subdomain_install()
20
  || (!empty($blog_id) && $blog_id > 1)
21
  ) {
22
  // if this is not a multisite installation,
@@ -38,6 +38,15 @@ class BWP_GXS_MODULE_SITE extends BWP_GXS_MODULE
38
  $data['location'] = trailingslashit(home_url());
39
  $data['lastmod'] = $this->get_lastmod($last_post);
40
 
 
 
 
 
 
 
 
 
 
41
  $data['freq'] = apply_filters('bwp_gxs_freq_site',
42
  $this->cal_frequency(false, $data['lastmod']), $blog_id
43
  );
@@ -98,7 +107,7 @@ class BWP_GXS_MODULE_SITE extends BWP_GXS_MODULE
98
  $path = $blog->path;
99
 
100
  $data['location'] = $scheme . $blog->domain . $path;
101
- $data['lastmod'] = $this->format_lastmod(strtotime($blog->last_updated));
102
 
103
  $data['freq'] = apply_filters('bwp_gxs_freq_site',
104
  $this->cal_frequency(false, $blog->last_updated), $blog->blog_id
1
  <?php
2
  /**
3
+ * Copyright (c) 2011 Khang Minh <betterwp.net>
4
  * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE
5
  */
6
 
15
  {
16
  global $wpdb, $blog_id;
17
 
18
+ if (!BWP_Sitemaps::is_multisite()
19
+ || BWP_Sitemaps::is_subdomain_install()
20
  || (!empty($blog_id) && $blog_id > 1)
21
  ) {
22
  // if this is not a multisite installation,
38
  $data['location'] = trailingslashit(home_url());
39
  $data['lastmod'] = $this->get_lastmod($last_post);
40
 
41
+ /**
42
+ * Filter the frequency of a website in the Site Address sitemap.
43
+ *
44
+ * @param string $frequency The change frequency to filter.
45
+ * @param int $blog_id The current blog id.
46
+ *
47
+ * @return string Should be one of the change frequencies listed
48
+ * here: http://www.sitemaps.org/protocol.html#changefreqdef
49
+ */
50
  $data['freq'] = apply_filters('bwp_gxs_freq_site',
51
  $this->cal_frequency(false, $data['lastmod']), $blog_id
52
  );
107
  $path = $blog->path;
108
 
109
  $data['location'] = $scheme . $blog->domain . $path;
110
+ $data['lastmod'] = $this->format_local_datetime($blog->last_updated);
111
 
112
  $data['freq'] = apply_filters('bwp_gxs_freq_site',
113
  $this->cal_frequency(false, $blog->last_updated), $blog->blog_id
{includes → src}/modules/sitemapindex.php RENAMED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- * Copyright (c) 2014 Khang Minh <betterwp.net>
4
  * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE
5
  * @package BWP Google XML Sitemaps
6
  */
@@ -15,9 +15,7 @@ class BWP_GXS_MODULE_INDEX extends BWP_GXS_MODULE
15
  // sitemapindex, along with their data
16
  $this->requested_modules = $requested;
17
 
18
- // @since 1.3.0 get sitemap log to populate sitemaps' last modified date data
19
- global $bwp_gxs;
20
- $this->sitemap_logs = $bwp_gxs->get_sitemap_logs();
21
  }
22
 
23
  /**
@@ -27,21 +25,17 @@ class BWP_GXS_MODULE_INDEX extends BWP_GXS_MODULE
27
  */
28
  private function _get_sitemap_lastmod($sitemap_name)
29
  {
30
- if (!empty($this->sitemap_logs[$sitemap_name]))
31
- {
32
- // there's a log entry in db, take last modified date from it in
33
- // Unix timestamp format
34
- return $this->sitemap_logs[$sitemap_name];
35
- }
36
 
37
- $sitemap_file = bwp_gxs_get_filename($sitemap_name);
 
 
38
 
 
 
 
39
  if ($filemtime = @filemtime($sitemap_file))
40
- {
41
- // if we can get a last modified Unix timestamp from the
42
- // filesystem, use that one as a last resort
43
  return $filemtime;
44
- }
45
 
46
  // all fail, no lastmod should be display
47
  return false;
@@ -119,27 +113,21 @@ class BWP_GXS_MODULE_INDEX extends BWP_GXS_MODULE
119
  'page_external'
120
  );
121
 
 
 
 
 
122
  if (in_array($item['module'], array('post', 'page'))
123
  && !in_array($module_name, $custom_modules)
124
  ) {
125
- // handle normal post-based sitemaps, including the somewhat
126
- // special 'page' sitemap, but excluding any custom modules,
127
- // i.e. modules that are registered under post-based sitemap but
128
- // should not be checked for splitting functionalty
129
  $post_type = $item['sub_module'];
130
 
131
- if (empty($post_count_array[$post_type]))
132
- {
133
- // @since 1.3.0 if this post sitemap does not any item,
134
- // ignore it completely
135
- continue;
136
- }
137
-
138
  $split_limit = empty($bwp_gxs->options['input_split_limit_post'])
139
  ? $bwp_gxs->options['input_item_limit']
140
  : $bwp_gxs->options['input_split_limit_post'];
141
 
142
  if ('yes' == $bwp_gxs->options['enable_sitemap_split_post']
 
143
  && $post_count_array[$post_type] > $split_limit
144
  ) {
145
  // if we have a matching post_type and the total number
@@ -158,7 +146,19 @@ class BWP_GXS_MODULE_INDEX extends BWP_GXS_MODULE
158
  $data['location'] = $this->get_sitemap_url($sitemap_name);
159
 
160
  $lastmod = $this->_get_sitemap_lastmod($sitemap_name);
161
- $data['lastmod'] = $lastmod ? $this->format_lastmod($lastmod) : '';
 
 
 
 
 
 
 
 
 
 
 
 
162
  $data['lastmod'] = apply_filters('bwp_gxs_sitemap_lastmod', $data['lastmod'], $lastmod, $item, $i);
163
 
164
  $this->data[] = $data;
@@ -176,11 +176,35 @@ class BWP_GXS_MODULE_INDEX extends BWP_GXS_MODULE
176
  // modified date for a sitemap file.
177
  $lastmod = $this->_get_sitemap_lastmod($sitemap_name);
178
 
179
- $data['lastmod'] = $lastmod ? $this->format_lastmod($lastmod) : '';
180
  $data['lastmod'] = apply_filters('bwp_gxs_sitemap_lastmod', $data['lastmod'], $lastmod, $item, 0);
181
 
182
  $this->data[] = $data;
183
  }
184
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
185
  }
186
  }
1
  <?php
2
  /**
3
+ * Copyright (c) 2011 Khang Minh <betterwp.net>
4
  * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE
5
  * @package BWP Google XML Sitemaps
6
  */
15
  // sitemapindex, along with their data
16
  $this->requested_modules = $requested;
17
 
18
+ $this->type = 'index';
 
 
19
  }
20
 
21
  /**
25
  */
26
  private function _get_sitemap_lastmod($sitemap_name)
27
  {
28
+ global $bwp_gxs;
 
 
 
 
 
29
 
30
+ // try to find last modified timestamp from a log entry in db
31
+ if ($sitemap_log = $bwp_gxs->get_sitemap_logger()->get_sitemap_log_item($sitemap_name))
32
+ return $sitemap_log->get_local_timestamp();
33
 
34
+ // if we can get a last modified Unix timestamp from the filesystem,
35
+ // use that one as a last resort
36
+ $sitemap_file = bwp_gxs_get_filename($sitemap_name);
37
  if ($filemtime = @filemtime($sitemap_file))
 
 
 
38
  return $filemtime;
 
39
 
40
  // all fail, no lastmod should be display
41
  return false;
113
  'page_external'
114
  );
115
 
116
+ // handle normal post-based sitemaps, including the somewhat
117
+ // special 'page' sitemap, but excluding any custom modules,
118
+ // i.e. modules that are registered under post-based sitemap but
119
+ // should not be checked for splitting functionalty
120
  if (in_array($item['module'], array('post', 'page'))
121
  && !in_array($module_name, $custom_modules)
122
  ) {
 
 
 
 
123
  $post_type = $item['sub_module'];
124
 
 
 
 
 
 
 
 
125
  $split_limit = empty($bwp_gxs->options['input_split_limit_post'])
126
  ? $bwp_gxs->options['input_item_limit']
127
  : $bwp_gxs->options['input_split_limit_post'];
128
 
129
  if ('yes' == $bwp_gxs->options['enable_sitemap_split_post']
130
+ && !empty($post_count_array[$post_type])
131
  && $post_count_array[$post_type] > $split_limit
132
  ) {
133
  // if we have a matching post_type and the total number
146
  $data['location'] = $this->get_sitemap_url($sitemap_name);
147
 
148
  $lastmod = $this->_get_sitemap_lastmod($sitemap_name);
149
+ $data['lastmod'] = $lastmod ? $this->format_local_datetime($lastmod) : '';
150
+
151
+ /**
152
+ * Filter last modified datetime of a sitemap entry in a sitemap index.
153
+ *
154
+ * @param string $formatted_lastmod Formatted last modified datetime, example: 2015-12-27 12:00:00.
155
+ * @param int $lastmod Last modified datetime in [Unix Timestamp](http://google.com).
156
+ * @param array $item The sitemap item being built.
157
+ * @param int $part Current sitemap part (when splitting post-based sitemaps).
158
+ *
159
+ * @return string A valid datetime, for a list of supported datetime
160
+ * format, see http://php.net/manual/en/datetime.formats.php
161
+ */
162
  $data['lastmod'] = apply_filters('bwp_gxs_sitemap_lastmod', $data['lastmod'], $lastmod, $item, $i);
163
 
164
  $this->data[] = $data;
176
  // modified date for a sitemap file.
177
  $lastmod = $this->_get_sitemap_lastmod($sitemap_name);
178
 
179
+ $data['lastmod'] = $lastmod ? $this->format_local_datetime($lastmod) : '';
180
  $data['lastmod'] = apply_filters('bwp_gxs_sitemap_lastmod', $data['lastmod'], $lastmod, $item, 0);
181
 
182
  $this->data[] = $data;
183
  }
184
  }
185
+
186
+ /**
187
+ * Filter external sitemaps to be added in the sitemap index.
188
+ *
189
+ * This filter hook allows you to add sitemaps that are not handled by
190
+ * BWP GXS to the sitemap index.
191
+ *
192
+ * @param array $external_sitemaps Sitemaps to add.
193
+ * @since 1.4.0
194
+ */
195
+ $external_sitemaps = (array) apply_filters('bwp_gxs_external_sitemaps', array());
196
+ foreach ($external_sitemaps as $external_sitemap)
197
+ {
198
+ $data = array();
199
+
200
+ if (empty($external_sitemap['location']))
201
+ continue;
202
+
203
+ $data['location'] = $external_sitemap['location'];
204
+ $data['lastmod'] = !empty($external_sitemap['lastmod'])
205
+ ? $this->format_local_datetime($external_sitemap['lastmod']) : '';
206
+
207
+ $this->data[] = $data;
208
+ }
209
  }
210
  }
{includes → src}/modules/taxonomy.php RENAMED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- * Copyright (c) 2014 Khang Minh <betterwp.net>
4
  * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE
5
  * @package BWP Google XML Sitemaps
6
  */
@@ -44,13 +44,54 @@ class BWP_GXS_MODULE_TAXONOMY extends BWP_GXS_MODULE
44
  if (!isset($latest_posts) || 0 == sizeof($latest_posts))
45
  return false;
46
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  $term_query = '
48
  SELECT t.*, tt.*
49
  FROM ' . $wpdb->terms . ' as t
50
  INNER JOIN ' . $wpdb->term_taxonomy . ' as tt
51
  ON t.term_id = tt.term_id
52
  WHERE tt.taxonomy = %s
53
- AND tt.count > 0
 
 
54
  ORDER BY t.term_id DESC';
55
 
56
  $terms = $this->get_results($wpdb->prepare($term_query, $requested));
@@ -58,12 +99,6 @@ class BWP_GXS_MODULE_TAXONOMY extends BWP_GXS_MODULE
58
  if (!isset($terms) || 0 == sizeof($terms))
59
  return false;
60
 
61
- // can be something like array('cat1', 'cat2', 'cat3')
62
- // @deprecated 1.3.0
63
- $exclude_terms = (array) apply_filters('bwp_gxs_term_exclude', array(), $requested);
64
- // @since 1.3.0 use `bwp_gxs_excluded_terms` instead
65
- $exclude_terms = (array) apply_filters('bwp_gxs_excluded_terms', $exclude_terms, $requested);
66
-
67
  // build an array with term_id as key
68
  $term2post = array();
69
 
@@ -83,9 +118,6 @@ class BWP_GXS_MODULE_TAXONOMY extends BWP_GXS_MODULE
83
  {
84
  $term = $terms[$i];
85
 
86
- if (in_array($term->slug, $exclude_terms))
87
- continue;
88
-
89
  $data = $this->init_data($data);
90
 
91
  $data['location'] = $this->get_term_link($term, $requested);
1
  <?php
2
  /**
3
+ * Copyright (c) 2011 Khang Minh <betterwp.net>
4
  * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE
5
  * @package BWP Google XML Sitemaps
6
  */
44
  if (!isset($latest_posts) || 0 == sizeof($latest_posts))
45
  return false;
46
 
47
+ /**
48
+ * Filter terms that are added to a taxonomy-based sitemaps.
49
+ *
50
+ * @example hooks/filter_bwp_gxs_excluded_terms.php 2
51
+ *
52
+ * @param array $term_ids Term IDs to exclude.
53
+ * @param string $taxonomy The current taxonomy. See
54
+ * http://codex.wordpress.org/Function_Reference/register_taxonomy for
55
+ * more info.
56
+ *
57
+ * @since 1.3.0
58
+ */
59
+ $excluded_term_ids = apply_filters('bwp_gxs_excluded_terms', array(), $requested);
60
+
61
+ $excluded_term_ids_sql = count($excluded_term_ids) > 0
62
+ ? ' AND t.term_id NOT IN (' . implode(',', array_map('intval', $excluded_term_ids)) . ') ' : '';
63
+
64
+ // @deprecated 1.3.0, use `bwp_gxs_excluded_term_slugs` instead
65
+ $excluded_terms = apply_filters('bwp_gxs_term_exclude', array(), $requested);
66
+
67
+ /**
68
+ * Filter terms that are added to a taxonomy-based sitemaps using their slugs.
69
+ *
70
+ * @example hooks/filter_bwp_gxs_excluded_term_slugs.php 2
71
+ *
72
+ * @param array $term_slugs Term slugs to exclude, e.g. 'tag1', 'category-2' etc.
73
+ * @param string $taxonomy The current taxonomy.
74
+ *
75
+ * @since 1.4.0
76
+ */
77
+ $excluded_term_slugs = apply_filters('bwp_gxs_excluded_term_slugs', $excluded_terms, $requested);
78
+ $excluded_term_slugs_placeholders = array_fill(0, count($excluded_term_slugs), '%s');
79
+
80
+ $excluded_term_slugs_sql = count($excluded_term_slugs) > 0
81
+ ? ' AND t.slug NOT IN (' . implode(',', $excluded_term_slugs_placeholders) . ') ' : '';
82
+
83
+ $excluded_term_slugs_sql = !empty($excluded_term_slugs_sql)
84
+ ? $wpdb->prepare($excluded_term_slugs_sql, $excluded_term_slugs) : '';
85
+
86
  $term_query = '
87
  SELECT t.*, tt.*
88
  FROM ' . $wpdb->terms . ' as t
89
  INNER JOIN ' . $wpdb->term_taxonomy . ' as tt
90
  ON t.term_id = tt.term_id
91
  WHERE tt.taxonomy = %s
92
+ AND tt.count > 0 '
93
+ . $excluded_term_ids_sql
94
+ . $excluded_term_slugs_sql . '
95
  ORDER BY t.term_id DESC';
96
 
97
  $terms = $this->get_results($wpdb->prepare($term_query, $requested));
99
  if (!isset($terms) || 0 == sizeof($terms))
100
  return false;
101
 
 
 
 
 
 
 
102
  // build an array with term_id as key
103
  $term2post = array();
104
 
118
  {
119
  $term = $terms[$i];
120
 
 
 
 
121
  $data = $this->init_data($data);
122
 
123
  $data['location'] = $this->get_term_link($term, $requested);
src/phpunit/provider-unit-testcase.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ use \Mockery as Mockery;
9
+
10
+ /**
11
+ * @author Khang Minh <contact@betterwp.net>
12
+ */
13
+ abstract class BWP_Sitemaps_PHPUnit_Provider_Unit_TestCase extends PHPUnit_Framework_TestCase
14
+ {
15
+ protected $bridge;
16
+
17
+ protected $cache;
18
+
19
+ protected $plugin;
20
+
21
+ protected function setUp()
22
+ {
23
+ $this->bridge = Mockery::mock('BWP_WP_Bridge');
24
+
25
+ $this->cache = Mockery::mock('BWP_Cache');
26
+
27
+ $this->cache
28
+ ->shouldReceive('get')
29
+ ->andReturn(false)
30
+ ->byDefault();
31
+
32
+ $this->plugin = Mockery::mock('BWP_Sitemaps');
33
+
34
+ $this->plugin
35
+ ->shouldReceive('get_bridge')
36
+ ->andReturn($this->bridge)
37
+ ->byDefault();
38
+ }
39
+
40
+ protected function tearDown()
41
+ {
42
+ }
43
+ }
src/phpunit/wp-functional-testcase.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ abstract class BWP_Sitemaps_PHPUnit_WP_Functional_TestCase extends BWP_Framework_PHPUnit_WP_Functional_TestCase
12
+ {
13
+ protected $plugin;
14
+
15
+ public function setUp()
16
+ {
17
+ parent::setUp();
18
+
19
+ global $bwp_gxs;
20
+ $this->plugin = $bwp_gxs;
21
+ }
22
+
23
+ public function get_plugin_under_test()
24
+ {
25
+ $root_dir = dirname(dirname(dirname(__FILE__)));
26
+
27
+ return array(
28
+ $root_dir . '/bwp-gxs.php' => 'bwp-google-xml-sitemaps/bwp-gxs.php'
29
+ );
30
+ }
31
+
32
+ protected function create_post($post_type = 'post')
33
+ {
34
+ return $this->factory->post->create_and_get(array(
35
+ 'post_type' => $post_type
36
+ ));
37
+ }
38
+
39
+ protected function create_posts($post_type = 'post', $count = 5, $post_date_gmt = null)
40
+ {
41
+ return $this->factory->post->create_many($count, array_merge(array(
42
+ 'post_type' => $post_type
43
+ ), $post_date_gmt ? array('post_date_gmt' => $post_date_gmt) : array()));
44
+ }
45
+
46
+ protected function create_terms($taxonomy = 'category', $count = 5)
47
+ {
48
+ return $this->factory->term->create_many($count, array(
49
+ 'taxonomy' => $taxonomy,
50
+ 'slug' => $taxonomy
51
+ ));
52
+ }
53
+ }
src/provider/excluder.php ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ class BWP_Sitemaps_Excluder
12
+ {
13
+ protected $bridge;
14
+
15
+ protected $cache;
16
+
17
+ protected $cache_key;
18
+
19
+ protected $storage_key;
20
+
21
+ public function __construct(
22
+ BWP_WP_Bridge $bridge,
23
+ BWP_Cache $cache,
24
+ $cache_key,
25
+ $storage_key)
26
+ {
27
+ $this->bridge = $bridge;
28
+ $this->cache = $cache;
29
+
30
+ $this->cache_key = $cache_key;
31
+ $this->storage_key = $storage_key;
32
+ }
33
+
34
+ /**
35
+ * Get currently excluded items.
36
+ *
37
+ * The result of this function is cached using {@see BWP_Cache}.
38
+ *
39
+ * @param string $group default to get all, when expected items are posts,
40
+ * `$group` is actually post type, when expected items
41
+ * are terms, `$group` is taxonomy.
42
+ * @param bool $flatten whether to flatten the items into a one dimensional
43
+ * array of ids instead of grouping by `$group`. To use
44
+ * this `$group` must be set to `NULL`.
45
+ *
46
+ * @return array
47
+ * * An array of item ids if `$group` is provided
48
+ * * An array of group => item ids string (comma separated) otherwise, example:
49
+ * ```
50
+ * array(
51
+ * 'post' => '1,2,3,4',
52
+ * 'movie' => '5,6,7,8'
53
+ * )
54
+ * ```
55
+ *
56
+ * @uses BWP_Cache
57
+ */
58
+ public function get_excluded_items($group = null, $flatten = false)
59
+ {
60
+ if (! ($excluded_items = $this->cache->get($this->cache_key))) {
61
+ if (! ($excluded_items = $this->bridge->get_option($this->storage_key))) {
62
+ return array();
63
+ }
64
+
65
+ // cache all excluded items
66
+ $this->cache->set($this->cache_key, $excluded_items);
67
+ }
68
+
69
+ // return all excluded items with group if no group is specified
70
+ if (is_null($group)) {
71
+ // need to flatten into a one dimensional array
72
+ if ($flatten) {
73
+ $excluded_items_flattened = array();
74
+
75
+ foreach ($excluded_items as $_group => $_group_items) {
76
+ // group has no items, nothing to do
77
+ if (! $_group_items) {
78
+ continue;
79
+ }
80
+
81
+ $excluded_items_flattened = array_merge(
82
+ $excluded_items_flattened,
83
+ array_map('intval', explode(',', $_group_items))
84
+ );
85
+ }
86
+
87
+ return $excluded_items_flattened;
88
+ }
89
+
90
+ return $excluded_items;
91
+ }
92
+
93
+ // return excluded items for a specific group, item ids are stored in a
94
+ // comma separated string
95
+ $excluded_items = !empty($excluded_items[$group])
96
+ ? explode(',', $excluded_items[$group]) : array();
97
+
98
+ return $excluded_items;
99
+ }
100
+
101
+ /**
102
+ * Update excluded items.
103
+ *
104
+ * @param string $group
105
+ * @param array $ids all item ids under specified `$group` that should be excluded
106
+ */
107
+ public function update_excluded_items($group, array $ids)
108
+ {
109
+ // post ids are stored in a comma separated string
110
+ $items_to_exclude = implode(',', $ids);
111
+
112
+ $excluded_items = $this->get_excluded_items();
113
+ $excluded_items[$group] = $items_to_exclude;
114
+
115
+ $this->bridge->update_option($this->storage_key, $excluded_items);
116
+ $this->cache->set($this->cache_key, $excluded_items);
117
+ }
118
+ }
src/provider/external-page.php ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ class BWP_Sitemaps_Provider_ExternalPage
12
+ {
13
+ protected $plugin;
14
+
15
+ protected $bridge;
16
+
17
+ protected $storage_key;
18
+
19
+ public function __construct(BWP_Sitemaps $plugin, $storage_key)
20
+ {
21
+ $this->plugin = $plugin;
22
+ $this->bridge = $plugin->get_bridge();
23
+
24
+ $this->storage_key = $storage_key;
25
+ }
26
+
27
+ /**
28
+ * Get external pages
29
+ *
30
+ * @param int $limit default = null i.e. get all pages
31
+ * @return array an associative array of 'url' => array
32
+ */
33
+ public function get_pages($limit = null)
34
+ {
35
+ $pages = $this->bridge->get_option($this->storage_key);
36
+ $pages = $pages && is_array($pages) ? $pages : array();
37
+
38
+ return $limit ? array_slice($pages, 0, (int) $limit) : $pages;
39
+ }
40
+
41
+ /**
42
+ * Get external pages with local timezone properly set and url included in data
43
+ *
44
+ * This is intended to be consumed by ajax handlers or regular handlers
45
+ *
46
+ * @param int $limit default = null i.e. get all pages
47
+ * @return array an associative array of 'url' => array
48
+ */
49
+ public function get_pages_for_display($limit = null)
50
+ {
51
+ $pages = $this->get_pages($limit);
52
+ $items = array();
53
+
54
+ foreach ($pages as $url => $page) {
55
+ $last_modified = isset($page['last_modified']) ? $page['last_modified'] : null;
56
+
57
+ if (isset($last_modified)) {
58
+ try {
59
+ // expect UTC timezone from db, convert to local timezone
60
+ $last_modified = new DateTime($page['last_modified'], new DateTimeZone('UTC'));
61
+ $last_modified->setTimezone($this->plugin->get_current_timezone());
62
+ } catch (Exception $e) {
63
+ // invalid datetime, ignore because last modified is optional
64
+ }
65
+ }
66
+
67
+ $items[$url] = array(
68
+ 'url' => $url,
69
+ 'frequency' => isset($page['frequency']) ? $page['frequency'] : null,
70
+ 'priority' => isset($page['priority']) ? (float) $page['priority'] : null,
71
+ 'last_modified' => isset($last_modified)
72
+ ? $last_modified->format('Y-m-d H:i') // @todo remove this date format duplication
73
+ : null
74
+ );
75
+ }
76
+
77
+ return $items;
78
+ }
79
+
80
+ /**
81
+ * Get an external page by its url
82
+ *
83
+ * @param string $url
84
+ * @return array the page's data
85
+ */
86
+ public function get_page($url)
87
+ {
88
+ $pages = $this->get_pages();
89
+
90
+ foreach ($pages as $page_url => $page) {
91
+ if ($page_url === $url) {
92
+ return $page;
93
+ }
94
+ }
95
+
96
+ return null;
97
+ }
98
+
99
+ /**
100
+ * Check if we have external pages in db
101
+ *
102
+ * @return bool
103
+ */
104
+ public function has_pages()
105
+ {
106
+ return count($this->get_pages()) > 0;
107
+ }
108
+
109
+ public function get_bridge()
110
+ {
111
+ return $this->bridge;
112
+ }
113
+
114
+ public function get_storage_key()
115
+ {
116
+ return $this->storage_key;
117
+ }
118
+
119
+ public function get_domain()
120
+ {
121
+ return $this->plugin->domain;
122
+ }
123
+ }
src/provider/google-news/languages.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /* http://www.loc.gov/standards/iso639-2/php/code_list.php */
4
+ return array(
5
+ 'English' => 'en',
6
+ 'Arabic' => 'ar',
7
+ 'Bengali' => 'bn',
8
+ 'Bulgarian' => 'bg',
9
+ 'Catalan' => 'ca',
10
+ 'Chinese (Simplified)' => 'zh-cn',
11
+ 'Chinese (Traditional)' => 'zh-tw',
12
+ 'Croatian' => 'hr',
13
+ 'Czech' => 'cs',
14
+ 'Danish' => 'da',
15
+ 'Dutch' => 'nl',
16
+ /* 'English (UK)' => 'en-GB', */
17
+ /* 'English (US)' => 'en', */
18
+ 'Estonian' => 'et',
19
+ 'Filipino' => 'fil',
20
+ 'Finnish' => 'fi',
21
+ 'French' => 'fr',
22
+ /* 'French (Canadian)' => 'fr-CA', */
23
+ 'German' => 'de',
24
+ 'Gujarati' => 'gu',
25
+ /* 'German (Austria)' => 'de-at', */
26
+ /* 'German (Switzerland)' => 'de-CH', */
27
+ 'Greek' => 'el',
28
+ 'Hebrew' => 'he',
29
+ 'Hindi' => 'hi',
30
+ 'Hungarain' => 'hu',
31
+ 'Indonesian' => 'id',
32
+ 'Italian' => 'it',
33
+ 'Japanese' => 'ja',
34
+ 'Kannada' => 'kn',
35
+ 'Korean' => 'ko',
36
+ 'Latvian' => 'lv',
37
+ 'Lithuanian' => 'lt',
38
+ 'Malay' => 'ms',
39
+ 'Malayalam' => 'ml',
40
+ 'Marathi' => 'mr',
41
+ 'Norwegian' => 'no',
42
+ 'Persian' => 'fa',
43
+ 'Polish' => 'pl',
44
+ 'Portuguese' => 'pt',
45
+ /* 'Portuguese (Brazil)' => 'pt-BR', */
46
+ /* 'Portuguese (Portugal)' => 'pt-PT', */
47
+ 'Romanian' => 'ro',
48
+ 'Russian' => 'ru',
49
+ 'Serbian' => 'sr',
50
+ 'Slovak' => 'sk',
51
+ 'Slovenian' => 'sl',
52
+ 'Spanish' => 'es',
53
+ /* 'Spanish (Latin America)' => 'es-419', */
54
+ 'Swedish' => 'sv',
55
+ 'Tamil' => 'ta',
56
+ 'Telugu' => 'te',
57
+ 'Thai' => 'th',
58
+ 'Turkish' => 'tr',
59
+ 'Ukrainian' => 'uk',
60
+ 'Urdu' => 'ur',
61
+ 'Vietnamese' => 'vi'
62
+ );
src/provider/post/post.php ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ class BWP_Sitemaps_Provider_Post extends BWP_Sitemaps_Provider
12
+ {
13
+ /**
14
+ * Get all public post types, except for attachment
15
+ *
16
+ * @return array
17
+ */
18
+ public function get_post_types()
19
+ {
20
+ $post_types = array();
21
+ $all_post_types = $this->bridge->get_post_types(array('public' => true), 'objects');
22
+
23
+ foreach ($all_post_types as $post_type) {
24
+ if ('attachment' === $post_type->name) {
25
+ continue;
26
+ }
27
+
28
+ $post_types[] = $post_type;
29
+ }
30
+
31
+ return $post_types;
32
+ }
33
+
34
+ /**
35
+ * Get all public posts of a specific post type, optionally filtered by
36
+ * post ids
37
+ *
38
+ * @param string $post_type
39
+ * @param array $ids
40
+ * @param array $excluded_ids
41
+ * @param int $limit default to retrieve only last 200 posts
42
+ * @return WP_Post[]
43
+ */
44
+ public function get_public_posts($post_type, array $ids = array(), array $excluded_ids = array(), $limit = 200)
45
+ {
46
+ if ($ids && $excluded_ids) {
47
+ throw new DomainException('only post ids or excluded post ids can be provided, not both');
48
+ }
49
+
50
+ $posts = $this->bridge->get_posts(array(
51
+ 'post_type' => $post_type,
52
+ 'include' => $ids,
53
+ 'exclude' => $excluded_ids,
54
+ 'posts_per_page' => (int) $limit
55
+ ));
56
+
57
+ return $posts;
58
+ }
59
+
60
+ /**
61
+ * Get all public posts, filtered by their titles
62
+ *
63
+ * This is a case insensitive search
64
+ *
65
+ * @param string $post_type
66
+ * @param string $title part of the title
67
+ * @return WP_Post[]
68
+ */
69
+ public function get_public_posts_by_title($post_type, $title)
70
+ {
71
+ // search for posts with matching title, but dont take into
72
+ // account already excluded posts
73
+ $posts = $this->bridge->get_posts(array(
74
+ 'post_type' => $post_type,
75
+ 'bwp_post_title_like' => $title,
76
+ 'suppress_filters' => false,
77
+ 'exclude' => $this->excluder->get_excluded_items($post_type)
78
+ ));
79
+
80
+ return $posts;
81
+ }
82
+ }
src/provider/provider.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ abstract class BWP_Sitemaps_Provider
12
+ {
13
+ protected $plugin;
14
+
15
+ protected $bridge;
16
+
17
+ protected $excluder;
18
+
19
+ public function __construct(BWP_Sitemaps $plugin, BWP_Sitemaps_Excluder $excluder)
20
+ {
21
+ $this->plugin = $plugin;
22
+ $this->bridge = $plugin->get_bridge();
23
+
24
+ $this->excluder = $excluder;
25
+ }
26
+
27
+ public function get_exluder()
28
+ {
29
+ return $this->excluder;
30
+ }
31
+
32
+ public function get_bridge()
33
+ {
34
+ return $this->bridge;
35
+ }
36
+
37
+ public function get_domain()
38
+ {
39
+ return $this->plugin->domain;
40
+ }
41
+ }
src/provider/taxonomy/taxonomy.php ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ class BWP_Sitemaps_Provider_Taxonomy extends BWP_Sitemaps_Provider
12
+ {
13
+ /**
14
+ * Get all public taxonomies, optionally filtered by post type
15
+ *
16
+ * This should never return post format
17
+ *
18
+ * @param string $post_type optional, default to get all taxonomies
19
+ * @return array
20
+ */
21
+ public function get_taxonomies($post_type = null)
22
+ {
23
+ $taxonomies = array();
24
+
25
+ $all_taxonomies = !empty($post_type)
26
+ ? $this->bridge->get_object_taxonomies($post_type, 'objects')
27
+ : $this->bridge->get_taxonomies(array('public' => true), 'objects');
28
+
29
+ foreach ($all_taxonomies as $taxonomy) {
30
+ // do not return post format or private taxonomy
31
+ if ('post_format' === $taxonomy->name || !$taxonomy->public) {
32
+ continue;
33
+ }
34
+
35
+ $taxonomies[] = $taxonomy;
36
+ }
37
+
38
+ return $taxonomies;
39
+ }
40
+
41
+ /**
42
+ * Get all terms of a specific taxonomy, optionally filtered by term ids
43
+ *
44
+ * @param string $taxonomy
45
+ * @param array $ids
46
+ * @param array $excluded_ids
47
+ * @param int $limit default to retrieve only last 200 terms
48
+ * @return array
49
+ */
50
+ public function get_terms($taxonomy, array $ids = array(), array $excluded_ids = array(), $limit = 200)
51
+ {
52
+ if ($ids && $excluded_ids) {
53
+ throw new DomainException('only term ids or excluded term ids can be provided, not both');
54
+ }
55
+
56
+ $terms = $this->bridge->get_terms($taxonomy, array(
57
+ 'include' => $ids,
58
+ 'exclude' => $excluded_ids,
59
+ 'number' => (int) $limit,
60
+ 'hide_empty' => false
61
+ ));
62
+
63
+ return $terms;
64
+ }
65
+
66
+ /**
67
+ * Get all terms of a specific taxonomy, without a limit
68
+ *
69
+ * @param string $taxonomy
70
+ * @return array
71
+ */
72
+ public function get_all_terms($taxonomy)
73
+ {
74
+ return $this->get_terms($taxonomy, array(), array(), 0);
75
+ }
76
+
77
+ /**
78
+ * Get all terms, filtered by their names
79
+ *
80
+ * This is a case insensitive search
81
+ *
82
+ * @param string $taxonomy
83
+ * @param string $name part of the name
84
+ * @return array
85
+ */
86
+ public function get_terms_by_name($taxonomy, $name)
87
+ {
88
+ // search for terms with matching name, but dont take into account
89
+ // already excluded terms
90
+ $terms = $this->bridge->get_terms($taxonomy, array(
91
+ 'name__like' => $name,
92
+ 'exclude' => $this->excluder->get_excluded_items($taxonomy),
93
+ 'hide_empty' => false
94
+ ));
95
+
96
+ return $terms;
97
+ }
98
+ }
src/sitemap/provider/provider.php ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ class BWP_Sitemaps_Sitemap_Provider
12
+ {
13
+ protected $plugin;
14
+
15
+ protected $bridge;
16
+
17
+ protected $module;
18
+
19
+ protected $image_allowed;
20
+
21
+ public function __construct(BWP_Sitemaps $plugin, BWP_GXS_MODULE $module)
22
+ {
23
+ $this->plugin = $plugin;
24
+ $this->bridge = $plugin->get_bridge();
25
+
26
+ $this->module = $module;
27
+ }
28
+
29
+ /**
30
+ * @return BWP_Sitemaps
31
+ */
32
+ public function get_plugin()
33
+ {
34
+ return $this->plugin;
35
+ }
36
+
37
+ /**
38
+ * Filter a sitemap item to make sure it is valid
39
+ *
40
+ * @param array $item
41
+ * @return bool
42
+ */
43
+ public function filter_sitemap_item(array $item)
44
+ {
45
+ if (empty($item['location']) || ! $this->is_url_valid($item['location'])) {
46
+ return false;
47
+ }
48
+
49
+ return true;
50
+ }
51
+
52
+ /**
53
+ * Get all sitemap items
54
+ *
55
+ * @return array
56
+ */
57
+ public function get_items()
58
+ {
59
+ return array_values(
60
+ array_filter(
61
+ $this->module->get_data(),
62
+ array($this, 'filter_sitemap_item')
63
+ )
64
+ );
65
+ }
66
+
67
+ /**
68
+ * @return bool
69
+ */
70
+ public function is_image_allowed()
71
+ {
72
+ $this->image_allowed = !is_null($this->image_allowed)
73
+ ? $this->image_allowed
74
+ : $this->module->is_image_allowed();
75
+
76
+ return $this->image_allowed;
77
+ }
78
+
79
+ private function is_local($url)
80
+ {
81
+ static $blog_url;
82
+
83
+ if (empty($blog_url)) {
84
+ $home_url = $this->bridge->home_url();
85
+ $blog_url = @parse_url($home_url);
86
+ }
87
+
88
+ $url = @parse_url($url);
89
+ if (false === $url) {
90
+ return false;
91
+ }
92
+
93
+ // according to sitemap protocol the host must be exactly the same
94
+ // @link http://www.sitemaps.org/protocol.html#location
95
+ // @todo allow logging all invalid urls so they can be fixed if needed
96
+ if (0 <> strcmp($url['host'], $blog_url['host'])) {
97
+ return false;
98
+ }
99
+
100
+ return true;
101
+ }
102
+
103
+ private function is_url_valid($url)
104
+ {
105
+ $url = trim($url);
106
+
107
+ if ('#' == $url || 0 !== strpos($url, 'http') || ! $this->is_local($url)) {
108
+ return false;
109
+ }
110
+
111
+ // url must use the current scheme
112
+ $is_ssl = $this->bridge->is_ssl();
113
+ if (($is_ssl && strpos($url, 'https') !== 0)
114
+ || (! $is_ssl && strpos($url, 'https') === 0)
115
+ ) {
116
+ return false;
117
+ }
118
+
119
+ return true;
120
+ }
121
+ }
src/sitemap/sanitizer/sanitizer.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ abstract class BWP_Sitemaps_Sitemap_Sanitizer
12
+ {
13
+ /**
14
+ * Sanitizer options
15
+ *
16
+ * @var array
17
+ */
18
+ protected $options;
19
+
20
+ public function __construct(array $options = array())
21
+ {
22
+ $this->set_default_options();
23
+
24
+ $this->options = array_merge($this->options, $options);
25
+ }
26
+
27
+ /**
28
+ * Sanitize a value for sitemap rendering
29
+ *
30
+ * This should always return a string representation of the value
31
+ *
32
+ * @param mixed $value
33
+ * @return string|null null if the sanitized value is not valid
34
+ */
35
+ abstract public function sanitize($value);
36
+
37
+ /**
38
+ * Set default options for this sanitizer
39
+ */
40
+ protected function set_default_options()
41
+ {
42
+ $this->options = array();
43
+ }
44
+
45
+ protected function get_option($key)
46
+ {
47
+ return isset($this->options[$key]) ? $this->options[$key] : null;
48
+ }
49
+ }
src/sitemap/sanitizer/xml/factory.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * Create sanitizer with options from plugin
10
+ *
11
+ * @author Khang Minh <contact@betterwp.net>
12
+ */
13
+ class BWP_Sitemaps_Sitemap_Sanitizer_Factory
14
+ {
15
+ protected $plugin;
16
+
17
+ protected $priority_sanitizer;
18
+
19
+ protected $frequency_sanitizer;
20
+
21
+ public function __construct(BWP_Sitemaps $plugin)
22
+ {
23
+ $this->plugin = $plugin;
24
+ }
25
+
26
+ /**
27
+ * @return BWP_Sitemaps_Sitemap_Sanitizer_Xml_PrioritySanitizer
28
+ */
29
+ public function get_priority_sanitizer()
30
+ {
31
+ $this->priority_sanitizer = $this->priority_sanitizer
32
+ ? $this->priority_sanitizer
33
+ : new BWP_Sitemaps_Sitemap_Sanitizer_Xml_PrioritySanitizer(array(
34
+ 'default_priority' => $this->plugin->options['select_default_pri']
35
+ ));
36
+
37
+ return $this->priority_sanitizer;
38
+ }
39
+
40
+ /**
41
+ * @return BWP_Sitemaps_Sitemap_Sanitizer_Xml_FrequencySanitizer
42
+ */
43
+ public function get_frequency_sanitizer()
44
+ {
45
+ $this->frequency_sanitizer = $this->frequency_sanitizer
46
+ ? $this->frequency_sanitizer
47
+ : new BWP_Sitemaps_Sitemap_Sanitizer_Xml_FrequencySanitizer(array(
48
+ 'frequencies' => $this->plugin->frequencies,
49
+ 'default_frequency' => $this->plugin->options['select_default_freq']
50
+ ));
51
+
52
+ return $this->frequency_sanitizer;
53
+ }
54
+ }
src/sitemap/sanitizer/xml/frequency.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ class BWP_Sitemaps_Sitemap_Sanitizer_Xml_FrequencySanitizer extends BWP_Sitemaps_Sitemap_Sanitizer
12
+ {
13
+ /**
14
+ * {@inheritDoc}
15
+ */
16
+ public function sanitize($value)
17
+ {
18
+ $frequencies = $this->get_option('frequencies');
19
+ if (! $frequencies || ! in_array($value, $frequencies)) {
20
+ $value = $this->get_option('default_frequency');
21
+ }
22
+
23
+ if (! $value) {
24
+ return null;
25
+ }
26
+
27
+ return $value;
28
+ }
29
+
30
+ protected function set_default_options()
31
+ {
32
+ $this->options = array(
33
+ 'frequencies' => array(),
34
+ 'default_frequency' => 'daily'
35
+ );
36
+ }
37
+ }
src/sitemap/sanitizer/xml/priority.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ class BWP_Sitemaps_Sitemap_Sanitizer_Xml_PrioritySanitizer extends BWP_Sitemaps_Sitemap_Sanitizer
12
+ {
13
+ /**
14
+ * {@inheritDoc}
15
+ */
16
+ public function sanitize($value)
17
+ {
18
+ if ($value > 1 || $value < 0) {
19
+ $value = $this->get_option('default_priority');
20
+ }
21
+
22
+ if (! $value) {
23
+ return null;
24
+ }
25
+
26
+ return sprintf('%.1f', $value);
27
+ }
28
+
29
+ protected function set_default_options()
30
+ {
31
+ $this->options = array(
32
+ 'default_priority' => 0.5
33
+ );
34
+ }
35
+ }
src/sitemap/sanitizer/xml/text.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ class BWP_Sitemaps_Sitemap_Sanitizer_Xml_TextSanitizer extends BWP_Sitemaps_Sitemap_Sanitizer
12
+ {
13
+ /**
14
+ * {@inheritDoc}
15
+ */
16
+ public function sanitize($value)
17
+ {
18
+ return trim(htmlspecialchars(strip_tags($value), ENT_QUOTES));
19
+ }
20
+ }
src/sitemap/sitemap.php ADDED
@@ -0,0 +1,198 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ abstract class BWP_Sitemaps_Sitemap
12
+ {
13
+ /**
14
+ * Sitemap item provider
15
+ *
16
+ * @var BWP_Sitemaps_Sitemap_Provider
17
+ */
18
+ protected $provider;
19
+
20
+ /**
21
+ * Sitemap sanitizer factory
22
+ *
23
+ * @var BWP_Sitemaps_Sitemap_Sanitizer_Factory
24
+ */
25
+ protected $sanitizer_factory;
26
+
27
+ /**
28
+ * Sitemap stylesheet
29
+ *
30
+ * @var string
31
+ */
32
+ protected $stylesheet;
33
+
34
+ /**
35
+ * Sitemap namespaces
36
+ *
37
+ * @var array
38
+ */
39
+ protected $xml_headers = array(
40
+ 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
41
+ 'xsi:schemaLocation' => 'http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd',
42
+ 'xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9'
43
+ );
44
+
45
+ /**
46
+ * Sitemap XML root tag, e.g. 'urlset'
47
+ *
48
+ * @var string
49
+ */
50
+ protected $xml_root_tag = 'urlset';
51
+
52
+ /**
53
+ * Cached XML representation of this sitemap
54
+ *
55
+ * @var string
56
+ */
57
+ protected $xml;
58
+
59
+ /**
60
+ * Number of actual sitemap items in this sitemap
61
+ *
62
+ * @var int
63
+ */
64
+ protected $item_count = 0;
65
+
66
+ public function __construct(
67
+ BWP_Sitemaps_Sitemap_Provider $provider,
68
+ BWP_Sitemaps_Sitemap_Sanitizer_Factory $sanitizer_factory,
69
+ $stylesheet = null
70
+ ) {
71
+ $this->provider = $provider;
72
+ $this->sanitizer_factory = $sanitizer_factory;
73
+ $this->stylesheet = $stylesheet;
74
+
75
+ $this->set_xml_headers();
76
+ $this->set_properties();
77
+
78
+ // build the output right away
79
+ $this->get_xml();
80
+ }
81
+
82
+ /**
83
+ * Set additional and/or replace existing headers
84
+ */
85
+ protected function set_xml_headers()
86
+ {
87
+ // should be implemented by child class
88
+ }
89
+
90
+ /**
91
+ * Set additional and/or replace existing properties of a sitemap
92
+ *
93
+ * This can be used to change the xml root tag for example.
94
+ */
95
+ protected function set_properties()
96
+ {
97
+ // should be implemented by child class
98
+ }
99
+
100
+ /**
101
+ * Get xml body of a sitemap item
102
+ *
103
+ * @param array $item
104
+ * @return string
105
+ */
106
+ abstract protected function get_xml_item_body(array $item);
107
+
108
+ /**
109
+ * Get an xml representation of the sitemap
110
+ *
111
+ * @return string
112
+ */
113
+ public function get_xml()
114
+ {
115
+ // use cached xml if available
116
+ if (! is_null($this->xml)) {
117
+ return $this->xml;
118
+ }
119
+
120
+ // no sitemap items, no xml
121
+ if (! $items = $this->provider->get_items()) {
122
+ return null;
123
+ }
124
+
125
+ $xml = '';
126
+ $xml .= $this->get_xml_header() . "\n\n";
127
+
128
+ foreach ($items as $item) {
129
+ $xml .= $this->get_xml_item_body($item) . "\n";
130
+ }
131
+
132
+ $this->item_count = count($items);
133
+ $xml .= $this->get_xml_footer();
134
+
135
+ $this->xml = $xml;
136
+
137
+ return $xml;
138
+ }
139
+
140
+ /**
141
+ * Appends contents to the xml output, when applicable
142
+ *
143
+ * @param string $content
144
+ * @return $this
145
+ */
146
+ public function append($content)
147
+ {
148
+ if (! $this->xml) {
149
+ return $this;
150
+ }
151
+
152
+ $this->xml .= $content;
153
+
154
+ return $this;
155
+ }
156
+
157
+ /**
158
+ * Whether this sitemap actually has items
159
+ *
160
+ * @return bool
161
+ */
162
+ public function has_items()
163
+ {
164
+ return $this->item_count > 0;
165
+ }
166
+
167
+ /**
168
+ * @return int
169
+ */
170
+ public function get_item_count()
171
+ {
172
+ return (int) $this->item_count;
173
+ }
174
+
175
+ private function get_xml_header()
176
+ {
177
+ $xml = '<' . '?xml version="1.0" encoding="UTF-8"?'.'>' . "\n";
178
+ $xml .= $this->stylesheet
179
+ ? '<?xml-stylesheet type="text/xsl" href="' . $this->stylesheet . '"?>' . "\n"
180
+ : '';
181
+ $xml .= "\n";
182
+
183
+ $xml .= '<' . $this->xml_root_tag;
184
+
185
+ foreach ($this->xml_headers as $header => $value) {
186
+ $xml .= "\n\t" . $header . '="' . $value . '"';
187
+ }
188
+
189
+ $xml .= '>';
190
+
191
+ return $xml;
192
+ }
193
+
194
+ private function get_xml_footer()
195
+ {
196
+ return '</' . $this->xml_root_tag . '>';
197
+ }
198
+ }
src/sitemap/tag/compound-tag.php ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ class BWP_Sitemaps_Sitemap_Tag_CompoundTag extends BWP_Sitemaps_Sitemap_Tag
12
+ {
13
+ /**
14
+ * Child tags
15
+ *
16
+ * @var BWP_Sitemaps_Sitemap_Tag[]
17
+ */
18
+ protected $tags = array();
19
+
20
+ protected function __construct($name)
21
+ {
22
+ parent::__construct($name, true);
23
+
24
+ $this->template =
25
+ '<%1$s>' . "\n"
26
+ . '%2$s'
27
+ . '</%1$s>' . "\n";
28
+ }
29
+
30
+ /**
31
+ * Add child tag
32
+ *
33
+ * Both single tags and compound tags can be added, to allow a nested structure.
34
+ *
35
+ * @param BWP_Sitemaps_Sitemap_Tag $tag the child tag to add
36
+ * @throws LogicException if child tag already has a parent
37
+ * @return $this
38
+ */
39
+ public function add_tag(BWP_Sitemaps_Sitemap_Tag $tag)
40
+ {
41
+ if ($tag->parent instanceof BWP_Sitemaps_Sitemap_Tag) {
42
+ throw new LogicException('child tag already has a parent');
43
+ }
44
+
45
+ $tag->set_parent($this);
46
+
47
+ // duplicate tag detected
48
+ if (in_array($tag, $this->tags)) {
49
+ return $this;
50
+ }
51
+
52
+ $this->tags[] = $tag;
53
+
54
+ return $this;
55
+ }
56
+
57
+ /**
58
+ * Add multiple tags at once
59
+ *
60
+ * @param array BWP_Sitemaps_Sitemap_Tag[] $tags
61
+ * @return $this
62
+ */
63
+ public function add_tags(array $tags)
64
+ {
65
+ foreach ($tags as $tag) {
66
+ $this->add_tag($tag);
67
+ }
68
+
69
+ return $this;
70
+ }
71
+
72
+ /**
73
+ * Get all child tags
74
+ *
75
+ * @return BWP_Sitemaps_Sitemap_Tag[]
76
+ */
77
+ public function get_tags()
78
+ {
79
+ return $this->tags;
80
+ }
81
+
82
+ /**
83
+ * Get template, with indentation properly prepended
84
+ *
85
+ * Indentation should be prepended to both the opening tag and the closing tag.
86
+ *
87
+ * @return string
88
+ */
89
+ public function get_template()
90
+ {
91
+ $indentation = $this->get_indentation();
92
+
93
+ return str_replace('<', $indentation . '<', $this->template);
94
+ }
95
+
96
+ public function get_xml()
97
+ {
98
+ // no child tags, no xml
99
+ if (count($this->tags) == 0) {
100
+ return '';
101
+ }
102
+
103
+ $value = '';
104
+
105
+ foreach ($this->tags as $tag) {
106
+ $value .= $tag->get_xml();
107
+ }
108
+
109
+ return sprintf($this->get_template(), $this->get_name(), $value);
110
+ }
111
+ }
src/sitemap/tag/single-tag.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ class BWP_Sitemaps_Sitemap_Tag_SingleTag extends BWP_Sitemaps_Sitemap_Tag
12
+ {
13
+ }
src/sitemap/tag/tag.php ADDED
@@ -0,0 +1,275 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ abstract class BWP_Sitemaps_Sitemap_Tag
12
+ {
13
+ /**
14
+ * Namespace of the tag
15
+ *
16
+ * @var string
17
+ */
18
+ protected $namespace;
19
+
20
+ /**
21
+ * Name of the tag
22
+ *
23
+ * @var string
24
+ */
25
+ protected $name;
26
+
27
+ /**
28
+ * Value of the tag
29
+ *
30
+ * @var string
31
+ */
32
+ protected $value;
33
+
34
+ /**
35
+ * Parent of this tag
36
+ *
37
+ * @var BWP_Sitemaps_Sitemap_Tag_CompoundTag
38
+ */
39
+ protected $parent;
40
+
41
+ /**
42
+ * Whether this is a compound tag
43
+ *
44
+ * @var bool
45
+ */
46
+ protected $compound;
47
+
48
+ /**
49
+ * Sanitizers to apply on this tag's value
50
+ *
51
+ * This is mostly relevant with a single tag because a compound tag does
52
+ * not actually have any value.
53
+ *
54
+ * @var BWP_Sitemaps_Sitemap_Sanitizer[]
55
+ */
56
+ protected $sanitizers = array();
57
+
58
+ /**
59
+ * Template to be used when rendering this tag
60
+ *
61
+ * @var string
62
+ */
63
+ protected $template;
64
+
65
+ /**
66
+ * Level of indentation used when rendering this tag
67
+ *
68
+ * @var int
69
+ */
70
+ protected $indent_level = 0;
71
+
72
+ protected function __construct($name, $is_compound = false)
73
+ {
74
+ if (!is_string($name)) {
75
+ throw new InvalidArgumentException('tag name must be string');
76
+ }
77
+
78
+ if (strpos($name, ':') !== false) {
79
+ $names = explode(':', $name);
80
+
81
+ $this->namespace = $names[0];
82
+ $this->name = $names[1];
83
+ } else {
84
+ $this->name = $name;
85
+ }
86
+
87
+ $this->compound = $is_compound;
88
+
89
+ $this->template = '<%1$s>%2$s</%1$s>' . "\n";
90
+ }
91
+
92
+ /**
93
+ * Create a single tag
94
+ *
95
+ * @param string $name
96
+ * @param string $value default to null
97
+ * @param mixed BWP_Sitemaps_Sitemap_Sanitizer|array BWP_Sitemaps_Sitemap_Sanitizer[]
98
+ */
99
+ public static function create_single_tag($name, $value = null, $sanitizers = null)
100
+ {
101
+ $tag = new BWP_Sitemaps_Sitemap_Tag_SingleTag($name);
102
+
103
+ // add sanitizer if any
104
+ if ($sanitizers) {
105
+ // convert to array if needed
106
+ $sanitizers = is_array($sanitizers) ? $sanitizers : array($sanitizers);
107
+
108
+ foreach ($sanitizers as $sanitizer) {
109
+ $tag->add_sanitizer($sanitizer);
110
+ }
111
+ }
112
+
113
+ // make sure the text sanitizer is always registered, and is set as
114
+ // the last sanitizer by default
115
+ $tag->add_sanitizer(new BWP_Sitemaps_Sitemap_Sanitizer_Xml_TextSanitizer());
116
+
117
+ if ($value) {
118
+ $tag->set_value($value);
119
+ }
120
+
121
+ return $tag;
122
+ }
123
+
124
+ /**
125
+ * Create a compound tag
126
+ *
127
+ * @param string $name
128
+ */
129
+ public static function create_compound_tag($name)
130
+ {
131
+ return new BWP_Sitemaps_Sitemap_Tag_CompoundTag($name);
132
+ }
133
+
134
+ /**
135
+ * Set value for this tag
136
+ *
137
+ * @param string $value
138
+ */
139
+ public function set_value($value)
140
+ {
141
+ if (!is_string($value) && !is_numeric($value)) {
142
+ throw new InvalidArgumentException('tag value must be string or numeric');
143
+ }
144
+
145
+ // sanitize the value in the same order by which they were added
146
+ foreach ($this->sanitizers as $sanitizer) {
147
+ $value = $sanitizer->sanitize($value);
148
+ }
149
+
150
+ // do not set the value if it is invalid after sanitization
151
+ if (! $value) {
152
+ return;
153
+ }
154
+
155
+ $this->value = $value;
156
+ }
157
+
158
+ /**
159
+ * Set a parent for this tag
160
+ *
161
+ * @param BWP_Sitemaps_Sitemap_Tag_CompoundTag $tag
162
+ */
163
+ public function set_parent(BWP_Sitemaps_Sitemap_Tag_CompoundTag $tag)
164
+ {
165
+ $this->parent = $tag;
166
+ }
167
+
168
+ /**
169
+ * Add a sanitizer to apply upon this tag's value when set (if not existed)
170
+ *
171
+ * @param BWP_Sitemaps_Sitemap_Sanitizer $sanitizer
172
+ */
173
+ public function add_sanitizer(BWP_Sitemaps_Sitemap_Sanitizer $sanitizer)
174
+ {
175
+ if (! in_array($sanitizer, $this->sanitizers)) {
176
+ $this->sanitizers[] = $sanitizer;
177
+ }
178
+ }
179
+
180
+ /**
181
+ * Set template for this tag
182
+ *
183
+ * @param string $template
184
+ */
185
+ public function set_template($template)
186
+ {
187
+ $this->template = $template;
188
+ }
189
+
190
+ /**
191
+ * Check whether this tag is a compound tag
192
+ *
193
+ * @return bool
194
+ */
195
+ public function is_compound()
196
+ {
197
+ return (bool) $this->compound;
198
+ }
199
+
200
+ /**
201
+ * Get tag name, with namespace
202
+ *
203
+ * @return string
204
+ */
205
+ public function get_name()
206
+ {
207
+ if ($this->namespace) {
208
+ return $this->namespace . ':' . $this->name;
209
+ }
210
+
211
+ return $this->name;
212
+ }
213
+
214
+ /**
215
+ * Get tag value
216
+ *
217
+ * @return string
218
+ */
219
+ public function get_value()
220
+ {
221
+ return $this->value;
222
+ }
223
+
224
+ /**
225
+ * Get registered sanitizers
226
+ */
227
+ public function get_sanitizers()
228
+ {
229
+ return $this->sanitizers;
230
+ }
231
+
232
+ /**
233
+ * Get tag template, with indentation prepended
234
+ *
235
+ * @return string
236
+ */
237
+ public function get_template()
238
+ {
239
+ return $this->get_indentation() . $this->template;
240
+ }
241
+
242
+ /**
243
+ * Get indentation for this tag
244
+ *
245
+ * Each parent corresponds to one level of indentation
246
+ *
247
+ * @return string
248
+ */
249
+ public function get_indentation()
250
+ {
251
+ // there's always a root tag so by default we indent by one level
252
+ $indentation = "\t";
253
+
254
+ if ($this->parent) {
255
+ $indentation = "\t" . $this->parent->get_indentation();
256
+ }
257
+
258
+ return $indentation;
259
+ }
260
+
261
+ /**
262
+ * Get XML representation of this tag
263
+ *
264
+ * @return string
265
+ */
266
+ public function get_xml()
267
+ {
268
+ // no value, no xml
269
+ if (empty($this->value)) {
270
+ return '';
271
+ }
272
+
273
+ return sprintf($this->get_template(), $this->get_name(), $this->get_value());
274
+ }
275
+ }
src/sitemap/xml-google-news.php ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @author Khang Minh <contact@betterwp.net>
10
+ */
11
+ class BWP_Sitemaps_Sitemap_XmlGoogleNews extends BWP_Sitemaps_Sitemap_Xml
12
+ {
13
+ protected $news_name;
14
+
15
+ /**
16
+ * {@inheritDoc}
17
+ */
18
+ protected function set_xml_headers()
19
+ {
20
+ // news sitemap needs additional namespaces
21
+ // For namespaces: @link https://support.google.com/news/publisher/answer/74288
22
+ // For validation: @link https://support.google.com/news/publisher/answer/184732
23
+ $this->xml_headers['xmlns:news'] = 'http://www.google.com/schemas/sitemap-news/0.9';
24
+ $this->xml_headers['xsi:schemaLocation'] = $this->xml_headers['xsi:schemaLocation']
25
+ . "\n\t\t"
26
+ . 'http://www.google.com/schemas/sitemap-news/0.9 '
27
+ . 'http://www.google.com/schemas/sitemap-news/0.9/sitemap-news.xsd';
28
+
29
+ // also use the standard xml sitemap headers
30
+ parent::set_xml_headers();
31
+ }
32
+
33
+ /**
34
+ * {@inheritDoc}
35
+ */
36
+ protected function set_properties()
37
+ {
38
+ $this->news_name = $this->provider->get_plugin()->get_news_name();
39
+ }
40
+
41
+ /**
42
+ * {@inheritDoc}
43
+ */
44
+ protected function get_xml_item_body(array $item)
45
+ {
46
+ // allow overriding publication name via item data
47
+ $item['name'] = !empty($item['name']) ? $item['name'] : $this->news_name;
48
+
49
+ $url = BWP_Sitemaps_Sitemap_Tag::create_compound_tag('url');
50
+
51
+ $location = BWP_Sitemaps_Sitemap_Tag::create_single_tag('loc', $item['location']);
52
+ $news = BWP_Sitemaps_Sitemap_Tag::create_compound_tag('news:news');
53
+ $news_publication = BWP_Sitemaps_Sitemap_Tag::create_compound_tag('news:publication');
54
+
55
+ $news_publication_tags = $this->create_tags_from_sitemap_item($item, array(
56
+ 'news:name' => 'name',
57
+ 'news:language' => 'language'
58
+ ));
59
+
60
+ $news_tags = $this->create_tags_from_sitemap_item(
61
+ $item, array(
62
+ 'news:genres' => 'genres',
63
+ 'news:publication_date' => 'pub_date',
64
+ 'news:title' => 'title',
65
+ 'news:keywords' => 'keywords'
66
+ )
67
+ );
68
+
69
+ $url->add_tags(array(
70
+ $location,
71
+ $news
72
+ ->add_tag($news_publication->add_tags($news_publication_tags))
73
+ ->add_tags($news_tags)
74
+ )
75
+ );
76
+
77
+ if ($image = $this->create_image_tag_from_sitemap_item($item)) {
78
+ $url->add_tag($image);
79
+ }
80
+
81
+ return $url->get_xml();
82
+ }
83
+ }
src/sitemap/xml-index.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * The XML sitemap index
10
+ *
11
+ * This follows closely @link http://www.sitemaps.org/protocol.html#index
12
+ *
13
+ * @author Khang Minh <contact@betterwp.net>
14
+ */
15
+ class BWP_Sitemaps_Sitemap_XmlIndex extends BWP_Sitemaps_Sitemap
16
+ {
17
+ /**
18
+ * {@inheritDoc}
19
+ */
20
+ protected function set_xml_headers()
21
+ {
22
+ $this->xml_headers['xsi:schemaLocation'] = 'http://www.sitemaps.org/schemas/sitemap/0.9 '
23
+ . 'http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd';
24
+ }
25
+
26
+ /**
27
+ * {@inheritDoc}
28
+ */
29
+ protected function set_properties()
30
+ {
31
+ $this->xml_root_tag = 'sitemapindex';
32
+ }
33
+
34
+ /**
35
+ * {@inheritDoc}
36
+ */
37
+ protected function get_xml_item_body(array $item)
38
+ {
39
+ $sitemap = BWP_Sitemaps_Sitemap_Tag::create_compound_tag('sitemap');
40
+
41
+ $sitemap->add_tag(BWP_Sitemaps_Sitemap_Tag::create_single_tag('loc', $item['location']));
42
+
43
+ if (!empty($item['lastmod'])) {
44
+ $sitemap->add_tag(BWP_Sitemaps_Sitemap_Tag::create_single_tag('lastmod', $item['lastmod']));
45
+ }
46
+
47
+ return $sitemap->get_xml();
48
+ }
49
+ }
src/sitemap/xml.php ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * The standard XML sitemap
10
+ *
11
+ * This follows closely @link http://www.sitemaps.org/protocol.html
12
+ *
13
+ * @author Khang Minh <contact@betterwp.net>
14
+ */
15
+ class BWP_Sitemaps_Sitemap_Xml extends BWP_Sitemaps_Sitemap
16
+ {
17
+ /**
18
+ * {@inheritDoc}
19
+ */
20
+ protected function set_xml_headers()
21
+ {
22
+ // image sitemap allowed, need google's "image" namespace
23
+ // @link https://support.google.com/webmasters/answer/178636?hl=en
24
+ if ($this->provider->is_image_allowed()) {
25
+ $this->xml_headers['xmlns:image'] = 'http://www.google.com/schemas/sitemap-image/1.1';
26
+ }
27
+ }
28
+
29
+ /**
30
+ * {@inheritDoc}
31
+ */
32
+ protected function get_xml_item_body(array $item)
33
+ {
34
+ $url = BWP_Sitemaps_Sitemap_Tag::create_compound_tag('url');
35
+
36
+ $tags = $this->create_tags_from_sitemap_item(
37
+ $item, array(
38
+ 'loc' => 'location',
39
+ 'lastmod' => 'lastmod',
40
+ 'changefreq' => 'freq',
41
+ 'priority' => 'priority'
42
+ ), array(
43
+ 'changefreq' => $this->sanitizer_factory->get_frequency_sanitizer(),
44
+ 'priority' => $this->sanitizer_factory->get_priority_sanitizer()
45
+ )
46
+ );
47
+
48
+ $url->add_tags($tags);
49
+
50
+ if ($image = $this->create_image_tag_from_sitemap_item($item)) {
51
+ $url->add_tag($image);
52
+ }
53
+
54
+ return $url->get_xml();
55
+ }
56
+
57
+ /**
58
+ * Create single tags from a sitemap item
59
+ *
60
+ * @param array $item
61
+ * @param array $tag_names a map from tag's name to item's array key
62
+ * @param array BWP_Sitemaps_Sitemap_Sanitizer[] $sanitizers default to null
63
+ *
64
+ * @return array
65
+ */
66
+ protected function create_tags_from_sitemap_item(
67
+ array $item,
68
+ array $tag_names,
69
+ array $sanitizers = array()
70
+ ) {
71
+ $tags = array();
72
+
73
+ foreach ($tag_names as $tag_name => $item_key) {
74
+ if (! isset($item[$item_key])) {
75
+ continue;
76
+ }
77
+
78
+ $tags[] = BWP_Sitemaps_Sitemap_Tag::create_single_tag(
79
+ $tag_name,
80
+ $item[$item_key],
81
+ isset($sanitizers[$tag_name]) ? $sanitizers[$tag_name] : null
82
+ );
83
+ }
84
+
85
+ return $tags;
86
+ }
87
+
88
+ /**
89
+ * Create an image tag from image item
90
+ *
91
+ * @param array $item
92
+ * @return mixed BWP_Sitemaps_Sitemap_Tag_CompoundTag|null
93
+ */
94
+ protected function create_image_tag_from_sitemap_item(array $item)
95
+ {
96
+ if (! $this->provider->is_image_allowed()
97
+ || !isset($item['image'])
98
+ || !is_array($item['image'])
99
+ ) {
100
+ return;
101
+ }
102
+
103
+ $image = $item['image'];
104
+
105
+ // not valid location for image
106
+ if (empty($image['location'])) {
107
+ return;
108
+ }
109
+
110
+ $tags = $this->create_tags_from_sitemap_item($image, array(
111
+ 'image:loc' => 'location',
112
+ 'image:title' => 'title',
113
+ 'image:caption' => 'caption'
114
+ ));
115
+
116
+ $image_tag = BWP_Sitemaps_Sitemap_Tag::create_compound_tag('image:image')
117
+ ->add_tags($tags);
118
+
119
+ return $image_tag;
120
+ }
121
+ }
src/templates/logger/admin/message-log.html.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if (!defined('ABSPATH')) { exit; } ?>
2
+
3
+ <?php if (count($data['items']) > 0) : ?>
4
+ <ul class="bwp-gxs-log bwp-gxs-log-big">
5
+ <?php
6
+ /* @var $item BWP_Sitemaps_Logger_Message_LogItem */
7
+ foreach ($data['items'] as $item) :
8
+ $color = $item->is_error() ? 'FF0000' : ($item->is_success() ? '009900' : '999999');
9
+
10
+ /* translators: date format, see http://php.net/date */
11
+ $datetime = $item->get_formatted_datetime(__('M d, Y h:i:s A', $this->domain));
12
+ ?>
13
+ <li class="bwp-clear" style="margin-top: 5px; line-height: 1.7;">
14
+ <span style="float: left; margin-right: 5px;"><?php echo esc_html($datetime); ?> &mdash;</span>
15
+ <span style="color: #<?php echo $color; ?>;"><?php echo $item->get_message(); ?></span>
16
+ </li>
17
+ <?php
18
+ endforeach;
19
+ ?>
20
+ </ul>
21
+ <?php else : ?>
22
+ <p>
23
+ <?php _e('No log yet!', $this->domain); ?>
24
+ </p>
25
+ <?php endif; ?>
src/templates/logger/admin/sitemap-log.html.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if (!defined('ABSPATH')) { exit; } ?>
2
+
3
+ <!--[if lte IE 9]>
4
+ <div class="bwp-table-fixed-headers-old-id-wrapper" style="width: 700px">
5
+ <!--<![endif]-->
6
+ <table class="wp-list-table widefat striped bwp-table bwp-table-md bwp-table-inline bwp-table-fixed-headers bwp-table-valign-middle" style="width: 700px;">
7
+ <thead>
8
+ <tr>
9
+ <th class="ordinal">#</th>
10
+ <th style="min-width: 250px"><?php _e('Name', $this->domain); ?></th>
11
+ <th style="width: 220px"><?php _e('Last generated on', $this->domain); ?></th>
12
+ <th style="width: 200px"></th>
13
+ </tr>
14
+ </thead>
15
+ <tbody>
16
+ <?php
17
+ $count = 0;
18
+
19
+ /* @var $item BWP_Sitemaps_Logger_Sitemap_LogItem */
20
+ foreach ($data['items'] as $item) :
21
+ $count++;
22
+ /* translators: date format, see http://php.net/date */
23
+ $generated_on = $item->get_formatted_datetime(__('M d, Y h:i:s A', $this->domain));
24
+ $sitemap_url = $this->get_sitemap_url($item->get_sitemap_slug());
25
+ ?>
26
+ <tr>
27
+ <td class="ordinal"><?php echo $count; ?></td>
28
+ <td style="min-width: 250px">
29
+ <a target="_blank"
30
+ href="<?php esc_attr_e($sitemap_url); ?>"><?php echo esc_html($item->get_sitemap_slug()); ?></a>
31
+ </td>
32
+ <td style="width: 220px"><?php echo esc_html($generated_on); ?></td>
33
+ <td style="width: 200px">
34
+ <a target="_blank" title="<?php _e('Click to view', $this->domain); ?>"
35
+ href="<?php esc_attr_e($sitemap_url); ?>"
36
+ class="button-secondary bwp-button">
37
+ <span class="dashicons dashicons-visibility"></span>
38
+ </a>
39
+ <a target="_blank" title="<?php _e('Click to regenerate', $this->domain); ?>"
40
+ href="<?php esc_attr_e(add_query_arg(array('generate' => 1, 't' => time()), $sitemap_url)); ?>"
41
+ class="button-secondary bwp-button">
42
+ <span class="dashicons dashicons-update"></span>
43
+ </a>
44
+ </td>
45
+ </tr>
46
+ <?php
47
+ endforeach;
48
+ ?>
49
+ </tbody>
50
+ </table>
51
+ <!--[if lte IE 9]>
52
+ </div>
53
+ <!--<![endif]-->
src/templates/provider/admin/exclude-posts.html.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if (!defined('ABSPATH')) { exit; } ?>
2
+
3
+ <div id="wrapper-exclude-posts" class="bwp-inline-form-wrapper bwp-inline-form-wrapper-lg bwp-no-display bwp-clear">
4
+ <div class="bwp-form-group bwp-form-group-first">
5
+ <select data-placeholder="<?php _e('Search for posts to exclude', $this->domain); ?>"
6
+ class="bwp-typeahead" name="select-exclude-posts[]" id="select-exclude-posts"
7
+ multiple>
8
+ </select>
9
+ </div>
10
+
11
+ <div class="bwp-button-group">
12
+ <button type="submit" class="button-primary" name="exclude_posts"><?php _e('Exclude selected items', $this->domain); ?></button>
13
+ &nbsp;
14
+ <button type="button" class="button-secondary bwp-switch-button"
15
+ data-callback="bwp_button_view_excluded_posts_cb"
16
+ data-target="wrapper-excluded-posts"
17
+ data-loader="loader-excluded-posts"><?php _e('Show/Hide excluded items', $this->domain); ?></button>
18
+ <span id="loader-excluded-posts" style="display: none;"><em><?php _e('... loading', $this->domain); ?></em></span>
19
+ </div>
20
+
21
+ <div id="wrapper-excluded-posts" class="bwp-no-display">
22
+ <table id="table-excluded-posts"
23
+ class="wp-list-table widefat striped hover bwp-table bwp-table-inline"
24
+ border="0" cellspacing="0" cellpadding="0">
25
+ <thead>
26
+ <tr>
27
+ <th><?php _e('ID'); ?></th>
28
+ <th><?php _e('Title', $this->domain); ?></th>
29
+ <th><?php _e('Remove', $this->domain); ?></th>
30
+ </tr>
31
+ </thead>
32
+ </table>
33
+ </div>
34
+ </div>
src/templates/provider/admin/exclude-terms.html.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if (!defined('ABSPATH')) { exit; } ?>
2
+
3
+ <div id="wrapper-exclude-terms" class="bwp-inline-form-wrapper bwp-inline-form-wrapper-md bwp-no-display bwp-clear">
4
+ <div class="bwp-form-group bwp-form-group-first">
5
+ <select data-placeholder="<?php _e('Search for terms to exclude', $this->domain); ?>"
6
+ class="bwp-typeahead" name="select-exclude-terms[]" id="select-exclude-terms"
7
+ multiple>
8
+ </select>
9
+ </div>
10
+
11
+ <div class="bwp-button-group">
12
+ <button type="submit" class="button-primary" name="exclude_terms"><?php _e('Exclude selected items', $this->domain); ?></button>
13
+ &nbsp;
14
+ <button type="button" class="button-secondary bwp-switch-button"
15
+ data-callback="bwp_button_view_excluded_terms_cb"
16
+ data-target="wrapper-excluded-terms"
17
+ data-loader="loader-excluded-terms"><?php _e('Show/Hide excluded items', $this->domain); ?></button>
18
+ <span id="loader-excluded-terms" style="display: none;"><em><?php _e('... loading', $this->domain); ?></em></span>
19
+ </div>
20
+
21
+ <div id="wrapper-excluded-terms" class="bwp-no-display">
22
+ <table id="table-excluded-terms"
23
+ class="wp-list-table widefat striped hover bwp-table bwp-table-inline"
24
+ border="0" cellspacing="0" cellpadding="0">
25
+ <thead>
26
+ <tr>
27
+ <th><?php _e('ID'); ?></th>
28
+ <th><?php _ex('Name', 'term name', $this->domain); ?></th>
29
+ <th><?php _e('Remove', $this->domain); ?></th>
30
+ </tr>
31
+ </thead>
32
+ </table>
33
+ </div>
34
+ </div>
src/templates/provider/admin/external-page-form.html.php ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if (!defined('ABSPATH')) { exit; } ?>
2
+
3
+ <?php
4
+ // default form data
5
+ $page = isset($data['page']) ? $data['page'] : array();
6
+
7
+ $page = array_merge(array(
8
+ 'frequency' => 'auto',
9
+ 'priority' => 1.0,
10
+ 'url' => null,
11
+ 'last_modified' => null
12
+ ), $page);
13
+ ?>
14
+
15
+ <form action="" method="POST" accept-charset="utf-8">
16
+ <div class="bwp-form-group">
17
+ <label class="bwp-label-required" for="external-page-url"><?php _e('Absolute URL to page', $this->domain); ?></label>
18
+ <input class="bwp-form-control bwp-popover-focus" type="text" name="url"
19
+ data-content="<?php _e('Each page must have a unique URL, '
20
+ . 'so if you provide an existing URL, '
21
+ . 'the page with that URL will be updated with new data provided here.', $this->domain); ?>"
22
+ data-placement="auto bottom"
23
+ id="external-page-url" value="<?php esc_attr_e($page['url']) ?>" />
24
+ </div>
25
+
26
+ <div class="bwp-form-group bwp-form-group-sm">
27
+ <label for="external-page-frequency"><?php _e('Change frequency', $this->domain); ?></label>
28
+ <select name="frequency" id="external-page-frequency">
29
+ <option value="auto"><?php _e('Calculate using "Last modified"', $this->domain); ?></option>
30
+ <?php foreach ($data['frequencies'] as $label => $value) : ?>
31
+ <option value="<?php esc_attr_e($value); ?>" <?php selected($page['frequency'], $value); ?>><?php echo esc_html($label); ?></option>
32
+ <?php endforeach; ?>
33
+ </select>
34
+ </div>
35
+
36
+ <div class="bwp-form-group bwp-form-group-xs">
37
+ <label for="external-page-priority"><?php _e('Priority', $this->domain); ?></label>
38
+ <select id="external-page-priority" name="priority">
39
+ <?php foreach ($data['priorities'] as $label => $value) : ?>
40
+ <option value="<?php esc_attr_e($value); ?>" <?php selected($page['priority'], $value); ?>><?php echo esc_html($label); ?></option>
41
+ <?php endforeach; ?>
42
+ </select>
43
+ </div>
44
+
45
+ <div class="bwp-form-group bwp-form-group-sm">
46
+ <label for="external-page-last-modified"><?php _e('Last modified (time is optional)', $this->domain); ?></label>
47
+ <input class="bwp-form-control bwp-form-control-with-icon bwp-datepicker"
48
+ type="text" name="last_modified"
49
+ id="external-page-last-modified" value="<?php esc_attr_e($page['last_modified']) ?>" />
50
+ <span class="dashicons dashicons-calendar bwp-form-control-icon"
51
+ title="<?php _e('Click to open a calendar', $this->domain); ?>"></span>
52
+ </div>
53
+
54
+ <span class="bwp-form-help-block bwp-form-help-block-last">
55
+ <strong><?php _e('Important', $this->domain); ?></strong>:
56
+ <?php printf(__('Please specify "Last modified" in your <a href="%s" target="_blank">local timezone</a>.', $this->domain), admin_url('options-general.php#timezone_string')); ?>
57
+ </span>
58
+
59
+ <input type="hidden" name="action" value="bwp-gxs-submit-external-page" />
60
+ <input type="hidden" name="_ajax_nonce" value="<?php echo wp_create_nonce('bwp_gxs_manage_external_page'); ?>" />
61
+ </form>
src/templates/provider/admin/external-page-modal.html.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if (!defined('ABSPATH')) { exit; } ?>
2
+
3
+ <div class="bwp-modal" id="modal-external-page">
4
+ <div class="bwp-modal-dialog">
5
+ <div class="bwp-modal-content">
6
+ <div class="bwp-modal-header">
7
+ <button type="button" class="bwp-close" data-dismiss="modal">
8
+ <span aria-hidden="true">&times;</span>
9
+ </button>
10
+ <h4 class="bwp-modal-title"><?php _e('Add/Update an external page', $this->domain); ?></h4>
11
+ </div>
12
+ <div class="bwp-modal-body">
13
+ <?php echo $this->get_template_contents(
14
+ 'templates/provider/admin/external-page-form.html.php',
15
+ array_merge($data, array(
16
+ ))
17
+ ); ?>
18
+ </div>
19
+ <div class="bwp-modal-footer">
20
+ <span class="bwp-modal-message text-primary" style="display: none"
21
+ data-working-text="<?php _e('working ...', $this->domain); ?>"></span>
22
+
23
+ <button type="button" class="bwp-btn bwp-btn-default button-secondary"
24
+ data-dismiss="modal"><?php _e('Close', $this->domain); ?></button>
25
+
26
+ <button type="button" class="bwp-btn bwp-btn-default button-secondary bwp-button-modal-reset">
27
+ <?php _e('Reset', $this->domain); ?>
28
+ </button>
29
+
30
+ <button type="button"
31
+ data-ajax-callback="bwp_button_add_new_external_page_cb"
32
+ class="bwp-btn bwp-btn-primary button-primary bwp-button-modal-submit">
33
+ <?php _e('Save Changes', $this->domain); ?>
34
+ </button>
35
+ </div>
36
+ </div>
37
+ </div>
38
+ </div>
src/templates/provider/admin/external-pages.html.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if (!defined('ABSPATH')) { exit; } ?>
2
+
3
+ <div id="wrapper-external-pages" class="bwp-inline-form-wrapper bwp-inline-form-wrapper-full">
4
+ <div class="bwp-button-group">
5
+ <button type="button" data-target="#modal-external-page"
6
+ class="button-secondary bwp-button-modal"
7
+ name="add_external_page"><?php _e('Add new page', $this->domain); ?></button>
8
+ &nbsp;
9
+ <button type="button" class="button-secondary bwp-switch-button"
10
+ data-callback="bwp_button_view_external_pages_cb"
11
+ data-target="wrapper-list-external-pages"
12
+ data-loader="loader-external-pages"><?php _e('Show/Hide external pages', $this->domain); ?></button>
13
+ <span id="loader-external-pages" style="display: none;"><em><?php _e('... loading', $this->domain); ?></em></span>
14
+ </div>
15
+
16
+ <div id="wrapper-list-external-pages" class="bwp-no-display">
17
+ <table id="table-external-pages"
18
+ class="wp-list-table widefat striped hover bwp-table bwp-table-inline"
19
+ border="0" cellspacing="0" cellpadding="0">
20
+ <thead>
21
+ <tr>
22
+ <th><?php _e('Url', $this->domain); ?></th>
23
+ <th><?php _e('Change frequency', $this->domain); ?></th>
24
+ <th><?php _e('Priority', $this->domain); ?></th>
25
+ <th><?php _e('Last modified', $this->domain); ?></th>
26
+ <th><?php _e('Actions', $this->domain); ?></th>
27
+ </tr>
28
+ </thead>
29
+ </table>
30
+ </div>
31
+ </div>
src/templates/provider/admin/news-contents.html.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if (!defined('ABSPATH')) { exit; } ?>
2
+
3
+ <div id="wrapper-selected-term-genres" class="bwp-no-display bwp-inline-form-wrapper bwp-inline-form-wrapper-lg">
4
+ <table id="table-selected-term-genres"
5
+ class="wp-list-table widefat striped bwp-table bwp-table-md bwp-table-inline">
6
+ <thead>
7
+ <tr>
8
+ <th><?php _e('Select', $this->domain); ?></th>
9
+ <th><?php _e('Name', $this->domain); ?></th>
10
+ <th>
11
+ <?php _e('Genres', $this->domain); ?>
12
+ <a href="https://support.google.com/news/publisher/answer/116037?hl=en&amp;ref_topic=4359874"
13
+ title="<?php _e('View more info in a separate tab', $this->domain); ?>" target="_blank"
14
+ class="bwp-field-help-link">&nbsp;<span class="dashicons dashicons-editor-help bwp-field-help"></span></a>
15
+ </th>
16
+ </tr>
17
+ </thead>
18
+ </table>
19
+
20
+ <input type="hidden" name="term_genre_can_submit" value="0" />
21
+ </div>
src/upgrades/db/r2.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if (!defined('ABSPATH')) { exit; }
4
+
5
+ // r2 2015-10-08
6
+
7
+ $old_logs = $this->bridge->get_option(BWP_GXS_LOG);
8
+
9
+ if (!$old_logs || !is_array($old_logs)) {
10
+ return;
11
+ }
12
+
13
+ $new_logs = $this->_get_initial_logs();
14
+
15
+ foreach ($old_logs as $key => $logs) {
16
+ foreach ($logs as $log) {
17
+ // logs already updated to new format
18
+ if (isset($log['datetime'])) {
19
+ continue;
20
+ }
21
+
22
+ // old logs use time in local timezone, convert it to UTC
23
+ $time = $log['time'];
24
+ $time_utc = $time - $this->bridge->get_option('gmt_offset') * HOUR_IN_SECONDS;
25
+
26
+ // '@' notation converts internally to UTC
27
+ // @see http://php.net/manual/en/datetime.formats.compound.php
28
+ $datetime_utc = new DateTime('@' . $time_utc);
29
+
30
+ if ($key == 'log') {
31
+ $new_logs['messages'][] = array(
32
+ 'message' => $log['log'],
33
+ 'type' => $log['error'] === true
34
+ ? BWP_Sitemaps_Logger_Message_LogItem::TYPE_ERROR
35
+ : ($log['error'] === 'notice'
36
+ ? BWP_Sitemaps_Logger_Message_LogItem::TYPE_NOTICE
37
+ : BWP_Sitemaps_Logger_Message_LogItem::TYPE_SUCCESS),
38
+ 'datetime' => $datetime_utc->format('Y-m-d H:i:s')
39
+ );
40
+ } elseif ($key == 'sitemap') {
41
+ $new_logs['sitemaps'][] = array(
42
+ 'slug' => $log['url'],
43
+ 'datetime' => $datetime_utc->format('Y-m-d H:i:s')
44
+ );
45
+ }
46
+ }
47
+ }
48
+
49
+ $this->bridge->update_option(BWP_GXS_LOG, $new_logs);
src/upgrades/db/r3.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if (!defined('ABSPATH')) { exit; }
4
+
5
+ // r3 2015-12-03
6
+ $news_keyword_source = '';
7
+
8
+ // no google news settings
9
+ if (! $this->is_option_key_valid(BWP_GXS_GOOGLE_NEWS)) {
10
+ return;
11
+ }
12
+
13
+ // change 'select_news_keyword_type' to 'select_news_keyword_source'
14
+ if (isset($this->options['select_news_keyword_type'])) {
15
+ $news_keyword_source = $this->options['select_news_keyword_type'] == 'tag'
16
+ ? 'tag' : 'category';
17
+ }
18
+
19
+ // change news genres array keys' prefix to 'term_'
20
+ $news_genres = array();
21
+ if (isset($this->options['input_news_genres']) && is_array($this->options['input_news_genres'])) {
22
+ foreach ($this->options['input_news_genres'] as $key => $term_genres) {
23
+ // perhaps already updated
24
+ if (! preg_match('/^cat_(\d+)$/i', $key, $matches)) {
25
+ continue;
26
+ }
27
+
28
+ $news_genres['term_' . $matches[1]] = $term_genres;
29
+ }
30
+ }
31
+
32
+ $this->update_some_options(BWP_GXS_GOOGLE_NEWS, array(
33
+ 'input_news_genres' => $news_genres,
34
+ 'select_news_keyword_source' => $news_keyword_source
35
+ ));
src/upgrades/db/r4.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if (!defined('ABSPATH')) { exit; }
4
+
5
+ // r4 2015-12-15
6
+ // merge google news settings into extensions settings when needed
7
+ if (! $this->is_option_key_valid(BWP_GXS_GOOGLE_NEWS)) {
8
+ return;
9
+ }
10
+
11
+ $this->update_some_options(BWP_GXS_EXTENSIONS, get_option(BWP_GXS_GOOGLE_NEWS));
src/validator/url.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright (c) 2015 Khang Minh <contact@betterwp.net>
5
+ * @license http://www.gnu.org/licenses/gpl.html GNU GENERAL PUBLIC LICENSE VERSION 3.0 OR LATER
6
+ */
7
+
8
+ /**
9
+ * @since 1.4.0
10
+ * @author Khang Minh <contact@betterwp.net>
11
+ */
12
+ class BWP_Sitemaps_Validator_Url
13
+ {
14
+ // @link https://github.com/symfony/validator/blob/master/Constraints/UrlValidator.php
15
+ const PATTERN = '~^
16
+ (%s):// # protocol
17
+ (([\pL\pN-]+:)?([\pL\pN-]+)@)? # basic auth
18
+ (
19
+ ([\pL\pN\pS-\.])+(\.?([\pL]|xn\-\-[\pL\pN-]+)+\.?) # a domain name
20
+ |
21
+ \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} # a IP address
22
+ |
23
+ \[
24
+ (?:(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){6})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:::(?:(?:(?:[0-9a-f]{1,4})):){5})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){4})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,1}(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){3})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,2}(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){2})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,3}(?:(?:[0-9a-f]{1,4})))?::(?:(?:[0-9a-f]{1,4})):)(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,4}(?:(?:[0-9a-f]{1,4})))?::)(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,5}(?:(?:[0-9a-f]{1,4})))?::)(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,6}(?:(?:[0-9a-f]{1,4})))?::))))
25
+ \] # a IPv6 address
26
+ )
27
+ (:[0-9]+)? # a port (optional)
28
+ (/?|/\S+|\?|\#) # a /, nothing, a / with something, a query or a fragment
29
+ $~ixu';
30
+
31
+ /**
32
+ * Validate a url
33
+ *
34
+ * @param string $url
35
+ * @return bool
36
+ */
37
+ public static function validate($url)
38
+ {
39
+ $protocols = array('http', 'https');
40
+
41
+ $pattern = sprintf(self::PATTERN, implode('|', $protocols));
42
+
43
+ if (! preg_match($pattern, $url)) {
44
+ return false;
45
+ }
46
+
47
+ return true;
48
+ }
49
+ }
vendor/autoload.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload.php @generated by Composer
4
+
5
+ require_once __DIR__ . '/composer' . '/autoload_real.php';
6
+
7
+ return ComposerAutoloaderInitead45c0cff3317603210ba4c53063687::getLoader();
vendor/composer/ClassLoader.php ADDED
@@ -0,0 +1,413 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of Composer.
5
+ *
6
+ * (c) Nils Adermann <naderman@naderman.de>
7
+ * Jordi Boggiano <j.boggiano@seld.be>
8
+ *
9
+ * For the full copyright and license information, please view the LICENSE
10
+ * file that was distributed with this source code.
11
+ */
12
+
13
+ namespace Composer\Autoload;
14
+
15
+ /**
16
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
17
+ *
18
+ * $loader = new \Composer\Autoload\ClassLoader();
19
+ *
20
+ * // register classes with namespaces
21
+ * $loader->add('Symfony\Component', __DIR__.'/component');
22
+ * $loader->add('Symfony', __DIR__.'/framework');
23
+ *
24
+ * // activate the autoloader
25
+ * $loader->register();
26
+ *
27
+ * // to enable searching the include path (eg. for PEAR packages)
28
+ * $loader->setUseIncludePath(true);
29
+ *
30
+ * In this example, if you try to use a class in the Symfony\Component
31
+ * namespace or one of its children (Symfony\Component\Console for instance),
32
+ * the autoloader will first look for the class under the component/
33
+ * directory, and it will then fallback to the framework/ directory if not
34
+ * found before giving up.
35
+ *
36
+ * This class is loosely based on the Symfony UniversalClassLoader.
37
+ *
38
+ * @author Fabien Potencier <fabien@symfony.com>
39
+ * @author Jordi Boggiano <j.boggiano@seld.be>
40
+ * @see http://www.php-fig.org/psr/psr-0/
41
+ * @see http://www.php-fig.org/psr/psr-4/
42
+ */
43
+ class ClassLoader
44
+ {
45
+ // PSR-4
46
+ private $prefixLengthsPsr4 = array();
47
+ private $prefixDirsPsr4 = array();
48
+ private $fallbackDirsPsr4 = array();
49
+
50
+ // PSR-0
51
+ private $prefixesPsr0 = array();
52
+ private $fallbackDirsPsr0 = array();
53
+
54
+ private $useIncludePath = false;
55
+ private $classMap = array();
56
+
57
+ private $classMapAuthoritative = false;
58
+
59
+ public function getPrefixes()
60
+ {
61
+ if (!empty($this->prefixesPsr0)) {
62
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
63
+ }
64
+
65
+ return array();
66
+ }
67
+
68
+ public function getPrefixesPsr4()
69
+ {
70
+ return $this->prefixDirsPsr4;
71
+ }
72
+
73
+ public function getFallbackDirs()
74
+ {
75
+ return $this->fallbackDirsPsr0;
76
+ }
77
+
78
+ public function getFallbackDirsPsr4()
79
+ {
80
+ return $this->fallbackDirsPsr4;
81
+ }
82
+
83
+ public function getClassMap()
84
+ {
85
+ return $this->classMap;
86
+ }
87
+
88
+ /**
89
+ * @param array $classMap Class to filename map
90
+ */
91
+ public function addClassMap(array $classMap)
92
+ {
93
+ if ($this->classMap) {
94
+ $this->classMap = array_merge($this->classMap, $classMap);
95
+ } else {
96
+ $this->classMap = $classMap;
97
+ }
98
+ }
99
+
100
+ /**
101
+ * Registers a set of PSR-0 directories for a given prefix, either
102
+ * appending or prepending to the ones previously set for this prefix.
103
+ *
104
+ * @param string $prefix The prefix
105
+ * @param array|string $paths The PSR-0 root directories
106
+ * @param bool $prepend Whether to prepend the directories
107
+ */
108
+ public function add($prefix, $paths, $prepend = false)
109
+ {
110
+ if (!$prefix) {
111
+ if ($prepend) {
112
+ $this->fallbackDirsPsr0 = array_merge(
113
+ (array) $paths,
114
+ $this->fallbackDirsPsr0
115
+ );
116
+ } else {
117
+ $this->fallbackDirsPsr0 = array_merge(
118
+ $this->fallbackDirsPsr0,
119
+ (array) $paths
120
+ );
121
+ }
122
+
123
+ return;
124
+ }
125
+
126
+ $first = $prefix[0];
127
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
128
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
129
+
130
+ return;
131
+ }
132
+ if ($prepend) {
133
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
134
+ (array) $paths,
135
+ $this->prefixesPsr0[$first][$prefix]
136
+ );
137
+ } else {
138
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
139
+ $this->prefixesPsr0[$first][$prefix],
140
+ (array) $paths
141
+ );
142
+ }
143
+ }
144
+
145
+ /**
146
+ * Registers a set of PSR-4 directories for a given namespace, either
147
+ * appending or prepending to the ones previously set for this namespace.
148
+ *
149
+ * @param string $prefix The prefix/namespace, with trailing '\\'
150
+ * @param array|string $paths The PSR-0 base directories
151
+ * @param bool $prepend Whether to prepend the directories
152
+ *
153
+ * @throws \InvalidArgumentException
154
+ */
155
+ public function addPsr4($prefix, $paths, $prepend = false)
156
+ {
157
+ if (!$prefix) {
158
+ // Register directories for the root namespace.
159
+ if ($prepend) {
160
+ $this->fallbackDirsPsr4 = array_merge(
161
+ (array) $paths,
162
+ $this->fallbackDirsPsr4
163
+ );
164
+ } else {
165
+ $this->fallbackDirsPsr4 = array_merge(
166
+ $this->fallbackDirsPsr4,
167
+ (array) $paths
168
+ );
169
+ }
170
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
171
+ // Register directories for a new namespace.
172
+ $length = strlen($prefix);
173
+ if ('\\' !== $prefix[$length - 1]) {
174
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
175
+ }
176
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
177
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
178
+ } elseif ($prepend) {
179
+ // Prepend directories for an already registered namespace.
180
+ $this->prefixDirsPsr4[$prefix] = array_merge(
181
+ (array) $paths,
182
+ $this->prefixDirsPsr4[$prefix]
183
+ );
184
+ } else {
185
+ // Append directories for an already registered namespace.
186
+ $this->prefixDirsPsr4[$prefix] = array_merge(
187
+ $this->prefixDirsPsr4[$prefix],
188
+ (array) $paths
189
+ );
190
+ }
191
+ }
192
+
193
+ /**
194
+ * Registers a set of PSR-0 directories for a given prefix,
195
+ * replacing any others previously set for this prefix.
196
+ *
197
+ * @param string $prefix The prefix
198
+ * @param array|string $paths The PSR-0 base directories
199
+ */
200
+ public function set($prefix, $paths)
201
+ {
202
+ if (!$prefix) {
203
+ $this->fallbackDirsPsr0 = (array) $paths;
204
+ } else {
205
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
206
+ }
207
+ }
208
+
209
+ /**
210
+ * Registers a set of PSR-4 directories for a given namespace,
211
+ * replacing any others previously set for this namespace.
212
+ *
213
+ * @param string $prefix The prefix/namespace, with trailing '\\'
214
+ * @param array|string $paths The PSR-4 base directories
215
+ *
216
+ * @throws \InvalidArgumentException
217
+ */
218
+ public function setPsr4($prefix, $paths)
219
+ {
220
+ if (!$prefix) {
221
+ $this->fallbackDirsPsr4 = (array) $paths;
222
+ } else {
223
+ $length = strlen($prefix);
224
+ if ('\\' !== $prefix[$length - 1]) {
225
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
226
+ }
227
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
228
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
229
+ }
230
+ }
231
+
232
+ /**
233
+ * Turns on searching the include path for class files.
234
+ *
235
+ * @param bool $useIncludePath
236
+ */
237
+ public function setUseIncludePath($useIncludePath)
238
+ {
239
+ $this->useIncludePath = $useIncludePath;
240
+ }
241
+
242
+ /**
243
+ * Can be used to check if the autoloader uses the include path to check
244
+ * for classes.
245
+ *
246
+ * @return bool
247
+ */
248
+ public function getUseIncludePath()
249
+ {
250
+ return $this->useIncludePath;
251
+ }
252
+
253
+ /**
254
+ * Turns off searching the prefix and fallback directories for classes
255
+ * that have not been registered with the class map.
256
+ *
257
+ * @param bool $classMapAuthoritative
258
+ */
259
+ public function setClassMapAuthoritative($classMapAuthoritative)
260
+ {
261
+ $this->classMapAuthoritative = $classMapAuthoritative;
262
+ }
263
+
264
+ /**
265
+ * Should class lookup fail if not found in the current class map?
266
+ *
267
+ * @return bool
268
+ */
269
+ public function isClassMapAuthoritative()
270
+ {
271
+ return $this->classMapAuthoritative;
272
+ }
273
+
274
+ /**
275
+ * Registers this instance as an autoloader.
276
+ *
277
+ * @param bool $prepend Whether to prepend the autoloader or not
278
+ */
279
+ public function register($prepend = false)
280
+ {
281
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
282
+ }
283
+
284
+ /**
285
+ * Unregisters this instance as an autoloader.
286
+ */
287
+ public function unregister()
288
+ {
289
+ spl_autoload_unregister(array($this, 'loadClass'));
290
+ }
291
+
292
+ /**
293
+ * Loads the given class or interface.
294
+ *
295
+ * @param string $class The name of the class
296
+ * @return bool|null True if loaded, null otherwise
297
+ */
298
+ public function loadClass($class)
299
+ {
300
+ if ($file = $this->findFile($class)) {
301
+ includeFile($file);
302
+
303
+ return true;
304
+ }
305
+ }
306
+
307
+ /**
308
+ * Finds the path to the file where the class is defined.
309
+ *
310
+ * @param string $class The name of the class
311
+ *
312
+ * @return string|false The path if found, false otherwise
313
+ */
314
+ public function findFile($class)
315
+ {
316
+ // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
317
+ if ('\\' == $class[0]) {
318
+ $class = substr($class, 1);
319
+ }
320
+
321
+ // class map lookup
322
+ if (isset($this->classMap[$class])) {
323
+ return $this->classMap[$class];
324
+ }
325
+ if ($this->classMapAuthoritative) {
326
+ return false;
327
+ }
328
+
329
+ $file = $this->findFileWithExtension($class, '.php');
330
+
331
+ // Search for Hack files if we are running on HHVM
332
+ if ($file === null && defined('HHVM_VERSION')) {
333
+ $file = $this->findFileWithExtension($class, '.hh');
334
+ }
335
+
336
+ if ($file === null) {
337
+ // Remember that this class does not exist.
338
+ return $this->classMap[$class] = false;
339
+ }
340
+
341
+ return $file;
342
+ }
343
+
344
+ private function findFileWithExtension($class, $ext)
345
+ {
346
+ // PSR-4 lookup
347
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
348
+
349
+ $first = $class[0];
350
+ if (isset($this->prefixLengthsPsr4[$first])) {
351
+ foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
352
+ if (0 === strpos($class, $prefix)) {
353
+ foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
354
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
355
+ return $file;
356
+ }
357
+ }
358
+ }
359
+ }
360
+ }
361
+
362
+ // PSR-4 fallback dirs
363
+ foreach ($this->fallbackDirsPsr4 as $dir) {
364
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
365
+ return $file;
366
+ }
367
+ }
368
+
369
+ // PSR-0 lookup
370
+ if (false !== $pos = strrpos($class, '\\')) {
371
+ // namespaced class name
372
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
373
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
374
+ } else {
375
+ // PEAR-like class name
376
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
377
+ }
378
+
379
+ if (isset($this->prefixesPsr0[$first])) {
380
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
381
+ if (0 === strpos($class, $prefix)) {
382
+ foreach ($dirs as $dir) {
383
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
384
+ return $file;
385
+ }
386
+ }
387
+ }
388
+ }
389
+ }
390
+
391
+ // PSR-0 fallback dirs
392
+ foreach ($this->fallbackDirsPsr0 as $dir) {
393
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
394
+ return $file;
395
+ }
396
+ }
397
+
398
+ // PSR-0 include paths.
399
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
400
+ return $file;
401
+ }
402
+ }
403
+ }
404
+
405
+ /**
406
+ * Scope isolated include.
407
+ *
408
+ * Prevents access to $this/self from included files.
409
+ */
410
+ function includeFile($file)
411
+ {
412
+ include $file;
413
+ }
vendor/composer/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ Copyright (c) 2015 Nils Adermann, Jordi Boggiano
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ of this software and associated documentation files (the "Software"), to deal
6
+ in the Software without restriction, including without limitation the rights
7
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the Software is furnished
9
+ to do so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in all
12
+ copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ THE SOFTWARE.
21
+
vendor/composer/autoload_classmap.php ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_classmap.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ 'BWP_Cache' => $vendorDir . '/kminh/bwp-framework/src/class-bwp-cache.php',
10
+ 'BWP_Framework_PHPUnit_Unit_TestCase' => $vendorDir . '/kminh/bwp-framework/src/phpunit/unit-testcase.php',
11
+ 'BWP_Framework_PHPUnit_WP_Base_Functional_TestCase' => $vendorDir . '/kminh/bwp-framework/src/phpunit/wp-base-functional-testcase.php',
12
+ 'BWP_Framework_PHPUnit_WP_Functional_TestCase' => $vendorDir . '/kminh/bwp-framework/src/phpunit/wp-functional-testcase.php',
13
+ 'BWP_Framework_PHPUnit_WP_Functional_TestListener' => $vendorDir . '/kminh/bwp-framework/src/phpunit/wp-functional-testcase-listener.php',
14
+ 'BWP_Framework_PHPUnit_WP_Legacy_Functional_TestCase' => $vendorDir . '/kminh/bwp-framework/src/phpunit/wp-legacy-functional-testcase.php',
15
+ 'BWP_Framework_PHPUnit_WP_Multisite_Functional_TestCase' => $vendorDir . '/kminh/bwp-framework/src/phpunit/wp-multisite-functional-testcase.php',
16
+ 'BWP_Framework_Util' => $vendorDir . '/kminh/bwp-framework/src/class-bwp-framework-util.php',
17
+ 'BWP_Framework_V3' => $vendorDir . '/kminh/bwp-framework/src/class-bwp-framework-v3.php',
18
+ 'BWP_GXS_CACHE' => $baseDir . '/src/class-bwp-gxs-cache.php',
19
+ 'BWP_GXS_MODULE' => $baseDir . '/src/class-bwp-gxs-module.php',
20
+ 'BWP_GXS_MODULE_ARCHIVE' => $baseDir . '/src/modules/archive.php',
21
+ 'BWP_GXS_MODULE_AUTHOR' => $baseDir . '/src/modules/author.php',
22
+ 'BWP_GXS_MODULE_INDEX' => $baseDir . '/src/modules/sitemapindex.php',
23
+ 'BWP_GXS_MODULE_PAGE' => $baseDir . '/src/modules/page.php',
24
+ 'BWP_GXS_MODULE_PAGE_EXTERNAL' => $baseDir . '/src/modules/page_external.php',
25
+ 'BWP_GXS_MODULE_POST' => $baseDir . '/src/modules/post.php',
26
+ 'BWP_GXS_MODULE_POST_GOOGLE_NEWS' => $baseDir . '/src/modules/post_google_news.php',
27
+ 'BWP_GXS_MODULE_POST_MOST_POPULAR' => $baseDir . '/src/modules/post_most_popular.php',
28
+ 'BWP_GXS_MODULE_SITE' => $baseDir . '/src/modules/site.php',
29
+ 'BWP_GXS_MODULE_TAXONOMY' => $baseDir . '/src/modules/taxonomy.php',
30
+ 'BWP_Option_Page_V3' => $vendorDir . '/kminh/bwp-framework/src/class-bwp-option-page-v3.php',
31
+ 'BWP_Sitemaps' => $baseDir . '/src/class-bwp-gxs.php',
32
+ 'BWP_Sitemaps_Excluder' => $baseDir . '/src/provider/excluder.php',
33
+ 'BWP_Sitemaps_Handler_AjaxHandler' => $baseDir . '/src/handler/ajax/handler.php',
34
+ 'BWP_Sitemaps_Handler_Ajax_ExternalPageHandler' => $baseDir . '/src/handler/ajax/external-page.php',
35
+ 'BWP_Sitemaps_Handler_Ajax_NewsTermsHandler' => $baseDir . '/src/handler/ajax/news-terms.php',
36
+ 'BWP_Sitemaps_Handler_Ajax_PostHandler' => $baseDir . '/src/handler/ajax/post.php',
37
+ 'BWP_Sitemaps_Handler_Ajax_TaxonomyHandler' => $baseDir . '/src/handler/ajax/taxonomy.php',
38
+ 'BWP_Sitemaps_Handler_Ajax_WPContentHandler' => $baseDir . '/src/handler/ajax/wp-content.php',
39
+ 'BWP_Sitemaps_Logger' => $baseDir . '/src/logger/logger.php',
40
+ 'BWP_Sitemaps_Logger_LogItem' => $baseDir . '/src/logger/log-item.php',
41
+ 'BWP_Sitemaps_Logger_MessageLogger' => $baseDir . '/src/logger/message-logger.php',
42
+ 'BWP_Sitemaps_Logger_Message_LogItem' => $baseDir . '/src/logger/message-log-item.php',
43
+ 'BWP_Sitemaps_Logger_SitemapLogger' => $baseDir . '/src/logger/sitemap-logger.php',
44
+ 'BWP_Sitemaps_Logger_Sitemap_LogItem' => $baseDir . '/src/logger/sitemap-log-item.php',
45
+ 'BWP_Sitemaps_PHPUnit_Provider_Unit_TestCase' => $baseDir . '/src/phpunit/provider-unit-testcase.php',
46
+ 'BWP_Sitemaps_PHPUnit_WP_Functional_TestCase' => $baseDir . '/src/phpunit/wp-functional-testcase.php',
47
+ 'BWP_Sitemaps_Provider' => $baseDir . '/src/provider/provider.php',
48
+ 'BWP_Sitemaps_Provider_ExternalPage' => $baseDir . '/src/provider/external-page.php',
49
+ 'BWP_Sitemaps_Provider_Post' => $baseDir . '/src/provider/post/post.php',
50
+ 'BWP_Sitemaps_Provider_Taxonomy' => $baseDir . '/src/provider/taxonomy/taxonomy.php',
51
+ 'BWP_Sitemaps_Sitemap' => $baseDir . '/src/sitemap/sitemap.php',
52
+ 'BWP_Sitemaps_Sitemap_Provider' => $baseDir . '/src/sitemap/provider/provider.php',
53
+ 'BWP_Sitemaps_Sitemap_Sanitizer' => $baseDir . '/src/sitemap/sanitizer/sanitizer.php',
54
+ 'BWP_Sitemaps_Sitemap_Sanitizer_Factory' => $baseDir . '/src/sitemap/sanitizer/xml/factory.php',
55
+ 'BWP_Sitemaps_Sitemap_Sanitizer_Xml_FrequencySanitizer' => $baseDir . '/src/sitemap/sanitizer/xml/frequency.php',
56
+ 'BWP_Sitemaps_Sitemap_Sanitizer_Xml_PrioritySanitizer' => $baseDir . '/src/sitemap/sanitizer/xml/priority.php',
57
+ 'BWP_Sitemaps_Sitemap_Sanitizer_Xml_TextSanitizer' => $baseDir . '/src/sitemap/sanitizer/xml/text.php',
58
+ 'BWP_Sitemaps_Sitemap_Tag' => $baseDir . '/src/sitemap/tag/tag.php',
59
+ 'BWP_Sitemaps_Sitemap_Tag_CompoundTag' => $baseDir . '/src/sitemap/tag/compound-tag.php',
60
+ 'BWP_Sitemaps_Sitemap_Tag_SingleTag' => $baseDir . '/src/sitemap/tag/single-tag.php',
61
+ 'BWP_Sitemaps_Sitemap_Xml' => $baseDir . '/src/sitemap/xml.php',
62
+ 'BWP_Sitemaps_Sitemap_XmlGoogleNews' => $baseDir . '/src/sitemap/xml-google-news.php',
63
+ 'BWP_Sitemaps_Sitemap_XmlIndex' => $baseDir . '/src/sitemap/xml-index.php',
64
+ 'BWP_Sitemaps_Validator_Url' => $baseDir . '/src/validator/url.php',
65
+ 'BWP_Version' => $vendorDir . '/kminh/bwp-framework/src/class-bwp-version.php',
66
+ 'BWP_WP_Bridge' => $vendorDir . '/kminh/bwp-framework/src/class-bwp-wp-bridge.php',
67
+ );
vendor/composer/autoload_namespaces.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_namespaces.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ );
vendor/composer/autoload_psr4.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_psr4.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ );
vendor/composer/autoload_real.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_real.php @generated by Composer
4
+
5
+ class ComposerAutoloaderInitead45c0cff3317603210ba4c53063687
6
+ {
7
+ private static $loader;
8
+
9
+ public static function loadClassLoader($class)
10
+ {
11
+ if ('Composer\Autoload\ClassLoader' === $class) {
12
+ require __DIR__ . '/ClassLoader.php';
13
+ }
14
+ }
15
+
16
+ public static function getLoader()
17
+ {
18
+ if (null !== self::$loader) {
19
+ return self::$loader;
20
+ }
21
+
22
+ spl_autoload_register(array('ComposerAutoloaderInitead45c0cff3317603210ba4c53063687', 'loadClassLoader'), true, true);
23
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInitead45c0cff3317603210ba4c53063687', 'loadClassLoader'));
25
+
26
+ $map = require __DIR__ . '/autoload_namespaces.php';
27
+ foreach ($map as $namespace => $path) {
28
+ $loader->set($namespace, $path);
29
+ }
30
+
31
+ $map = require __DIR__ . '/autoload_psr4.php';
32
+ foreach ($map as $namespace => $path) {
33
+ $loader->setPsr4($namespace, $path);
34
+ }
35
+
36
+ $classMap = require __DIR__ . '/autoload_classmap.php';
37
+ if ($classMap) {
38
+ $loader->addClassMap($classMap);
39
+ }
40
+
41
+ $loader->register(true);
42
+
43
+ return $loader;
44
+ }
45
+ }
vendor/composer/installed.json ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "name": "kminh/bwp-framework",
4
+ "version": "dev-master",
5
+ "version_normalized": "9999999-dev",
6
+ "source": {
7
+ "type": "git",
8
+ "url": "https://github.com/kminh/bwp-framework",
9
+ "reference": "1116564a3fd0d6a517e7c6d57d002f33a81b004a"
10
+ },
11
+ "require": {
12
+ "php": "^5.2.0"
13
+ },
14
+ "require-dev": {
15
+ "doctrine/common": "^2.5",
16
+ "fabpot/goutte": "~1.0",
17
+ "guzzle/http": "dev-master as 3.9.2",
18
+ "guzzle/plugin-cache": "^3.9",
19
+ "guzzle/plugin-cookie": "^3.9",
20
+ "mockery/mockery": "^0.9.4",
21
+ "phpunit/phpunit": "^4.8"
22
+ },
23
+ "time": "2016-01-14 16:26:40",
24
+ "bin": [
25
+ "bin/install-wp-tests.sh",
26
+ "bin/build-translations"
27
+ ],
28
+ "type": "library",
29
+ "extra": {
30
+ "branch-alias": {
31
+ "dev-master": "3.4.x-dev"
32
+ }
33
+ },
34
+ "installation-source": "source",
35
+ "autoload": {
36
+ "classmap": [
37
+ "src/"
38
+ ]
39
+ },
40
+ "license": [
41
+ "GPLv3"
42
+ ],
43
+ "authors": [
44
+ {
45
+ "name": "Khang Minh",
46
+ "email": "contact@betterwp.net"
47
+ }
48
+ ],
49
+ "description": "Base codes for BWP WordPress Plugins",
50
+ "homepage": "http://betterwp.net"
51
+ }
52
+ ]
vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png ADDED
Binary file
vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-bg_flat_100_d5d5d5_40x100.png ADDED
Binary file
vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-bg_flat_100_eee_40x100.png ADDED
Binary file
vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-bg_flat_100_f7f7f7_40x100.png ADDED
Binary file
vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-bg_flat_100_fafafa_40x100.png ADDED
Binary file
vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-bg_flat_75_cccccc_40x100.png ADDED
Binary file
vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-bg_flat_75_ffffff_40x100.png ADDED
Binary file
vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-bg_glass_95_fef1ec_1x400.png ADDED
Binary file
vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-icons_222222_256x240.png ADDED
Binary file
vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-icons_23282d_256x240.png ADDED
Binary file
vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-icons_32373c_256x240.png ADDED
Binary file
vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-icons_555_256x240.png ADDED
Binary file
vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-icons_cd0a0a_256x240.png ADDED
Binary file
vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/images/ui-icons_fff_256x240.png ADDED
Binary file
vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/jquery-ui.css ADDED
@@ -0,0 +1,1225 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*! jQuery UI - v1.11.4 - 2015-10-25
2
+ * http://jqueryui.com
3
+ * Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
4
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=inherit&fwDefault=normal&fsDefault=1em&cornerRadius=0&bgColorHeader=%23cccccc&bgTextureHeader=flat&bgImgOpacityHeader=75&borderColorHeader=%23aaaaaa&fcHeader=%23222222&iconColorHeader=%23222222&bgColorContent=%23ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=%23aaaaaa&fcContent=%23222222&iconColorContent=%23222222&bgColorDefault=%23f7f7f7&bgTextureDefault=flat&bgImgOpacityDefault=100&borderColorDefault=%23ccc&fcDefault=%23555555&iconColorDefault=%23555&bgColorHover=%23fafafa&bgTextureHover=flat&bgImgOpacityHover=100&borderColorHover=%23999&fcHover=%2323282d&iconColorHover=%2323282d&bgColorActive=%23d5d5d5&bgTextureActive=flat&bgImgOpacityActive=100&borderColorActive=%23999&fcActive=%2332373c&iconColorActive=%2332373c&bgColorHighlight=%23eee&bgTextureHighlight=flat&bgImgOpacityHighlight=100&borderColorHighlight=%2300a0d2&fcHighlight=%2300a0d2&iconColorHighlight=%23fff&bgColorError=%23fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=%23cd0a0a&fcError=%23cd0a0a&iconColorError=%23cd0a0a&bgColorOverlay=%23aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=%23aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
5
+ * Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
6
+
7
+ /* Layout helpers
8
+ ----------------------------------*/
9
+ .ui-helper-hidden {
10
+ display: none;
11
+ }
12
+ .ui-helper-hidden-accessible {
13
+ border: 0;
14
+ clip: rect(0 0 0 0);
15
+ height: 1px;
16
+ margin: -1px;
17
+ overflow: hidden;
18
+ padding: 0;
19
+ position: absolute;
20
+ width: 1px;
21
+ }
22
+ .ui-helper-reset {
23
+ margin: 0;
24
+ padding: 0;
25
+ border: 0;
26
+ outline: 0;
27
+ line-height: 1.3;
28
+ text-decoration: none;
29
+ font-size: 100%;
30
+ list-style: none;
31
+ }
32
+ .ui-helper-clearfix:before,
33
+ .ui-helper-clearfix:after {
34
+ content: "";
35
+ display: table;
36
+ border-collapse: collapse;
37
+ }
38
+ .ui-helper-clearfix:after {
39
+ clear: both;
40
+ }
41
+ .ui-helper-clearfix {
42
+ min-height: 0; /* support: IE7 */
43
+ }
44
+ .ui-helper-zfix {
45
+ width: 100%;
46
+ height: 100%;
47
+ top: 0;
48
+ left: 0;
49
+ position: absolute;
50
+ opacity: 0;
51
+ filter:Alpha(Opacity=0); /* support: IE8 */
52
+ }
53
+
54
+ .ui-front {
55
+ z-index: 100;
56
+ }
57
+
58
+
59
+ /* Interaction Cues
60
+ ----------------------------------*/
61
+ .ui-state-disabled {
62
+ cursor: default !important;
63
+ }
64
+
65
+
66
+ /* Icons
67
+ ----------------------------------*/
68
+
69
+ /* states and images */
70
+ .ui-icon {
71
+ display: block;
72
+ text-indent: -99999px;
73
+ overflow: hidden;
74
+ background-repeat: no-repeat;
75
+ }
76
+
77
+
78
+ /* Misc visuals
79
+ ----------------------------------*/
80
+
81
+ /* Overlays */
82
+ .ui-widget-overlay {
83
+ position: fixed;
84
+ top: 0;
85
+ left: 0;
86
+ width: 100%;
87
+ height: 100%;
88
+ }
89
+ .ui-draggable-handle {
90
+ -ms-touch-action: none;
91
+ touch-action: none;
92
+ }
93
+ .ui-resizable {
94
+ position: relative;
95
+ }
96
+ .ui-resizable-handle {
97
+ position: absolute;
98
+ font-size: 0.1px;
99
+ display: block;
100
+ -ms-touch-action: none;
101
+ touch-action: none;
102
+ }
103
+ .ui-resizable-disabled .ui-resizable-handle,
104
+ .ui-resizable-autohide .ui-resizable-handle {
105
+ display: none;
106
+ }
107
+ .ui-resizable-n {
108
+ cursor: n-resize;
109
+ height: 7px;
110
+ width: 100%;
111
+ top: -5px;
112
+ left: 0;
113
+ }
114
+ .ui-resizable-s {
115
+ cursor: s-resize;
116
+ height: 7px;
117
+ width: 100%;
118
+ bottom: -5px;
119
+ left: 0;
120
+ }
121
+ .ui-resizable-e {
122
+ cursor: e-resize;
123
+ width: 7px;
124
+ right: -5px;
125
+ top: 0;
126
+ height: 100%;
127
+ }
128
+ .ui-resizable-w {
129
+ cursor: w-resize;
130
+ width: 7px;
131
+ left: -5px;
132
+ top: 0;
133
+ height: 100%;
134
+ }
135
+ .ui-resizable-se {
136
+ cursor: se-resize;
137
+ width: 12px;
138
+ height: 12px;
139
+ right: 1px;
140
+ bottom: 1px;
141
+ }
142
+ .ui-resizable-sw {
143
+ cursor: sw-resize;
144
+ width: 9px;
145
+ height: 9px;
146
+ left: -5px;
147
+ bottom: -5px;
148
+ }
149
+ .ui-resizable-nw {
150
+ cursor: nw-resize;
151
+ width: 9px;
152
+ height: 9px;
153
+ left: -5px;
154
+ top: -5px;
155
+ }
156
+ .ui-resizable-ne {
157
+ cursor: ne-resize;
158
+ width: 9px;
159
+ height: 9px;
160
+ right: -5px;
161
+ top: -5px;
162
+ }
163
+ .ui-selectable {
164
+ -ms-touch-action: none;
165
+ touch-action: none;
166
+ }
167
+ .ui-selectable-helper {
168
+ position: absolute;
169
+ z-index: 100;
170
+ border: 1px dotted black;
171
+ }
172
+ .ui-sortable-handle {
173
+ -ms-touch-action: none;
174
+ touch-action: none;
175
+ }
176
+ .ui-accordion .ui-accordion-header {
177
+ display: block;
178
+ cursor: pointer;
179
+ position: relative;
180
+ margin: 2px 0 0 0;
181
+ padding: .5em .5em .5em .7em;
182
+ min-height: 0; /* support: IE7 */
183
+ font-size: 100%;
184
+ }
185
+ .ui-accordion .ui-accordion-icons {
186
+ padding-left: 2.2em;
187
+ }
188
+ .ui-accordion .ui-accordion-icons .ui-accordion-icons {
189
+ padding-left: 2.2em;
190
+ }
191
+ .ui-accordion .ui-accordion-header .ui-accordion-header-icon {
192
+ position: absolute;
193
+ left: .5em;
194
+ top: 50%;
195
+ margin-top: -8px;
196
+ }
197
+ .ui-accordion .ui-accordion-content {
198
+ padding: 1em 2.2em;
199
+ border-top: 0;
200
+ overflow: auto;
201
+ }
202
+ .ui-autocomplete {
203
+ position: absolute;
204
+ top: 0;
205
+ left: 0;
206
+ cursor: default;
207
+ }
208
+ .ui-button {
209
+ display: inline-block;
210
+ position: relative;
211
+ padding: 0;
212
+ line-height: normal;
213
+ margin-right: .1em;
214
+ cursor: pointer;
215
+ vertical-align: middle;
216
+ text-align: center;
217
+ overflow: visible; /* removes extra width in IE */
218
+ }
219
+ .ui-button,
220
+ .ui-button:link,
221
+ .ui-button:visited,
222
+ .ui-button:hover,
223
+ .ui-button:active {
224
+ text-decoration: none;
225
+ }
226
+ /* to make room for the icon, a width needs to be set here */
227
+ .ui-button-icon-only {
228
+ width: 2.2em;
229
+ }
230
+ /* button elements seem to need a little more width */
231
+ button.ui-button-icon-only {
232
+ width: 2.4em;
233
+ }
234
+ .ui-button-icons-only {
235
+ width: 3.4em;
236
+ }
237
+ button.ui-button-icons-only {
238
+ width: 3.7em;
239
+ }
240
+
241
+ /* button text element */
242
+ .ui-button .ui-button-text {
243
+ display: block;
244
+ line-height: normal;
245
+ }
246
+ .ui-button-text-only .ui-button-text {
247
+ padding: .4em 1em;
248
+ }
249
+ .ui-button-icon-only .ui-button-text,
250
+ .ui-button-icons-only .ui-button-text {
251
+ padding: .4em;
252
+ text-indent: -9999999px;
253
+ }
254
+ .ui-button-text-icon-primary .ui-button-text,
255
+ .ui-button-text-icons .ui-button-text {
256
+ padding: .4em 1em .4em 2.1em;
257
+ }
258
+ .ui-button-text-icon-secondary .ui-button-text,
259
+ .ui-button-text-icons .ui-button-text {
260
+ padding: .4em 2.1em .4em 1em;
261
+ }
262
+ .ui-button-text-icons .ui-button-text {
263
+ padding-left: 2.1em;
264
+ padding-right: 2.1em;
265
+ }
266
+ /* no icon support for input elements, provide padding by default */
267
+ input.ui-button {
268
+ padding: .4em 1em;
269
+ }
270
+
271
+ /* button icon element(s) */
272
+ .ui-button-icon-only .ui-icon,
273
+ .ui-button-text-icon-primary .ui-icon,
274
+ .ui-button-text-icon-secondary .ui-icon,
275
+ .ui-button-text-icons .ui-icon,
276
+ .ui-button-icons-only .ui-icon {
277
+ position: absolute;
278
+ top: 50%;
279
+ margin-top: -8px;
280
+ }
281
+ .ui-button-icon-only .ui-icon {
282
+ left: 50%;
283
+ margin-left: -8px;
284
+ }
285
+ .ui-button-text-icon-primary .ui-button-icon-primary,
286
+ .ui-button-text-icons .ui-button-icon-primary,
287
+ .ui-button-icons-only .ui-button-icon-primary {
288
+ left: .5em;
289
+ }
290
+ .ui-button-text-icon-secondary .ui-button-icon-secondary,
291
+ .ui-button-text-icons .ui-button-icon-secondary,
292
+ .ui-button-icons-only .ui-button-icon-secondary {
293
+ right: .5em;
294
+ }
295
+
296
+ /* button sets */
297
+ .ui-buttonset {
298
+ margin-right: 7px;
299
+ }
300
+ .ui-buttonset .ui-button {
301
+ margin-left: 0;
302
+ margin-right: -.3em;
303
+ }
304
+
305
+ /* workarounds */
306
+ /* reset extra padding in Firefox, see h5bp.com/l */
307
+ input.ui-button::-moz-focus-inner,
308
+ button.ui-button::-moz-focus-inner {
309
+ border: 0;
310
+ padding: 0;
311
+ }
312
+ .ui-datepicker {
313
+ width: 17em;
314
+ padding: .2em .2em 0;
315
+ display: none;
316
+ }
317
+ .ui-datepicker .ui-datepicker-header {
318
+ position: relative;
319
+ padding: .2em 0;
320
+ }
321
+ .ui-datepicker .ui-datepicker-prev,
322
+ .ui-datepicker .ui-datepicker-next {
323
+ position: absolute;
324
+ top: 2px;
325
+ width: 1.8em;
326
+ height: 1.8em;
327
+ }
328
+ .ui-datepicker .ui-datepicker-prev-hover,
329
+ .ui-datepicker .ui-datepicker-next-hover {
330
+ top: 1px;
331
+ }
332
+ .ui-datepicker .ui-datepicker-prev {
333
+ left: 2px;
334
+ }
335
+ .ui-datepicker .ui-datepicker-next {
336
+ right: 2px;
337
+ }
338
+ .ui-datepicker .ui-datepicker-prev-hover {
339
+ left: 1px;
340
+ }
341
+ .ui-datepicker .ui-datepicker-next-hover {
342
+ right: 1px;
343
+ }
344
+ .ui-datepicker .ui-datepicker-prev span,
345
+ .ui-datepicker .ui-datepicker-next span {
346
+ display: block;
347
+ position: absolute;
348
+ left: 50%;
349
+ margin-left: -8px;
350
+ top: 50%;
351
+ margin-top: -8px;
352
+ }
353
+ .ui-datepicker .ui-datepicker-title {
354
+ margin: 0 2.3em;
355
+ line-height: 1.8em;
356
+ text-align: center;
357
+ }
358
+ .ui-datepicker .ui-datepicker-title select {
359
+ font-size: 1em;
360
+ margin: 1px 0;
361
+ }
362
+ .ui-datepicker select.ui-datepicker-month,
363
+ .ui-datepicker select.ui-datepicker-year {
364
+ width: 45%;
365
+ }
366
+ .ui-datepicker table {
367
+ width: 100%;
368
+ font-size: .9em;
369
+ border-collapse: collapse;
370
+ margin: 0 0 .4em;
371
+ }
372
+ .ui-datepicker th {
373
+ padding: .7em .3em;
374
+ text-align: center;
375
+ font-weight: bold;
376
+ border: 0;
377
+ }
378
+ .ui-datepicker td {
379
+ border: 0;
380
+ padding: 1px;
381
+ }
382
+ .ui-datepicker td span,
383
+ .ui-datepicker td a {
384
+ display: block;
385
+ padding: .2em;
386
+ text-align: right;
387
+ text-decoration: none;
388
+ }
389
+ .ui-datepicker .ui-datepicker-buttonpane {
390
+ background-image: none;
391
+ margin: .7em 0 0 0;
392
+ padding: 0 .2em;
393
+ border-left: 0;
394
+ border-right: 0;
395
+ border-bottom: 0;
396
+ }
397
+ .ui-datepicker .ui-datepicker-buttonpane button {
398
+ float: right;
399
+ margin: .5em .2em .4em;
400
+ cursor: pointer;
401
+ padding: .2em .6em .3em .6em;
402
+ width: auto;
403
+ overflow: visible;
404
+ }
405
+ .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
406
+ float: left;
407
+ }
408
+
409
+ /* with multiple calendars */
410
+ .ui-datepicker.ui-datepicker-multi {
411
+ width: auto;
412
+ }
413
+ .ui-datepicker-multi .ui-datepicker-group {
414
+ float: left;
415
+ }
416
+ .ui-datepicker-multi .ui-datepicker-group table {
417
+ width: 95%;
418
+ margin: 0 auto .4em;
419
+ }
420
+ .ui-datepicker-multi-2 .ui-datepicker-group {
421
+ width: 50%;
422
+ }
423
+ .ui-datepicker-multi-3 .ui-datepicker-group {
424
+ width: 33.3%;
425
+ }
426
+ .ui-datepicker-multi-4 .ui-datepicker-group {
427
+ width: 25%;
428
+ }
429
+ .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
430
+ .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
431
+ border-left-width: 0;
432
+ }
433
+ .ui-datepicker-multi .ui-datepicker-buttonpane {
434
+ clear: left;
435
+ }
436
+ .ui-datepicker-row-break {
437
+ clear: both;
438
+ width: 100%;
439
+ font-size: 0;
440
+ }
441
+
442
+ /* RTL support */
443
+ .ui-datepicker-rtl {
444
+ direction: rtl;
445
+ }
446
+ .ui-datepicker-rtl .ui-datepicker-prev {
447
+ right: 2px;
448
+ left: auto;
449
+ }
450
+ .ui-datepicker-rtl .ui-datepicker-next {
451
+ left: 2px;
452
+ right: auto;
453
+ }
454
+ .ui-datepicker-rtl .ui-datepicker-prev:hover {
455
+ right: 1px;
456
+ left: auto;
457
+ }
458
+ .ui-datepicker-rtl .ui-datepicker-next:hover {
459
+ left: 1px;
460
+ right: auto;
461
+ }
462
+ .ui-datepicker-rtl .ui-datepicker-buttonpane {
463
+ clear: right;
464
+ }
465
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button {
466
+ float: left;
467
+ }
468
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
469
+ .ui-datepicker-rtl .ui-datepicker-group {
470
+ float: right;
471
+ }
472
+ .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
473
+ .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
474
+ border-right-width: 0;
475
+ border-left-width: 1px;
476
+ }
477
+ .ui-dialog {
478
+ overflow: hidden;
479
+ position: absolute;
480
+ top: 0;
481
+ left: 0;
482
+ padding: .2em;
483
+ outline: 0;
484
+ }
485
+ .ui-dialog .ui-dialog-titlebar {
486
+ padding: .4em 1em;
487
+ position: relative;
488
+ }
489
+ .ui-dialog .ui-dialog-title {
490
+ float: left;
491
+ margin: .1em 0;
492
+ white-space: nowrap;
493
+ width: 90%;
494
+ overflow: hidden;
495
+ text-overflow: ellipsis;
496
+ }
497
+ .ui-dialog .ui-dialog-titlebar-close {
498
+ position: absolute;
499
+ right: .3em;
500
+ top: 50%;
501
+ width: 20px;
502
+ margin: -10px 0 0 0;
503
+ padding: 1px;
504
+ height: 20px;
505
+ }
506
+ .ui-dialog .ui-dialog-content {
507
+ position: relative;
508
+ border: 0;
509
+ padding: .5em 1em;
510
+ background: none;
511
+ overflow: auto;
512
+ }
513
+ .ui-dialog .ui-dialog-buttonpane {
514
+ text-align: left;
515
+ border-width: 1px 0 0 0;
516
+ background-image: none;
517
+ margin-top: .5em;
518
+ padding: .3em 1em .5em .4em;
519
+ }
520
+ .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
521
+ float: right;
522
+ }
523
+ .ui-dialog .ui-dialog-buttonpane button {
524
+ margin: .5em .4em .5em 0;
525
+ cursor: pointer;
526
+ }
527
+ .ui-dialog .ui-resizable-se {
528
+ width: 12px;
529
+ height: 12px;
530
+ right: -5px;
531
+ bottom: -5px;
532
+ background-position: 16px 16px;
533
+ }
534
+ .ui-draggable .ui-dialog-titlebar {
535
+ cursor: move;
536
+ }
537
+ .ui-menu {
538
+ list-style: none;
539
+ padding: 0;
540
+ margin: 0;
541
+ display: block;
542
+ outline: none;
543
+ }
544
+ .ui-menu .ui-menu {
545
+ position: absolute;
546
+ }
547
+ .ui-menu .ui-menu-item {
548
+ position: relative;
549
+ margin: 0;
550
+ padding: 3px 1em 3px .4em;
551
+ cursor: pointer;
552
+ min-height: 0; /* support: IE7 */
553
+ /* support: IE10, see #8844 */
554
+ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
555
+ }
556
+ .ui-menu .ui-menu-divider {
557
+ margin: 5px 0;
558
+ height: 0;
559
+ font-size: 0;
560
+ line-height: 0;
561
+ border-width: 1px 0 0 0;
562
+ }
563
+ .ui-menu .ui-state-focus,
564
+ .ui-menu .ui-state-active {
565
+ margin: -1px;
566
+ }
567
+
568
+ /* icon support */
569
+ .ui-menu-icons {
570
+ position: relative;
571
+ }
572
+ .ui-menu-icons .ui-menu-item {
573
+ padding-left: 2em;
574
+ }
575
+
576
+ /* left-aligned */
577
+ .ui-menu .ui-icon {
578
+ position: absolute;
579
+ top: 0;
580
+ bottom: 0;
581
+ left: .2em;
582
+ margin: auto 0;
583
+ }
584
+
585
+ /* right-aligned */
586
+ .ui-menu .ui-menu-icon {
587
+ left: auto;
588
+ right: 0;
589
+ }
590
+ .ui-progressbar {
591
+ height: 2em;
592
+ text-align: left;
593
+ overflow: hidden;
594
+ }
595
+ .ui-progressbar .ui-progressbar-value {
596
+ margin: -1px;
597
+ height: 100%;
598
+ }
599
+ .ui-progressbar .ui-progressbar-overlay {
600
+ background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
601
+ height: 100%;
602
+ filter: alpha(opacity=25); /* support: IE8 */
603
+ opacity: 0.25;
604
+ }
605
+ .ui-progressbar-indeterminate .ui-progressbar-value {
606
+ background-image: none;
607
+ }
608
+ .ui-selectmenu-menu {
609
+ padding: 0;
610
+ margin: 0;
611
+ position: absolute;
612
+ top: 0;
613
+ left: 0;
614
+ display: none;
615
+ }
616
+ .ui-selectmenu-menu .ui-menu {
617
+ overflow: auto;
618
+ /* Support: IE7 */
619
+ overflow-x: hidden;
620
+ padding-bottom: 1px;
621
+ }
622
+ .ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
623
+ font-size: 1em;
624
+ font-weight: bold;
625
+ line-height: 1.5;
626
+ padding: 2px 0.4em;
627
+ margin: 0.5em 0 0 0;
628
+ height: auto;
629
+ border: 0;
630
+ }
631
+ .ui-selectmenu-open {
632
+ display: block;
633
+ }
634
+ .ui-selectmenu-button {
635
+ display: inline-block;
636
+ overflow: hidden;
637
+ position: relative;
638
+ text-decoration: none;
639
+ cursor: pointer;
640
+ }
641
+ .ui-selectmenu-button span.ui-icon {
642
+ right: 0.5em;
643
+ left: auto;
644
+ margin-top: -8px;
645
+ position: absolute;
646
+ top: 50%;
647
+ }
648
+ .ui-selectmenu-button span.ui-selectmenu-text {
649
+ text-align: left;
650
+ padding: 0.4em 2.1em 0.4em 1em;
651
+ display: block;
652
+ line-height: 1.4;
653
+ overflow: hidden;
654
+ text-overflow: ellipsis;
655
+ white-space: nowrap;
656
+ }
657
+ .ui-slider {
658
+ position: relative;
659
+ text-align: left;
660
+ }
661
+ .ui-slider .ui-slider-handle {
662
+ position: absolute;
663
+ z-index: 2;
664
+ width: 1.2em;
665
+ height: 1.2em;
666
+ cursor: default;
667
+ -ms-touch-action: none;
668
+ touch-action: none;
669
+ }
670
+ .ui-slider .ui-slider-range {
671
+ position: absolute;
672
+ z-index: 1;
673
+ font-size: .7em;
674
+ display: block;
675
+ border: 0;
676
+ background-position: 0 0;
677
+ }
678
+
679
+ /* support: IE8 - See #6727 */
680
+ .ui-slider.ui-state-disabled .ui-slider-handle,
681
+ .ui-slider.ui-state-disabled .ui-slider-range {
682
+ filter: inherit;
683
+ }
684
+
685
+ .ui-slider-horizontal {
686
+ height: .8em;
687
+ }
688
+ .ui-slider-horizontal .ui-slider-handle {
689
+ top: -.3em;
690
+ margin-left: -.6em;
691
+ }
692
+ .ui-slider-horizontal .ui-slider-range {
693
+ top: 0;
694
+ height: 100%;
695
+ }
696
+ .ui-slider-horizontal .ui-slider-range-min {
697
+ left: 0;
698
+ }
699
+ .ui-slider-horizontal .ui-slider-range-max {
700
+ right: 0;
701
+ }
702
+
703
+ .ui-slider-vertical {
704
+ width: .8em;
705
+ height: 100px;
706
+ }
707
+ .ui-slider-vertical .ui-slider-handle {
708
+ left: -.3em;
709
+ margin-left: 0;
710
+ margin-bottom: -.6em;
711
+ }
712
+ .ui-slider-vertical .ui-slider-range {
713
+ left: 0;
714
+ width: 100%;
715
+ }
716
+ .ui-slider-vertical .ui-slider-range-min {
717
+ bottom: 0;
718
+ }
719
+ .ui-slider-vertical .ui-slider-range-max {
720
+ top: 0;
721
+ }
722
+ .ui-spinner {
723
+ position: relative;
724
+ display: inline-block;
725
+ overflow: hidden;
726
+ padding: 0;
727
+ vertical-align: middle;
728
+ }
729
+ .ui-spinner-input {
730
+ border: none;
731
+ background: none;
732
+ color: inherit;
733
+ padding: 0;
734
+ margin: .2em 0;
735
+ vertical-align: middle;
736
+ margin-left: .4em;
737
+ margin-right: 22px;
738
+ }
739
+ .ui-spinner-button {
740
+ width: 16px;
741
+ height: 50%;
742
+ font-size: .5em;
743
+ padding: 0;
744
+ margin: 0;
745
+ text-align: center;
746
+ position: absolute;
747
+ cursor: default;
748
+ display: block;
749
+ overflow: hidden;
750
+ right: 0;
751
+ }
752
+ /* more specificity required here to override default borders */
753
+ .ui-spinner a.ui-spinner-button {
754
+ border-top: none;
755
+ border-bottom: none;
756
+ border-right: none;
757
+ }
758
+ /* vertically center icon */
759
+ .ui-spinner .ui-icon {
760
+ position: absolute;
761
+ margin-top: -8px;
762
+ top: 50%;
763
+ left: 0;
764
+ }
765
+ .ui-spinner-up {
766
+ top: 0;
767
+ }
768
+ .ui-spinner-down {
769
+ bottom: 0;
770
+ }
771
+
772
+ /* TR overrides */
773
+ .ui-spinner .ui-icon-triangle-1-s {
774
+ /* need to fix icons sprite */
775
+ background-position: -65px -16px;
776
+ }
777
+ .ui-tabs {
778
+ position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
779
+ padding: .2em;
780
+ }
781
+ .ui-tabs .ui-tabs-nav {
782
+ margin: 0;
783
+ padding: .2em .2em 0;
784
+ }
785
+ .ui-tabs .ui-tabs-nav li {
786
+ list-style: none;
787
+ float: left;
788
+ position: relative;
789
+ top: 0;
790
+ margin: 1px .2em 0 0;
791
+ border-bottom-width: 0;
792
+ padding: 0;
793
+ white-space: nowrap;
794
+ }
795
+ .ui-tabs .ui-tabs-nav .ui-tabs-anchor {
796
+ float: left;
797
+ padding: .5em 1em;
798
+ text-decoration: none;
799
+ }
800
+ .ui-tabs .ui-tabs-nav li.ui-tabs-active {
801
+ margin-bottom: -1px;
802
+ padding-bottom: 1px;
803
+ }
804
+ .ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
805
+ .ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
806
+ .ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
807
+ cursor: text;
808
+ }
809
+ .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
810
+ cursor: pointer;
811
+ }
812
+ .ui-tabs .ui-tabs-panel {
813
+ display: block;
814
+ border-width: 0;
815
+ padding: 1em 1.4em;
816
+ background: none;
817
+ }
818
+ .ui-tooltip {
819
+ padding: 8px;
820
+ position: absolute;
821
+ z-index: 9999;
822
+ max-width: 300px;
823
+ -webkit-box-shadow: 0 0 5px #aaa;
824
+ box-shadow: 0 0 5px #aaa;
825
+ }
826
+ body .ui-tooltip {
827
+ border-width: 2px;
828
+ }
829
+
830
+ /* Component containers
831
+ ----------------------------------*/
832
+ .ui-widget {
833
+ font-family: inherit;
834
+ font-size: 1em;
835
+ }
836
+ .ui-widget .ui-widget {
837
+ font-size: 1em;
838
+ }
839
+ .ui-widget input,
840
+ .ui-widget select,
841
+ .ui-widget textarea,
842
+ .ui-widget button {
843
+ font-family: inherit;
844
+ font-size: 1em;
845
+ }
846
+ .ui-widget-content {
847
+ border: 1px solid #aaaaaa;
848
+ background: #ffffff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x;
849
+ color: #222222;
850
+ }
851
+ .ui-widget-content a {
852
+ color: #222222;
853
+ }
854
+ .ui-widget-header {
855
+ border: 1px solid #aaaaaa;
856
+ background: #cccccc url("images/ui-bg_flat_75_cccccc_40x100.png") 50% 50% repeat-x;
857
+ color: #222222;
858
+ font-weight: bold;
859
+ }
860
+ .ui-widget-header a {
861
+ color: #222222;
862
+ }
863
+
864
+ /* Interaction states
865
+ ----------------------------------*/
866
+ .ui-state-default,
867
+ .ui-widget-content .ui-state-default,
868
+ .ui-widget-header .ui-state-default {
869
+ border: 1px solid #ccc;
870
+ background: #f7f7f7 url("images/ui-bg_flat_100_f7f7f7_40x100.png") 50% 50% repeat-x;
871
+ font-weight: normal;
872
+ color: #555555;
873
+ }
874
+ .ui-state-default a,
875
+ .ui-state-default a:link,
876
+ .ui-state-default a:visited {
877
+ color: #555555;
878
+ text-decoration: none;
879
+ }
880
+ .ui-state-hover,
881
+ .ui-widget-content .ui-state-hover,
882
+ .ui-widget-header .ui-state-hover,
883
+ .ui-state-focus,
884
+ .ui-widget-content .ui-state-focus,
885
+ .ui-widget-header .ui-state-focus {
886
+ border: 1px solid #999;
887
+ background: #fafafa url("images/ui-bg_flat_100_fafafa_40x100.png") 50% 50% repeat-x;
888
+ font-weight: normal;
889
+ color: #23282d;
890
+ }
891
+ .ui-state-hover a,
892
+ .ui-state-hover a:hover,
893
+ .ui-state-hover a:link,
894
+ .ui-state-hover a:visited,
895
+ .ui-state-focus a,
896
+ .ui-state-focus a:hover,
897
+ .ui-state-focus a:link,
898
+ .ui-state-focus a:visited {
899
+ color: #23282d;
900
+ text-decoration: none;
901
+ }
902
+ .ui-state-active,
903
+ .ui-widget-content .ui-state-active,
904
+ .ui-widget-header .ui-state-active {
905
+ border: 1px solid #999;
906
+ background: #d5d5d5 url("images/ui-bg_flat_100_d5d5d5_40x100.png") 50% 50% repeat-x;
907
+ font-weight: normal;
908
+ color: #32373c;
909
+ }
910
+ .ui-state-active a,
911
+ .ui-state-active a:link,
912
+ .ui-state-active a:visited {
913
+ color: #32373c;
914
+ text-decoration: none;
915
+ }
916
+
917
+ /* Interaction Cues
918
+ ----------------------------------*/
919
+ .ui-state-highlight,
920
+ .ui-widget-content .ui-state-highlight,
921
+ .ui-widget-header .ui-state-highlight {
922
+ border: 1px solid #00a0d2;
923
+ background: #eee url("images/ui-bg_flat_100_eee_40x100.png") 50% 50% repeat-x;
924
+ color: #00a0d2;
925
+ }
926
+ .ui-state-highlight a,
927
+ .ui-widget-content .ui-state-highlight a,
928
+ .ui-widget-header .ui-state-highlight a {
929
+ color: #00a0d2;
930
+ }
931
+ .ui-state-error,
932
+ .ui-widget-content .ui-state-error,
933
+ .ui-widget-header .ui-state-error {
934
+ border: 1px solid #cd0a0a;
935
+ background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;
936
+ color: #cd0a0a;
937
+ }
938
+ .ui-state-error a,
939
+ .ui-widget-content .ui-state-error a,
940
+ .ui-widget-header .ui-state-error a {
941
+ color: #cd0a0a;
942
+ }
943
+ .ui-state-error-text,
944
+ .ui-widget-content .ui-state-error-text,
945
+ .ui-widget-header .ui-state-error-text {
946
+ color: #cd0a0a;
947
+ }
948
+ .ui-priority-primary,
949
+ .ui-widget-content .ui-priority-primary,
950
+ .ui-widget-header .ui-priority-primary {
951
+ font-weight: bold;
952
+ }
953
+ .ui-priority-secondary,
954
+ .ui-widget-content .ui-priority-secondary,
955
+ .ui-widget-header .ui-priority-secondary {
956
+ opacity: .7;
957
+ filter:Alpha(Opacity=70); /* support: IE8 */
958
+ font-weight: normal;
959
+ }
960
+ .ui-state-disabled,
961
+ .ui-widget-content .ui-state-disabled,
962
+ .ui-widget-header .ui-state-disabled {
963
+ opacity: .35;
964
+ filter:Alpha(Opacity=35); /* support: IE8 */
965
+ background-image: none;
966
+ }
967
+ .ui-state-disabled .ui-icon {
968
+ filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
969
+ }
970
+
971
+ /* Icons
972
+ ----------------------------------*/
973
+
974
+ /* states and images */
975
+ .ui-icon {
976
+ width: 16px;
977
+ height: 16px;
978
+ }
979
+ .ui-icon,
980
+ .ui-widget-content .ui-icon {
981
+ background-image: url("images/ui-icons_222222_256x240.png");
982
+ }
983
+ .ui-widget-header .ui-icon {
984
+ background-image: url("images/ui-icons_222222_256x240.png");
985
+ }
986
+ .ui-state-default .ui-icon {
987
+ background-image: url("images/ui-icons_555_256x240.png");
988
+ }
989
+ .ui-state-hover .ui-icon,
990
+ .ui-state-focus .ui-icon {
991
+ background-image: url("images/ui-icons_23282d_256x240.png");
992
+ }
993
+ .ui-state-active .ui-icon {
994
+ background-image: url("images/ui-icons_32373c_256x240.png");
995
+ }
996
+ .ui-state-highlight .ui-icon {
997
+ background-image: url("images/ui-icons_fff_256x240.png");
998
+ }
999
+ .ui-state-error .ui-icon,
1000
+ .ui-state-error-text .ui-icon {
1001
+ background-image: url("images/ui-icons_cd0a0a_256x240.png");
1002
+ }
1003
+
1004
+ /* positioning */
1005
+ .ui-icon-blank { background-position: 16px 16px; }
1006
+ .ui-icon-carat-1-n { background-position: 0 0; }
1007
+ .ui-icon-carat-1-ne { background-position: -16px 0; }
1008
+ .ui-icon-carat-1-e { background-position: -32px 0; }
1009
+ .ui-icon-carat-1-se { background-position: -48px 0; }
1010
+ .ui-icon-carat-1-s { background-position: -64px 0; }
1011
+ .ui-icon-carat-1-sw { background-position: -80px 0; }
1012
+ .ui-icon-carat-1-w { background-position: -96px 0; }
1013
+ .ui-icon-carat-1-nw { background-position: -112px 0; }
1014
+ .ui-icon-carat-2-n-s { background-position: -128px 0; }
1015
+ .ui-icon-carat-2-e-w { background-position: -144px 0; }
1016
+ .ui-icon-triangle-1-n { background-position: 0 -16px; }
1017
+ .ui-icon-triangle-1-ne { background-position: -16px -16px; }
1018
+ .ui-icon-triangle-1-e { background-position: -32px -16px; }
1019
+ .ui-icon-triangle-1-se { background-position: -48px -16px; }
1020
+ .ui-icon-triangle-1-s { background-position: -64px -16px; }
1021
+ .ui-icon-triangle-1-sw { background-position: -80px -16px; }
1022
+ .ui-icon-triangle-1-w { background-position: -96px -16px; }
1023
+ .ui-icon-triangle-1-nw { background-position: -112px -16px; }
1024
+ .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
1025
+ .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
1026
+ .ui-icon-arrow-1-n { background-position: 0 -32px; }
1027
+ .ui-icon-arrow-1-ne { background-position: -16px -32px; }
1028
+ .ui-icon-arrow-1-e { background-position: -32px -32px; }
1029
+ .ui-icon-arrow-1-se { background-position: -48px -32px; }
1030
+ .ui-icon-arrow-1-s { background-position: -64px -32px; }
1031
+ .ui-icon-arrow-1-sw { background-position: -80px -32px; }
1032
+ .ui-icon-arrow-1-w { background-position: -96px -32px; }
1033
+ .ui-icon-arrow-1-nw { background-position: -112px -32px; }
1034
+ .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
1035
+ .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
1036
+ .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
1037
+ .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
1038
+ .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
1039
+ .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
1040
+ .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
1041
+ .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
1042
+ .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
1043
+ .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
1044
+ .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
1045
+ .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
1046
+ .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
1047
+ .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
1048
+ .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
1049
+ .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
1050
+ .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
1051
+ .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
1052
+ .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
1053
+ .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
1054
+ .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
1055
+ .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
1056
+ .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
1057
+ .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
1058
+ .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
1059
+ .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
1060
+ .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
1061
+ .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
1062
+ .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
1063
+ .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
1064
+ .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
1065
+ .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
1066
+ .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
1067
+ .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
1068
+ .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
1069
+ .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
1070
+ .ui-icon-arrow-4 { background-position: 0 -80px; }
1071
+ .ui-icon-arrow-4-diag { background-position: -16px -80px; }
1072
+ .ui-icon-extlink { background-position: -32px -80px; }
1073
+ .ui-icon-newwin { background-position: -48px -80px; }
1074
+ .ui-icon-refresh { background-position: -64px -80px; }
1075
+ .ui-icon-shuffle { background-position: -80px -80px; }
1076
+ .ui-icon-transfer-e-w { background-position: -96px -80px; }
1077
+ .ui-icon-transferthick-e-w { background-position: -112px -80px; }
1078
+ .ui-icon-folder-collapsed { background-position: 0 -96px; }
1079
+ .ui-icon-folder-open { background-position: -16px -96px; }
1080
+ .ui-icon-document { background-position: -32px -96px; }
1081
+ .ui-icon-document-b { background-position: -48px -96px; }
1082
+ .ui-icon-note { background-position: -64px -96px; }
1083
+ .ui-icon-mail-closed { background-position: -80px -96px; }
1084
+ .ui-icon-mail-open { background-position: -96px -96px; }
1085
+ .ui-icon-suitcase { background-position: -112px -96px; }
1086
+ .ui-icon-comment { background-position: -128px -96px; }
1087
+ .ui-icon-person { background-position: -144px -96px; }
1088
+ .ui-icon-print { background-position: -160px -96px; }
1089
+ .ui-icon-trash { background-position: -176px -96px; }
1090
+ .ui-icon-locked { background-position: -192px -96px; }
1091
+ .ui-icon-unlocked { background-position: -208px -96px; }
1092
+ .ui-icon-bookmark { background-position: -224px -96px; }
1093
+ .ui-icon-tag { background-position: -240px -96px; }
1094
+ .ui-icon-home { background-position: 0 -112px; }
1095
+ .ui-icon-flag { background-position: -16px -112px; }
1096
+ .ui-icon-calendar { background-position: -32px -112px; }
1097
+ .ui-icon-cart { background-position: -48px -112px; }
1098
+ .ui-icon-pencil { background-position: -64px -112px; }
1099
+ .ui-icon-clock { background-position: -80px -112px; }
1100
+ .ui-icon-disk { background-position: -96px -112px; }
1101
+ .ui-icon-calculator { background-position: -112px -112px; }
1102
+ .ui-icon-zoomin { background-position: -128px -112px; }
1103
+ .ui-icon-zoomout { background-position: -144px -112px; }
1104
+ .ui-icon-search { background-position: -160px -112px; }
1105
+ .ui-icon-wrench { background-position: -176px -112px; }
1106
+ .ui-icon-gear { background-position: -192px -112px; }
1107
+ .ui-icon-heart { background-position: -208px -112px; }
1108
+ .ui-icon-star { background-position: -224px -112px; }
1109
+ .ui-icon-link { background-position: -240px -112px; }
1110
+ .ui-icon-cancel { background-position: 0 -128px; }
1111
+ .ui-icon-plus { background-position: -16px -128px; }
1112
+ .ui-icon-plusthick { background-position: -32px -128px; }
1113
+ .ui-icon-minus { background-position: -48px -128px; }
1114
+ .ui-icon-minusthick { background-position: -64px -128px; }
1115
+ .ui-icon-close { background-position: -80px -128px; }
1116
+ .ui-icon-closethick { background-position: -96px -128px; }
1117
+ .ui-icon-key { background-position: -112px -128px; }
1118
+ .ui-icon-lightbulb { background-position: -128px -128px; }
1119
+ .ui-icon-scissors { background-position: -144px -128px; }
1120
+ .ui-icon-clipboard { background-position: -160px -128px; }
1121
+ .ui-icon-copy { background-position: -176px -128px; }
1122
+ .ui-icon-contact { background-position: -192px -128px; }
1123
+ .ui-icon-image { background-position: -208px -128px; }
1124
+ .ui-icon-video { background-position: -224px -128px; }
1125
+ .ui-icon-script { background-position: -240px -128px; }
1126
+ .ui-icon-alert { background-position: 0 -144px; }
1127
+ .ui-icon-info { background-position: -16px -144px; }
1128
+ .ui-icon-notice { background-position: -32px -144px; }
1129
+ .ui-icon-help { background-position: -48px -144px; }
1130
+ .ui-icon-check { background-position: -64px -144px; }
1131
+ .ui-icon-bullet { background-position: -80px -144px; }
1132
+ .ui-icon-radio-on { background-position: -96px -144px; }
1133
+ .ui-icon-radio-off { background-position: -112px -144px; }
1134
+ .ui-icon-pin-w { background-position: -128px -144px; }
1135
+ .ui-icon-pin-s { background-position: -144px -144px; }
1136
+ .ui-icon-play { background-position: 0 -160px; }
1137
+ .ui-icon-pause { background-position: -16px -160px; }
1138
+ .ui-icon-seek-next { background-position: -32px -160px; }
1139
+ .ui-icon-seek-prev { background-position: -48px -160px; }
1140
+ .ui-icon-seek-end { background-position: -64px -160px; }
1141
+ .ui-icon-seek-start { background-position: -80px -160px; }
1142
+ /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
1143
+ .ui-icon-seek-first { background-position: -80px -160px; }
1144
+ .ui-icon-stop { background-position: -96px -160px; }
1145
+ .ui-icon-eject { background-position: -112px -160px; }
1146
+ .ui-icon-volume-off { background-position: -128px -160px; }
1147
+ .ui-icon-volume-on { background-position: -144px -160px; }
1148
+ .ui-icon-power { background-position: 0 -176px; }
1149
+ .ui-icon-signal-diag { background-position: -16px -176px; }
1150
+ .ui-icon-signal { background-position: -32px -176px; }
1151
+ .ui-icon-battery-0 { background-position: -48px -176px; }
1152
+ .ui-icon-battery-1 { background-position: -64px -176px; }
1153
+ .ui-icon-battery-2 { background-position: -80px -176px; }
1154
+ .ui-icon-battery-3 { background-position: -96px -176px; }
1155
+ .ui-icon-circle-plus { background-position: 0 -192px; }
1156
+ .ui-icon-circle-minus { background-position: -16px -192px; }
1157
+ .ui-icon-circle-close { background-position: -32px -192px; }
1158
+ .ui-icon-circle-triangle-e { background-position: -48px -192px; }
1159
+ .ui-icon-circle-triangle-s { background-position: -64px -192px; }
1160
+ .ui-icon-circle-triangle-w { background-position: -80px -192px; }
1161
+ .ui-icon-circle-triangle-n { background-position: -96px -192px; }
1162
+ .ui-icon-circle-arrow-e { background-position: -112px -192px; }
1163
+ .ui-icon-circle-arrow-s { background-position: -128px -192px; }
1164
+ .ui-icon-circle-arrow-w { background-position: -144px -192px; }
1165
+ .ui-icon-circle-arrow-n { background-position: -160px -192px; }
1166
+ .ui-icon-circle-zoomin { background-position: -176px -192px; }
1167
+ .ui-icon-circle-zoomout { background-position: -192px -192px; }
1168
+ .ui-icon-circle-check { background-position: -208px -192px; }
1169
+ .ui-icon-circlesmall-plus { background-position: 0 -208px; }
1170
+ .ui-icon-circlesmall-minus { background-position: -16px -208px; }
1171
+ .ui-icon-circlesmall-close { background-position: -32px -208px; }
1172
+ .ui-icon-squaresmall-plus { background-position: -48px -208px; }
1173
+ .ui-icon-squaresmall-minus { background-position: -64px -208px; }
1174
+ .ui-icon-squaresmall-close { background-position: -80px -208px; }
1175
+ .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
1176
+ .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
1177
+ .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
1178
+ .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
1179
+ .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
1180
+ .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
1181
+
1182
+
1183
+ /* Misc visuals
1184
+ ----------------------------------*/
1185
+
1186
+ /* Corner radius */
1187
+ .ui-corner-all,
1188
+ .ui-corner-top,
1189
+ .ui-corner-left,
1190
+ .ui-corner-tl {
1191
+ border-top-left-radius: 0;
1192
+ }
1193
+ .ui-corner-all,
1194
+ .ui-corner-top,
1195
+ .ui-corner-right,
1196
+ .ui-corner-tr {
1197
+ border-top-right-radius: 0;
1198
+ }
1199
+ .ui-corner-all,
1200
+ .ui-corner-bottom,
1201
+ .ui-corner-left,
1202
+ .ui-corner-bl {
1203
+ border-bottom-left-radius: 0;
1204
+ }
1205
+ .ui-corner-all,
1206
+ .ui-corner-bottom,
1207
+ .ui-corner-right,
1208
+ .ui-corner-br {
1209
+ border-bottom-right-radius: 0;
1210
+ }
1211
+
1212
+ /* Overlays */
1213
+ .ui-widget-overlay {
1214
+ background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
1215
+ opacity: .3;
1216
+ filter: Alpha(Opacity=30); /* support: IE8 */
1217
+ }
1218
+ .ui-widget-shadow {
1219
+ margin: -8px 0 0 -8px;
1220
+ padding: 8px;
1221
+ background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
1222
+ opacity: .3;
1223
+ filter: Alpha(Opacity=30); /* support: IE8 */
1224
+ border-radius: 8px;
1225
+ }
vendor/kminh/bwp-framework/assets/option-page/css/jquery-ui/jquery-ui.min.css ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ /*! jQuery UI - v1.11.4 - 2015-10-25
2
+ * http://jqueryui.com
3
+ * Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
4
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=inherit&fwDefault=normal&fsDefault=1em&cornerRadius=0&bgColorHeader=%23cccccc&bgTextureHeader=flat&bgImgOpacityHeader=75&borderColorHeader=%23aaaaaa&fcHeader=%23222222&iconColorHeader=%23222222&bgColorContent=%23ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=%23aaaaaa&fcContent=%23222222&iconColorContent=%23222222&bgColorDefault=%23f7f7f7&bgTextureDefault=flat&bgImgOpacityDefault=100&borderColorDefault=%23ccc&fcDefault=%23555555&iconColorDefault=%23555&bgColorHover=%23fafafa&bgTextureHover=flat&bgImgOpacityHover=100&borderColorHover=%23999&fcHover=%2323282d&iconColorHover=%2323282d&bgColorActive=%23d5d5d5&bgTextureActive=flat&bgImgOpacityActive=100&borderColorActive=%23999&fcActive=%2332373c&iconColorActive=%2332373c&bgColorHighlight=%23eee&bgTextureHighlight=flat&bgImgOpacityHighlight=100&borderColorHighlight=%2300a0d2&fcHighlight=%2300a0d2&iconColorHighlight=%23fff&bgColorError=%23fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=%23cd0a0a&fcError=%23cd0a0a&iconColorError=%23cd0a0a&bgColorOverlay=%23aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=%23aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
5
+ * Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
6
+
7
+ .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:inherit;font-size:1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:inherit;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url("images/ui-bg_flat_75_cccccc_40x100.png") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ccc;background:#f7f7f7 url("images/ui-bg_flat_100_f7f7f7_40x100.png") 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#fafafa url("images/ui-bg_flat_100_fafafa_40x100.png") 50% 50% repeat-x;font-weight:normal;color:#23282d}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#23282d;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #999;background:#d5d5d5 url("images/ui-bg_flat_100_d5d5d5_40x100.png") 50% 50% repeat-x;font-weight:normal;color:#32373c}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#32373c;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #00a0d2;background:#eee url("images/ui-bg_flat_100_eee_40x100.png") 50% 50% repeat-x;color:#00a0d2}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#00a0d2}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_555_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_23282d_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_32373c_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_fff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:0}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:0}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:0}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:0}.ui-widget-overlay{background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}
vendor/kminh/bwp-framework/assets/option-page/css/less/bootstrap.less ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import "../../../../bower_components/bootstrap/less/variables.less";
2
+ @import "../../../../bower_components/bootstrap/less/mixins.less";
3
+
4
+ @import "../../../vendor/bootstrap/less/component-animations.less";
5
+ @import "../../../vendor/bootstrap/less/close.less";
6
+ @import "../../../vendor/bootstrap/less/modals.less";
7
+ @import "../../../vendor/bootstrap/less/tooltip.less";
8
+ @import "../../../vendor/bootstrap/less/popovers.less";
9
+
10
+ @import "../../../../bower_components/bootstrap/less/utilities.less";
11
+
12
+ // override some variables
13
+ @brand-primary: darken(#428bca, 6.5%); // #337ab7
14
+ @brand-success: #5cb85c;
15
+ @brand-info: #5bc0de;
16
+ @brand-warning: #f0ad4e;
17
+ @brand-danger: #d9534f;
18
+
19
+ @font-family-sans-serif: inherit;
20
+ @font-size-base: 13px;
21
+
22
+ // @state-success-text: #3c763d;
23
+ @state-success-text: green;
24
+ @state-success-bg: #dff0d8;
25
+ @state-success-border: darken(spin(@state-success-bg, -10), 5%);
26
+
27
+ @state-info-text: #31708f;
28
+ @state-info-bg: #d9edf7;
29
+ @state-info-border: darken(spin(@state-info-bg, -10), 7%);
30
+
31
+ @state-warning-text: #8a6d3b;
32
+ @state-warning-bg: #fcf8e3;
33
+ @state-warning-border: darken(spin(@state-warning-bg, -10), 5%);
34
+
35
+ @state-danger-text: #dd3d36;
36
+ @state-danger-bg: #f2dede;
37
+ @state-danger-border: darken(spin(@state-danger-bg, -10), 5%);
38
+
39
+ @border-radius-base: 0px;
40
+ @border-radius-large: 0px;
41
+ @border-radius-small: 0px;
42
+
43
+ @modal-backdrop-bg: #f1f1f1;
44
+ @modal-backdrop-opacity: .8;
45
+
46
+ // copied from type.less
47
+ // Alignment
48
+ .text-left { text-align: left; }
49
+ .text-right { text-align: right; }
50
+ .text-center { text-align: center; }
51
+ .text-justify { text-align: justify; }
52
+ .text-nowrap { white-space: nowrap; }
53
+
54
+ // Transformation
55
+ .text-lowercase { text-transform: lowercase; }
56
+ .text-uppercase { text-transform: uppercase; }
57
+ .text-capitalize { text-transform: capitalize; }
58
+
59
+ // Contextual colors
60
+ .text-muted {
61
+ color: @text-muted;
62
+ }
63
+ .text-primary {
64
+ .text-emphasis-variant(@brand-primary);
65
+ }
66
+ .text-success {
67
+ .text-emphasis-variant(@state-success-text);
68
+ }
69
+ .text-info {
70
+ .text-emphasis-variant(@state-info-text);
71
+ }
72
+ .text-warning {
73
+ .text-emphasis-variant(@state-warning-text);
74
+ }
75
+ .text-danger {
76
+ .text-emphasis-variant(@state-danger-text);
77
+ }
78
+
79
+ // Contextual backgrounds
80
+ // For now we'll leave these alongside the text classes until v4 when we can
81
+ // safely shift things around (per SemVer rules).
82
+ .bg-primary {
83
+ // Given the contrast here, this is the only class to have its color inverted
84
+ // automatically.
85
+ color: #fff;
86
+ .bg-variant(@brand-primary);
87
+ }
88
+ .bg-success {
89
+ .bg-variant(@state-success-bg);
90
+ }
91
+ .bg-info {
92
+ .bg-variant(@state-info-bg);
93
+ }
94
+ .bg-warning {
95
+ .bg-variant(@state-warning-bg);
96
+ }
97
+ .bg-danger {
98
+ .bg-variant(@state-danger-bg);
99
+ }
vendor/kminh/bwp-framework/assets/option-page/css/less/bwp-tabs.less ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* For WordPress of older versions */
2
+ .nav-tab{
3
+ border-style:solid;
4
+ border-color:#ccc #ccc #f9f9f9;
5
+ border-width:1px 1px 0;
6
+ color:#c1c1c1;
7
+ text-shadow:rgba(255,255,255,1) 0 1px 0;
8
+ font-size:12px;
9
+ line-height:16px;
10
+ display:inline-block;
11
+ padding:4px 14px 6px;
12
+ text-decoration:none;
13
+ margin:0 3px -1px 0;
14
+ /* -moz-border-radius:5px 5px 0 0; */
15
+ /* -webkit-border-top-left-radius:5px; */
16
+ /* -webkit-border-top-right-radius:5px; */
17
+ /* -khtml-border-top-left-radius:5px; */
18
+ /* -khtml-border-top-right-radius:5px; */
19
+ /* border-top-left-radius:5px; */
20
+ /* border-top-right-radius:5px; */
21
+ }
22
+ .nav-tab-active{
23
+ border-width:1px;
24
+ border-bottom-color: transparent;
25
+ color: #000000;
26
+ }
27
+ h2.nav-tab-wrapper, h3.nav-tab-wrapper{
28
+ border-bottom:1px solid #ccc;
29
+ padding-bottom:0;
30
+ }
31
+ h2 .nav-tab{padding:6px 15px 6px;}
32
+
33
+ .wrap .bwp-option-page-tabs {
34
+ border-bottom: 1px solid #CCCCCC;
35
+ padding-bottom: 0px;
36
+ margin-bottom: 20px;
37
+ }
38
+
39
+ .bwp-option-page-tabs {
40
+ a {
41
+ font-size: 18px;
42
+ line-height: 24px;
43
+ font-style: italic;
44
+
45
+ &.version {
46
+ font-size: 14px;
47
+ line-height: 14px;
48
+ }
49
+ }
50
+ }
vendor/kminh/bwp-framework/assets/option-page/css/less/bwp.less ADDED
@@ -0,0 +1,275 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*--- Common ---*/
2
+ .bwp-option-page {
3
+ margin-top: 1em;
4
+ padding-bottom: 1em;
5
+
6
+ h4 {
7
+ font-size: 1.1em;
8
+ margin: 1em 0;
9
+ }
10
+
11
+ p {
12
+ margin-top: 0px;
13
+ margin-bottom: 0px;
14
+ zoom: 1;
15
+ }
16
+
17
+ .bwp-paragraph {
18
+ margin: 1em 0;
19
+ }
20
+
21
+ li.bwp-clear, div.bwp-clear {
22
+ clear: left;
23
+ margin: 1em 0 0 0;
24
+ zoom: 1;
25
+ }
26
+
27
+ div.bwp-clear {
28
+ margin-bottom: 1.7em;
29
+ }
30
+ }
31
+
32
+ .bwp-no-display {
33
+ display: none;
34
+ }
35
+
36
+ .bwp-hidden {
37
+ visibility: hidden;
38
+ }
39
+
40
+ .bwp-meta {
41
+ color: #999;
42
+ }
43
+
44
+ .bwp-justin {
45
+ display: inline-block;
46
+ position: relative;
47
+ bottom: 0.5em;
48
+ font-size: 0.85em;
49
+ font-weight: 600;
50
+ color: #f26522;
51
+ }
52
+ /*--- End Common ---*/
53
+
54
+ /*--- Main ---*/
55
+ .bwp-wrap {
56
+ clear: both;
57
+ }
58
+
59
+ #bwp-main {
60
+ width: auto;
61
+ overflow: hidden;
62
+
63
+ .updated, .error {
64
+ margin-top: 15px;
65
+ margin-bottom: 0;
66
+
67
+ &.first {
68
+ margin-top: 20px;
69
+ }
70
+ }
71
+ }
72
+ /*--- End Main ---*/
73
+
74
+ /*--- Header ---*/
75
+ #bwp-header {
76
+ margin-bottom: 15px;
77
+ padding-top: 5px;
78
+
79
+ h1 {
80
+ padding: 0;
81
+ margin-top: 0;
82
+ margin-bottom: 15px;
83
+
84
+ color: #32373c;
85
+ font-size: 2em;
86
+ font-weight: 400;
87
+ line-height: 1.2em;
88
+ }
89
+ }
90
+
91
+ #bwp-donation {
92
+ display: none;
93
+ }
94
+
95
+ #bwp-get-social {
96
+ max-width: 450px;
97
+ margin-top: 15px;
98
+ margin-bottom: 0;
99
+
100
+ overflow: hidden;
101
+
102
+ .inside {
103
+ padding-bottom: 0;
104
+ }
105
+
106
+ h2 {
107
+ cursor: default;
108
+ font-size: 14px;
109
+ line-height: 1.4;
110
+ margin: 0;
111
+ padding: 8px 12px;
112
+ }
113
+ }
114
+
115
+ #bwp-social-buttons {
116
+ height: 20px;
117
+ padding-top: 3px;
118
+
119
+ .bwp-twitter-buttons, .bwp-gplus-buttons, .bwp-fb-buttons {
120
+ float: left;
121
+ margin-right: 15px;
122
+ }
123
+
124
+ .bwp-fb-buttons {
125
+ // max-width: 100px;
126
+ }
127
+
128
+ .bwp-gplus-buttons {
129
+ max-width: 80px;
130
+ margin-right: 0;
131
+ }
132
+
133
+ .bwp-twitter-buttons {
134
+ // width: 230px;
135
+ }
136
+ }
137
+ /*--- End Header ---*/
138
+
139
+ /*--- Tabs ---*/
140
+ .bwp-option-page-tabs {
141
+ a {
142
+ padding-left: 15px;
143
+ padding-right: 15px;
144
+
145
+ color: #c1c1c1;
146
+ font-size: 18px;
147
+ font-weight: 600;
148
+ }
149
+
150
+ a.nav-tab-active {
151
+ color: #000;
152
+ }
153
+ }
154
+
155
+ .wrap .bwp-option-page-tabs {
156
+ padding-left: 6px;
157
+ }
158
+ /*--- End Tabs ---*/
159
+
160
+ /*--- Button ---*/
161
+ .wp-core-ui .button-inline {
162
+ vertical-align: middle;
163
+ }
164
+
165
+ .bwp-button {
166
+ .dashicons {
167
+ width: auto;
168
+ height: 18px;
169
+ font-size: 14px;
170
+ vertical-align: middle;
171
+ }
172
+ }
173
+
174
+ .bwp-button-paypal {
175
+ .bwp-mixin-button(#003580; #ffe3b7; #ffc975) !important;
176
+
177
+ font-weight: 600;
178
+
179
+ .paypal-pay, .paypal-pal {
180
+ font-weight: bold;
181
+ font-style: italic;
182
+ }
183
+
184
+ .paypal-pay {
185
+ color: #003580;
186
+ }
187
+
188
+ .paypal-pal {
189
+ color: #009DD8;
190
+ }
191
+ }
192
+ /*--- End Button ---*/
193
+
194
+ /*--- Sidebars ---*/
195
+ #bwp-sidebar-right {
196
+ width: 276px;
197
+ margin: 0 0 10px 20px;
198
+ float: right;
199
+
200
+ .postbox {
201
+ .inside {
202
+ max-width: 250px;
203
+
204
+ padding-bottom: 0;
205
+
206
+ line-height: 1;
207
+ }
208
+
209
+ .hndle {
210
+ margin: 0;
211
+ padding: 8px 12px;
212
+
213
+ font-size: 14px;
214
+ line-height: 1.4;
215
+
216
+ cursor: default;
217
+ }
218
+ }
219
+ }
220
+
221
+ #bwp-ads {
222
+ margin-top: 10px;
223
+
224
+ a {
225
+ line-height: 1;
226
+ }
227
+ }
228
+
229
+ #bwp-news {
230
+ a {
231
+ margin-right: 5px;
232
+ }
233
+ }
234
+
235
+ .bwp-button-rss {
236
+ .bwp-mixin-button(#fff; @brand-color-rss) !important;
237
+ }
238
+
239
+ .bwp-button-twitter {
240
+ .bwp-mixin-button(#fff; @brand-color-twitter) !important;
241
+ }
242
+
243
+ .bwp-feed {
244
+ list-style: outside none none;
245
+ margin: 0;
246
+ padding: 0;
247
+
248
+ li {
249
+ margin-bottom: 8px;
250
+ line-height: 1.5em;
251
+ }
252
+
253
+ a {
254
+ font-size: 13px;
255
+ font-weight: 400;
256
+ text-decoration: none;
257
+ }
258
+ }
259
+
260
+ .bwp-feed-buttons {
261
+ padding: 12px;
262
+
263
+ background-color: #fafafa;
264
+ border-top: 1px solid #eee;
265
+ }
266
+ /*--- End Sidebars ---*/
267
+
268
+ /*--- Icons ---*/
269
+ #icon-bwp-plugin {
270
+ background-repeat: no-repeat;
271
+ background-position: left center;
272
+ margin-top: 21px; margin-left: 5px;
273
+ width: 36px;
274
+ }
275
+ /*--- End Icons ---*/
vendor/kminh/bwp-framework/assets/option-page/css/less/codemirror.less ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .CodeMirror {
2
+ border: 1px solid #ddd;
3
+ height: auto;
4
+ .vendor(box-shadow, 0 1px 2px rgba(0, 0, 0, 0.07) inset);
5
+
6
+ font-size: 12px;
7
+ }
8
+
9
+ .CodeMirror-readonly {
10
+ // border: 1px solid #e1e1e1;
11
+ background-color: #eee !important;
12
+ }
13
+
14
+ .CodeMirror-scroll {
15
+ max-height: 200px;
16
+ }
17
+
18
+ .CodeMirror-lines {
19
+ padding: 4px;
20
+ }
21
+
22
+ .bwp-code-editor-large + .CodeMirror .CodeMirror-scroll {
23
+ max-height: 300px;
24
+ }
25
+
26
+ .bwp-option-page-inputs {
27
+ .CodeMirror, .bwp-code-editor {
28
+ margin: 1.3em 0 1.7em 0;
29
+ }
30
+ }
31
+
32
+ .CodeMirror, .bwp-code-editor {
33
+ & + .bwp-form-help-block {
34
+ margin-top: unit(-1.7/2, em);
35
+ margin-bottom: 1.2em;
36
+ }
37
+
38
+ pre.CodeMirror-placeholder {
39
+ color: #999;
40
+ }
41
+ }
vendor/kminh/bwp-framework/assets/option-page/css/less/datetimepicker.less ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ .ui-datepicker-trigger {
2
+ display: none;
3
+ }
vendor/kminh/bwp-framework/assets/option-page/css/less/form.less ADDED
@@ -0,0 +1,232 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .bwp-option-page {
2
+ p.submit {
3
+ clear: left;
4
+ margin-top: 2em;
5
+ padding-top: 0;
6
+
7
+ button, input {
8
+ margin-right: 0.3em;
9
+ }
10
+ }
11
+ }
12
+
13
+ .bwp-fields {
14
+ margin: 0;
15
+ }
16
+
17
+ .bwp-inline-form-wrapper-full {
18
+ max-width: 100%;
19
+ }
20
+
21
+ .bwp-inline-form-wrapper-lg {
22
+ max-width: 75%;
23
+ }
24
+
25
+ .bwp-inline-form-wrapper-md {
26
+ max-width: 50%;
27
+ }
28
+
29
+ .bwp-form-group {
30
+ margin-bottom: 1em;
31
+ }
32
+
33
+ .bwp-form-group-first {
34
+ margin-top: 1em;
35
+ }
36
+
37
+ .bwp-form-group {
38
+ position: relative;
39
+
40
+ label {
41
+ display: inline-block;
42
+ margin-bottom: 5px;
43
+ max-width: 100%;
44
+ }
45
+
46
+ select {
47
+ display: block;
48
+ width: 100%;
49
+ }
50
+ }
51
+
52
+ .bwp-form-group-sm {
53
+ label {
54
+ max-width: 50%;
55
+ }
56
+
57
+ select {
58
+ width: 50%;
59
+ }
60
+
61
+ .bwp-form-control {
62
+ width: 50%;
63
+ }
64
+
65
+ .bwp-form-control-icon {
66
+ right: 50%;
67
+ }
68
+ }
69
+
70
+ .bwp-form-group-xs {
71
+ label {
72
+ max-width: 25%;
73
+ }
74
+
75
+ select {
76
+ width: 25%;
77
+ }
78
+
79
+ .bwp-form-control {
80
+ width: 25%;
81
+ }
82
+
83
+ .bwp-form-control-icon {
84
+ right: 25%;
85
+ }
86
+ }
87
+
88
+ .bwp-button-group {
89
+ margin-bottom: 1em;
90
+
91
+ .button-secondary {
92
+ vertical-align: baseline;
93
+ }
94
+ }
95
+
96
+ .bwp-inline-form-wrapper {
97
+ .select2-container {
98
+ input, input:focus {
99
+ box-shadow: none;
100
+ padding: 0;
101
+ }
102
+
103
+ li {
104
+ margin: 0;
105
+ }
106
+ }
107
+ }
108
+
109
+ .bwp-form-control {
110
+ display: block;
111
+ width: 100%;
112
+ }
113
+
114
+ .bwp-form-control-with-icon {
115
+ padding-right: 30px;
116
+ }
117
+
118
+ .bwp-form-control-icon {
119
+ display: block;
120
+ width: 20px;
121
+ height: 20px;
122
+
123
+ margin-right: 4px;
124
+
125
+ position: absolute;
126
+ top: 28px;
127
+ right: 0;
128
+ z-index: 2;
129
+
130
+ text-align: center;
131
+ line-height: 20px;
132
+
133
+ cursor: pointer;
134
+ // pointer-events: none;
135
+ }
136
+
137
+ .bwp-opton-page-label {
138
+ display: block;
139
+ float: left;
140
+ width: 200px;
141
+ margin: 3px 0 1em 0;
142
+ }
143
+
144
+ .type-checkbox {
145
+ margin-top: 3px;
146
+ margin-bottom: 1.5em;
147
+ }
148
+
149
+ .type-input {
150
+ margin-top: 5px;
151
+ }
152
+
153
+ .type-select {
154
+ margin-top: 6px;
155
+ }
156
+
157
+ p.bwp-option-page-inputs {
158
+ margin: 0 0 0 220px;
159
+ padding: 0;
160
+ }
161
+
162
+ .bwp-option-page-inputs {
163
+ input[type="text"], select {
164
+ margin: 0 0 5px 0;
165
+ }
166
+
167
+ label {
168
+ margin: 0;
169
+ }
170
+
171
+ select {
172
+ /* margin: 1px 0 0 0; */
173
+ }
174
+
175
+ input[type="checkbox"] {
176
+ // margin-left: 2px;
177
+ }
178
+ }
179
+
180
+ .bwp-form-help-block {
181
+ display: block;
182
+ margin: -0.5em 0 1em 0;
183
+ color: lighten(@text-color, 25%);
184
+ }
185
+
186
+ .bwp-form-help-block-first {
187
+ margin-top: 0;
188
+ }
189
+
190
+ .bwp-form-help-block-last {
191
+ margin-bottom: 0;
192
+ }
193
+
194
+ .bwp-field-help-link {
195
+ // color: #444;
196
+ text-decoration: none;
197
+
198
+ &:focus {
199
+ box-shadow: none;
200
+ // color: #00a0d2;
201
+ }
202
+ }
203
+
204
+ .bwp-field-help {
205
+ vertical-align: middle;
206
+
207
+ color: #0073aa;
208
+
209
+ &:hover, &:active, &:focus {
210
+ cursor: pointer;
211
+ color: #00a0d2;
212
+ }
213
+
214
+ &:focus {
215
+ color: #124964;
216
+ }
217
+
218
+ // height: 18px;
219
+ // font-size: 18px;
220
+ }
221
+
222
+ select, input[type="text"], textarea {
223
+ & + .bwp-field-help, & + .bwp-field-help-link span {
224
+ display: inline-block;
225
+ margin-bottom: 5px;
226
+ }
227
+ }
228
+
229
+ .bwp-code-editor {
230
+ display: block;
231
+ max-height: 200px;
232
+ }
vendor/kminh/bwp-framework/assets/option-page/css/less/mixins.less ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .vendor(@property, @value) {
2
+ -webkit-@{property}: @value;
3
+ -khtml-@{property}: @value;
4
+ -moz-@{property}: @value;
5
+ @{property}: @value;
6
+ }
7
+
8
+ .bwp-mixin-button(@color; @bgcolor; @bordercolor:'') {
9
+ color: @color;
10
+ text-shadow: 0px 1px 1px darken(@bgcolor, 10%);
11
+ background: @bgcolor none repeat scroll 0 0;
12
+
13
+ border-color: darken(@bgcolor, 10%);
14
+ box-shadow: 0 1px 0 darken(@bgcolor, 10%);
15
+
16
+ & when (iscolor(@bordercolor)) {
17
+ border-color: @bordercolor;
18
+ box-shadow: 0 1px 0 @bordercolor;
19
+ }
20
+
21
+ &:hover, &:active {
22
+ background: lighten(@bgcolor, 3%) none repeat scroll 0 0;
23
+ border-color: darken(@bgcolor, 15%);
24
+
25
+ & when (iscolor(@bordercolor)) {
26
+ border-color: darken(@bordercolor, 10%);
27
+ }
28
+ }
29
+
30
+ &:active {
31
+ box-shadow: 0 2px 5px -3px fade(darken(@bgcolor, 50%), 50%) inset;
32
+ }
33
+ }
vendor/kminh/bwp-framework/assets/option-page/css/less/modal.less ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .bwp-modal-header {
2
+ h4 {
3
+ margin: 0;
4
+ font-size: 1.1em;
5
+ }
6
+ }
7
+
8
+ .bwp-modal-sm {
9
+ width: 350px;
10
+ }
11
+
12
+ .bwp-modal-content {
13
+ .box-shadow(0 3px 9px rgba(0,0,0,.2));
14
+ }
15
+
16
+ @media (min-width: @screen-sm-min) {
17
+ .bwp-modal-content {
18
+ .box-shadow(0 3px 9px rgba(0,0,0,.2));
19
+ }
20
+ }
21
+
22
+ .bwp-modal-footer {
23
+ .clearfix();
24
+
25
+ .bwp-btn {
26
+ margin-left: 5px;
27
+ }
28
+ }
29
+
30
+ .bwp-modal-message {
31
+ .pull-left();
32
+ .text-left();
33
+
34
+ display: block;
35
+ max-width: 50%;
36
+ margin-right: 1em;
37
+ }
vendor/kminh/bwp-framework/assets/option-page/css/less/popover.less ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .bwp-popover-full {
2
+ max-width: 100%;
3
+ }
4
+
5
+ .bwp-popover-lg {
6
+ max-width: 75%;
7
+ }
8
+
9
+ .bwp-popover-md {
10
+ max-width: 50%;
11
+ }
12
+
13
+ .bwp-popover-sm {
14
+ max-width: 25%;
15
+ }
16
+
17
+ .bwp-popover {
18
+ .box-shadow(0 3px 6px rgba(0,0,0,.1));
19
+
20
+ &.top { margin-top: -(@popover-arrow-width + 5); }
21
+ &.right { margin-left: (@popover-arrow-width + 5); }
22
+ &.bottom { margin-top: (@popover-arrow-width + 5); }
23
+ &.left { margin-left: -(@popover-arrow-width + 5); }
24
+ }
25
+
26
+ .bwp-popover-title {
27
+ padding: 4px 14px;
28
+ }
vendor/kminh/bwp-framework/assets/option-page/css/less/style.less ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ @import "variables.less";
2
+ @import "mixins.less";
3
+ @import "bootstrap.less";
4
+ @import "bwp.less";
5
+ @import "table.less";
6
+ @import "form.less";
7
+ @import "modal.less";
8
+ @import "popover.less";
9
+ @import "datetimepicker.less";
10
+ @import "codemirror.less";
vendor/kminh/bwp-framework/assets/option-page/css/less/table.less ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .bwp-table-md {
2
+ width: 50%;
3
+ }
4
+
5
+ .bwp-table-full {
6
+ width: 100%;
7
+ }
8
+
9
+ .bwp-table-lg {
10
+ width: 75%;
11
+ }
12
+
13
+ .bwp-table-inline {
14
+ clear: none;
15
+ }
16
+
17
+ table.dataTable {
18
+ clear: left;
19
+ }
20
+
21
+ table.dataTable.no-footer {
22
+ border-bottom: 1px solid #e1e1e1;
23
+ }
24
+
25
+ .bwp-table th,
26
+ .bwp-table td,
27
+ table.dataTable tbody th,
28
+ table.dataTable tbody td,
29
+ table.dataTable thead th,
30
+ table.dataTable thead td {
31
+ font-size: 13px;
32
+ padding: 5px 10px;
33
+ }
34
+
35
+ table.dataTable thead th,
36
+ table.dataTable tfoot th {
37
+ font-weight: 600;
38
+ }
39
+
40
+ .bwp-table-fixed-headers thead tr {
41
+ display: block;
42
+ position: relative;
43
+ }
44
+
45
+ .bwp-table-fixed-headers tbody {
46
+ display: block;
47
+ overflow: auto;
48
+ width: 100%;
49
+ max-height: 297px;
50
+ }
51
+
52
+ .bwp-table-fixed-headers td.ordinal,
53
+ .bwp-table-fixed-headers th.ordinal {
54
+ min-width: 30px;
55
+ }
56
+
57
+ .bwp-table-fixed-headers-old-id-wrapper {
58
+ width: 50%;
59
+ max-height: 297px;
60
+ overflow-x: hidden;
61
+ overflow-y: auto;
62
+ }
63
+
64
+ .bwp-table-fixed-headers-old-id-wrapper tbody {
65
+ height: auto;
66
+ }
67
+
68
+ .bwp-table-valign-middle td {
69
+ vertical-align: middle;
70
+ }
71
+
72
+ table.dataTable thead th,
73
+ table.dataTable thead td {
74
+ border-bottom: 1px solid #e1e1e1;
75
+ }
76
+
77
+ table.dataTable, table.dataTable th, table.dataTable td {
78
+ box-sizing: border-box;
79
+ }
80
+
81
+ .dataTables_wrapper table.dataTable,
82
+ .dataTables_wrapper .dataTables_filter,
83
+ .dataTables_wrapper .dataTables_length,
84
+ .dataTables_wrapper .dataTables_info,
85
+ .dataTables_wrapper .dataTables_paginate {
86
+ color: #444;
87
+ }
88
+
89
+ .dataTables_wrapper {
90
+ .dataTables_filter {
91
+ input {
92
+ margin-right: 0;
93
+ }
94
+ }
95
+ }
96
+
97
+ .dataTables_length {
98
+ margin-bottom: 1em;
99
+ }
100
+
101
+ .dataTables_wrapper {
102
+ clear: left;
103
+ }
104
+
105
+ .dataTables_wrapper .dataTables_info {
106
+ font-weight: 600;
107
+ }
108
+
109
+ .dataTables_wrapper .dataTables_paginate .paginate_button {
110
+ border: none;
111
+ color: #0073aa !important;
112
+ }
113
+
114
+ .dataTables_wrapper .dataTables_paginate .paginate_button:hover {
115
+ background: none;
116
+ border: none;
117
+ color: #00a0d2 !important;
118
+ }
119
+
120
+ .dataTables_wrapper .dataTables_paginate .paginate_button:active {
121
+ background: none;
122
+ box-shadow: none;
123
+ color: #00a0d2 !important;
124
+ }
125
+
126
+ .dataTables_wrapper .dataTables_paginate .paginate_button.disabled,
127
+ .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,
128
+ .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active {
129
+ border: none;
130
+ }
131
+
132
+ .dataTables_wrapper .dataTables_paginate .paginate_button.current,
133
+ .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {
134
+ background: none;
135
+ border: none;
136
+ color: #444 !important;
137
+ }
vendor/kminh/bwp-framework/assets/option-page/css/less/variables.less ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ @brand-color-twitter: rgb(85,172,238);
2
+ @brand-color-rss: rgb(242,101,34);
3
+ @brand-color-paypal-pay: rgb(0, 53, 128);
4
+ @brand-color-paypal-pal: rgb(0, 157, 216);
5
+ @brand-color-paypal-bg: rgb(255, 221, 168);
vendor/kminh/bwp-framework/assets/option-page/css/style.css ADDED
@@ -0,0 +1,1211 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .bwp-fade {
2
+ opacity: 0;
3
+ -webkit-transition: opacity 0.15s linear;
4
+ -o-transition: opacity 0.15s linear;
5
+ transition: opacity 0.15s linear;
6
+ }
7
+ .bwp-fade.in {
8
+ opacity: 1;
9
+ }
10
+ .bwp-collapse {
11
+ display: none;
12
+ }
13
+ .bwp-collapse.in {
14
+ display: block;
15
+ }
16
+ tr.bwp-collapse.in {
17
+ display: table-row;
18
+ }
19
+ tbody.bwp-collapse.in {
20
+ display: table-row-group;
21
+ }
22
+ .bwp-collapsing {
23
+ position: relative;
24
+ height: 0;
25
+ overflow: hidden;
26
+ -webkit-transition-property: height, visibility;
27
+ transition-property: height, visibility;
28
+ -webkit-transition-duration: 0.35s;
29
+ transition-duration: 0.35s;
30
+ -webkit-transition-timing-function: ease;
31
+ transition-timing-function: ease;
32
+ }
33
+ .bwp-close {
34
+ float: right;
35
+ font-size: 19.5px;
36
+ font-weight: bold;
37
+ line-height: 1;
38
+ color: #000000;
39
+ text-shadow: 0 1px 0 #ffffff;
40
+ opacity: 0.2;
41
+ filter: alpha(opacity=20);
42
+ }
43
+ .bwp-close:hover,
44
+ .bwp-close:focus {
45
+ color: #000000;
46
+ text-decoration: none;
47
+ cursor: pointer;
48
+ opacity: 0.5;
49
+ filter: alpha(opacity=50);
50
+ }
51
+ button.bwp-close {
52
+ padding: 0;
53
+ cursor: pointer;
54
+ background: transparent;
55
+ border: 0;
56
+ -webkit-appearance: none;
57
+ }
58
+ .bwp-modal-open {
59
+ overflow: hidden;
60
+ }
61
+ .bwp-modal {
62
+ display: none;
63
+ overflow: hidden;
64
+ position: fixed;
65
+ top: 0;
66
+ right: 0;
67
+ bottom: 0;
68
+ left: 0;
69
+ z-index: 1050;
70
+ -webkit-overflow-scrolling: touch;
71
+ outline: 0;
72
+ }
73
+ .bwp-modal.bwp-fade .bwp-modal-dialog {
74
+ -webkit-transform: translate(0, -25%);
75
+ -ms-transform: translate(0, -25%);
76
+ -o-transform: translate(0, -25%);
77
+ transform: translate(0, -25%);
78
+ -webkit-transition: -webkit-transform 0.3s ease-out;
79
+ -moz-transition: -moz-transform 0.3s ease-out;
80
+ -o-transition: -o-transform 0.3s ease-out;
81
+ transition: transform 0.3s ease-out;
82
+ }
83
+ .bwp-modal.in .bwp-modal-dialog {
84
+ -webkit-transform: translate(0, 0);
85
+ -ms-transform: translate(0, 0);
86
+ -o-transform: translate(0, 0);
87
+ transform: translate(0, 0);
88
+ }
89
+ .bwp-modal-open .bwp-modal {
90
+ overflow-x: hidden;
91
+ overflow-y: auto;
92
+ }
93
+ .bwp-modal-dialog {
94
+ position: relative;
95
+ width: auto;
96
+ margin: 10px;
97
+ }
98
+ .bwp-modal-content {
99
+ position: relative;
100
+ background-color: #ffffff;
101
+ border: 1px solid #999999;
102
+ border: 1px solid rgba(0, 0, 0, 0.2);
103
+ border-radius: 0px;
104
+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
105
+ box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
106
+ background-clip: padding-box;
107
+ outline: 0;
108
+ }
109
+ .bwp-modal-backdrop {
110
+ position: fixed;
111
+ top: 0;
112
+ right: 0;
113
+ bottom: 0;
114
+ left: 0;
115
+ z-index: 1040;
116
+ background-color: #f1f1f1;
117
+ }
118
+ .bwp-modal-backdrop.bwp-fade {
119
+ opacity: 0;
120
+ filter: alpha(opacity=0);
121
+ }
122
+ .bwp-modal-backdrop.in {
123
+ opacity: 0.8;
124
+ filter: alpha(opacity=80);
125
+ }
126
+ .bwp-modal-header {
127
+ padding: 15px;
128
+ border-bottom: 1px solid #e5e5e5;
129
+ min-height: 16.42857143px;
130
+ }
131
+ .bwp-modal-header .bwp-close {
132
+ margin-top: -2px;
133
+ }
134
+ .bwp-modal-title {
135
+ margin: 0;
136
+ line-height: 1.42857143;
137
+ }
138
+ .bwp-modal-body {
139
+ position: relative;
140
+ padding: 15px;
141
+ }
142
+ .bwp-modal-footer {
143
+ padding: 15px;
144
+ text-align: right;
145
+ border-top: 1px solid #e5e5e5;
146
+ }
147
+ .bwp-modal-footer .bwp-btn + .bwp-btn {
148
+ margin-left: 5px;
149
+ margin-bottom: 0;
150
+ }
151
+ .bwp-modal-footer .bwp-btn-group .bwp-btn + .bwp-btn {
152
+ margin-left: -1px;
153
+ }
154
+ .bwp-modal-footer .bwp-btn-block + .bwp-btn-block {
155
+ margin-left: 0;
156
+ }
157
+ .bwp-modal-scrollbar-measure {
158
+ position: absolute;
159
+ top: -9999px;
160
+ width: 50px;
161
+ height: 50px;
162
+ overflow: scroll;
163
+ }
164
+ @media (min-width: 768px) {
165
+ .bwp-modal-dialog {
166
+ width: 600px;
167
+ margin: 30px auto;
168
+ }
169
+ .bwp-modal-content {
170
+ -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
171
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
172
+ }
173
+ .bwp-modal-sm {
174
+ width: 300px;
175
+ }
176
+ }
177
+ @media (min-width: 992px) {
178
+ .bwp-modal-lg {
179
+ width: 900px;
180
+ }
181
+ }
182
+ .bwp-tooltip {
183
+ position: absolute;
184
+ z-index: 1070;
185
+ display: block;
186
+ font-family: inherit;
187
+ font-style: normal;
188
+ font-weight: normal;
189
+ letter-spacing: normal;
190
+ line-break: auto;
191
+ line-height: 1.42857143;
192
+ text-align: left;
193
+ text-align: start;
194
+ text-decoration: none;
195
+ text-shadow: none;
196
+ text-transform: none;
197
+ white-space: normal;
198
+ word-break: normal;
199
+ word-spacing: normal;
200
+ word-wrap: normal;
201
+ font-size: 12px;
202
+ opacity: 0;
203
+ filter: alpha(opacity=0);
204
+ }
205
+ .bwp-tooltip.in {
206
+ opacity: 0.9;
207
+ filter: alpha(opacity=90);
208
+ }
209
+ .bwp-tooltip.top {
210
+ margin-top: -3px;
211
+ padding: 5px 0;
212
+ }
213
+ .bwp-tooltip.right {
214
+ margin-left: 3px;
215
+ padding: 0 5px;
216
+ }
217
+ .bwp-tooltip.bottom {
218
+ margin-top: 3px;
219
+ padding: 5px 0;
220
+ }
221
+ .bwp-tooltip.left {
222
+ margin-left: -3px;
223
+ padding: 0 5px;
224
+ }
225
+ .bwp-tooltip-inner {
226
+ max-width: 200px;
227
+ padding: 3px 8px;
228
+ color: #ffffff;
229
+ text-align: center;
230
+ background-color: #000000;
231
+ border-radius: 0px;
232
+ }
233
+ .bwp-tooltip-arrow {
234
+ position: absolute;
235
+ width: 0;
236
+ height: 0;
237
+ border-color: transparent;
238
+ border-style: solid;
239
+ }
240
+ .bwp-tooltip.top .bwp-tooltip-arrow {
241
+ bottom: 0;
242
+ left: 50%;
243
+ margin-left: -5px;
244
+ border-width: 5px 5px 0;
245
+ border-top-color: #000000;
246
+ }
247
+ .bwp-tooltip.top-left .bwp-tooltip-arrow {
248
+ bottom: 0;
249
+ right: 5px;
250
+ margin-bottom: -5px;
251
+ border-width: 5px 5px 0;
252
+ border-top-color: #000000;
253
+ }
254
+ .bwp-tooltip.top-right .bwp-tooltip-arrow {
255
+ bottom: 0;
256
+ left: 5px;
257
+ margin-bottom: -5px;
258
+ border-width: 5px 5px 0;
259
+ border-top-color: #000000;
260
+ }
261
+ .bwp-tooltip.right .bwp-tooltip-arrow {
262
+ top: 50%;
263
+ left: 0;
264
+ margin-top: -5px;
265
+ border-width: 5px 5px 5px 0;
266
+ border-right-color: #000000;
267
+ }
268
+ .bwp-tooltip.left .bwp-tooltip-arrow {
269
+ top: 50%;
270
+ right: 0;
271
+ margin-top: -5px;
272
+ border-width: 5px 0 5px 5px;
273
+ border-left-color: #000000;
274
+ }
275
+ .bwp-tooltip.bottom .bwp-tooltip-arrow {
276
+ top: 0;
277
+ left: 50%;
278
+ margin-left: -5px;
279
+ border-width: 0 5px 5px;
280
+ border-bottom-color: #000000;
281
+ }
282
+ .bwp-tooltip.bottom-left .bwp-tooltip-arrow {
283
+ top: 0;
284
+ right: 5px;
285
+ margin-top: -5px;
286
+ border-width: 0 5px 5px;
287
+ border-bottom-color: #000000;
288
+ }
289
+ .bwp-tooltip.bottom-right .bwp-tooltip-arrow {
290
+ top: 0;
291
+ left: 5px;
292
+ margin-top: -5px;
293
+ border-width: 0 5px 5px;
294
+ border-bottom-color: #000000;
295
+ }
296
+ .bwp-popover {
297
+ position: absolute;
298
+ top: 0;
299
+ left: 0;
300
+ z-index: 1060;
301
+ display: none;
302
+ max-width: 276px;
303
+ padding: 1px;
304
+ font-family: inherit;
305
+ font-style: normal;
306
+ font-weight: normal;
307
+ letter-spacing: normal;
308
+ line-break: auto;
309
+ line-height: 1.42857143;
310
+ text-align: left;
311
+ text-align: start;
312
+ text-decoration: none;
313
+ text-shadow: none;
314
+ text-transform: none;
315
+ white-space: normal;
316
+ word-break: normal;
317
+ word-spacing: normal;
318
+ word-wrap: normal;
319
+ font-size: 13px;
320
+ background-color: #ffffff;
321
+ background-clip: padding-box;
322
+ border: 1px solid #cccccc;
323
+ border: 1px solid rgba(0, 0, 0, 0.2);
324
+ border-radius: 0px;
325
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
326
+ box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
327
+ }
328
+ .bwp-popover.top {
329
+ margin-top: -10px;
330
+ }
331
+ .bwp-popover.right {
332
+ margin-left: 10px;
333
+ }
334
+ .bwp-popover.bottom {
335
+ margin-top: 10px;
336
+ }
337
+ .bwp-popover.left {
338
+ margin-left: -10px;
339
+ }
340
+ .bwp-popover-title {
341
+ margin: 0;
342
+ padding: 8px 14px;
343
+ font-size: 13px;
344
+ background-color: #f7f7f7;
345
+ border-bottom: 1px solid #ebebeb;
346
+ border-radius: -1px -1px 0 0;
347
+ }
348
+ .bwp-popover-content {
349
+ padding: 9px 14px;
350
+ }
351
+ .bwp-popover > .bwp-arrow,
352
+ .bwp-popover > .bwp-arrow:after {
353
+ position: absolute;
354
+ display: block;
355
+ width: 0;
356
+ height: 0;
357
+ border-color: transparent;
358
+ border-style: solid;
359
+ }
360
+ .bwp-popover > .bwp-arrow {
361
+ border-width: 11px;
362
+ }
363
+ .bwp-popover > .bwp-arrow:after {
364
+ border-width: 10px;
365
+ content: "";
366
+ }
367
+ .bwp-popover.top > .bwp-arrow {
368
+ left: 50%;
369
+ margin-left: -11px;
370
+ border-bottom-width: 0;
371
+ border-top-color: #999999;
372
+ border-top-color: rgba(0, 0, 0, 0.25);
373
+ bottom: -11px;
374
+ }
375
+ .bwp-popover.top > .bwp-arrow:after {
376
+ content: " ";
377
+ bottom: 1px;
378
+ margin-left: -10px;
379
+ border-bottom-width: 0;
380
+ border-top-color: #ffffff;
381
+ }
382
+ .bwp-popover.right > .bwp-arrow {
383
+ top: 50%;
384
+ left: -11px;
385
+ margin-top: -11px;
386
+ border-left-width: 0;
387
+ border-right-color: #999999;
388
+ border-right-color: rgba(0, 0, 0, 0.25);
389
+ }
390
+ .bwp-popover.right > .bwp-arrow:after {
391
+ content: " ";
392
+ left: 1px;
393
+ bottom: -10px;
394
+ border-left-width: 0;
395
+ border-right-color: #ffffff;
396
+ }
397
+ .bwp-popover.bottom > .bwp-arrow {
398
+ left: 50%;
399
+ margin-left: -11px;
400
+ border-top-width: 0;
401
+ border-bottom-color: #999999;
402
+ border-bottom-color: rgba(0, 0, 0, 0.25);
403
+ top: -11px;
404
+ }
405
+ .bwp-popover.bottom > .bwp-arrow:after {
406
+ content: " ";
407
+ top: 1px;
408
+ margin-left: -10px;
409
+ border-top-width: 0;
410
+ border-bottom-color: #ffffff;
411
+ }
412
+ .bwp-popover.left > .bwp-arrow {
413
+ top: 50%;
414
+ right: -11px;
415
+ margin-top: -11px;
416
+ border-right-width: 0;
417
+ border-left-color: #999999;
418
+ border-left-color: rgba(0, 0, 0, 0.25);
419
+ }
420
+ .bwp-popover.left > .bwp-arrow:after {
421
+ content: " ";
422
+ right: 1px;
423
+ border-right-width: 0;
424
+ border-left-color: #ffffff;
425
+ bottom: -10px;
426
+ }
427
+ .clearfix:before,
428
+ .clearfix:after,
429
+ .bwp-modal-footer:before,
430
+ .bwp-modal-footer:after {
431
+ content: " ";
432
+ display: table;
433
+ }
434
+ .clearfix:after,
435
+ .bwp-modal-footer:after {
436
+ clear: both;
437
+ }
438
+ .center-block {
439
+ display: block;
440
+ margin-left: auto;
441
+ margin-right: auto;
442
+ }
443
+ .pull-right {
444
+ float: right !important;
445
+ }
446
+ .pull-left {
447
+ float: left !important;
448
+ }
449
+ .hide {
450
+ display: none !important;
451
+ }
452
+ .show {
453
+ display: block !important;
454
+ }
455
+ .invisible {
456
+ visibility: hidden;
457
+ }
458
+ .text-hide {
459
+ font: 0/0 a;
460
+ color: transparent;
461
+ text-shadow: none;
462
+ background-color: transparent;
463
+ border: 0;
464
+ }
465
+ .hidden {
466
+ display: none !important;
467
+ }
468
+ .affix {
469
+ position: fixed;
470
+ }
471
+ .text-left {
472
+ text-align: left;
473
+ }
474
+ .text-right {
475
+ text-align: right;
476
+ }
477
+ .text-center {
478
+ text-align: center;
479
+ }
480
+ .text-justify {
481
+ text-align: justify;
482
+ }
483
+ .text-nowrap {
484
+ white-space: nowrap;
485
+ }
486
+ .text-lowercase {
487
+ text-transform: lowercase;
488
+ }
489
+ .text-uppercase {
490
+ text-transform: uppercase;
491
+ }
492
+ .text-capitalize {
493
+ text-transform: capitalize;
494
+ }
495
+ .text-muted {
496
+ color: #777777;
497
+ }
498
+ .text-primary {
499
+ color: #337ab7;
500
+ }
501
+ a.text-primary:hover,
502
+ a.text-primary:focus {
503
+ color: #286090;
504
+ }
505
+ .text-success {
506
+ color: green;
507
+ }
508
+ a.text-success:hover,
509
+ a.text-success:focus {
510
+ color: #004d00;
511
+ }
512
+ .text-info {
513
+ color: #31708f;
514
+ }
515
+ a.text-info:hover,
516
+ a.text-info:focus {
517
+ color: #245269;
518
+ }
519
+ .text-warning {
520
+ color: #8a6d3b;
521
+ }
522
+ a.text-warning:hover,
523
+ a.text-warning:focus {
524
+ color: #66512c;
525
+ }
526
+ .text-danger {
527
+ color: #dd3d36;
528
+ }
529
+ a.text-danger:hover,
530
+ a.text-danger:focus {
531
+ color: #c02720;
532
+ }
533
+ .bg-primary {
534
+ color: #fff;
535
+ background-color: #337ab7;
536
+ }
537
+ a.bg-primary:hover,
538
+ a.bg-primary:focus {
539
+ background-color: #286090;
540
+ }
541
+ .bg-success {
542
+ background-color: #dff0d8;
543
+ }
544
+ a.bg-success:hover,
545
+ a.bg-success:focus {
546
+ background-color: #c1e2b3;
547
+ }
548
+ .bg-info {
549
+ background-color: #d9edf7;
550
+ }
551
+ a.bg-info:hover,
552
+ a.bg-info:focus {
553
+ background-color: #afd9ee;
554
+ }
555
+ .bg-warning {
556
+ background-color: #fcf8e3;
557
+ }
558
+ a.bg-warning:hover,
559
+ a.bg-warning:focus {
560
+ background-color: #f7ecb5;
561
+ }
562
+ .bg-danger {
563
+ background-color: #f2dede;
564
+ }
565
+ a.bg-danger:hover,
566
+ a.bg-danger:focus {
567
+ background-color: #e4b9b9;
568
+ }
569
+ /*--- Common ---*/
570
+ .bwp-option-page {
571
+ margin-top: 1em;
572
+ padding-bottom: 1em;
573
+ }
574
+ .bwp-option-page h4 {
575
+ font-size: 1.1em;
576
+ margin: 1em 0;
577
+ }
578
+ .bwp-option-page p {
579
+ margin-top: 0px;
580
+ margin-bottom: 0px;
581
+ zoom: 1;
582
+ }
583
+ .bwp-option-page .bwp-paragraph {
584
+ margin: 1em 0;
585
+ }
586
+ .bwp-option-page li.bwp-clear,
587
+ .bwp-option-page div.bwp-clear {
588
+ clear: left;
589
+ margin: 1em 0 0 0;
590
+ zoom: 1;
591
+ }
592
+ .bwp-option-page div.bwp-clear {
593
+ margin-bottom: 1.7em;
594
+ }
595
+ .bwp-no-display {
596
+ display: none;
597
+ }
598
+ .bwp-hidden {
599
+ visibility: hidden;
600
+ }
601
+ .bwp-meta {
602
+ color: #999;
603
+ }
604
+ .bwp-justin {
605
+ display: inline-block;
606
+ position: relative;
607
+ bottom: 0.5em;
608
+ font-size: 0.85em;
609
+ font-weight: 600;
610
+ color: #f26522;
611
+ }
612
+ /*--- End Common ---*/
613
+ /*--- Main ---*/
614
+ .bwp-wrap {
615
+ clear: both;
616
+ }
617
+ #bwp-main {
618
+ width: auto;
619
+ overflow: hidden;
620
+ }
621
+ #bwp-main .updated,
622
+ #bwp-main .error {
623
+ margin-top: 15px;
624
+ margin-bottom: 0;
625
+ }
626
+ #bwp-main .updated.first,
627
+ #bwp-main .error.first {
628
+ margin-top: 20px;
629
+ }
630
+ /*--- End Main ---*/
631
+ /*--- Header ---*/
632
+ #bwp-header {
633
+ margin-bottom: 15px;
634
+ padding-top: 5px;
635
+ }
636
+ #bwp-header h1 {
637
+ padding: 0;
638
+ margin-top: 0;
639
+ margin-bottom: 15px;
640
+ color: #32373c;
641
+ font-size: 2em;
642
+ font-weight: 400;
643
+ line-height: 1.2em;
644
+ }
645
+ #bwp-donation {
646
+ display: none;
647
+ }
648
+ #bwp-get-social {
649
+ max-width: 450px;
650
+ margin-top: 15px;
651
+ margin-bottom: 0;
652
+ overflow: hidden;
653
+ }
654
+ #bwp-get-social .inside {
655
+ padding-bottom: 0;
656
+ }
657
+ #bwp-get-social h2 {
658
+ cursor: default;
659
+ font-size: 14px;
660
+ line-height: 1.4;
661
+ margin: 0;
662
+ padding: 8px 12px;
663
+ }
664
+ #bwp-social-buttons {
665
+ height: 20px;
666
+ padding-top: 3px;
667
+ }
668
+ #bwp-social-buttons .bwp-twitter-buttons,
669
+ #bwp-social-buttons .bwp-gplus-buttons,
670
+ #bwp-social-buttons .bwp-fb-buttons {
671
+ float: left;
672
+ margin-right: 15px;
673
+ }
674
+ #bwp-social-buttons .bwp-gplus-buttons {
675
+ max-width: 80px;
676
+ margin-right: 0;
677
+ }
678
+ /*--- End Header ---*/
679
+ /*--- Tabs ---*/
680
+ .bwp-option-page-tabs a {
681
+ padding-left: 15px;
682
+ padding-right: 15px;
683
+ color: #c1c1c1;
684
+ font-size: 18px;
685
+ font-weight: 600;
686
+ }
687
+ .bwp-option-page-tabs a.nav-tab-active {
688
+ color: #000;
689
+ }
690
+ .wrap .bwp-option-page-tabs {
691
+ padding-left: 6px;
692
+ }
693
+ /*--- End Tabs ---*/
694
+ /*--- Button ---*/
695
+ .wp-core-ui .button-inline {
696
+ vertical-align: middle;
697
+ }
698
+ .bwp-button .dashicons {
699
+ width: auto;
700
+ height: 18px;
701
+ font-size: 14px;
702
+ vertical-align: middle;
703
+ }
704
+ .bwp-button-paypal {
705
+ color: #003580 !important;
706
+ text-shadow: 0px 1px 1px #ffcf84 !important;
707
+ background: #ffe3b7 none repeat scroll 0 0 !important;
708
+ border-color: #ffcf84 !important;
709
+ box-shadow: 0 1px 0 #ffcf84 !important;
710
+ border-color: #ffc975 !important;
711
+ box-shadow: 0 1px 0 #ffc975 !important;
712
+ font-weight: 600;
713
+ }
714
+ .bwp-button-paypal:hover,
715
+ .bwp-button-paypal:active {
716
+ background: #ffe9c6 none repeat scroll 0 0 !important;
717
+ border-color: #ffc56b !important;
718
+ border-color: #ffb542 !important;
719
+ }
720
+ .bwp-button-paypal:active {
721
+ box-shadow: 0 2px 5px -3px rgba(183, 112, 0, 0.5) inset !important;
722
+ }
723
+ .bwp-button-paypal .paypal-pay,
724
+ .bwp-button-paypal .paypal-pal {
725
+ font-weight: bold;
726
+ font-style: italic;
727
+ }
728
+ .bwp-button-paypal .paypal-pay {
729
+ color: #003580;
730
+ }
731
+ .bwp-button-paypal .paypal-pal {
732
+ color: #009DD8;
733
+ }
734
+ /*--- End Button ---*/
735
+ /*--- Sidebars ---*/
736
+ #bwp-sidebar-right {
737
+ width: 276px;
738
+ margin: 0 0 10px 20px;
739
+ float: right;
740
+ }
741
+ #bwp-sidebar-right .postbox .inside {
742
+ max-width: 250px;
743
+ padding-bottom: 0;
744
+ line-height: 1;
745
+ }
746
+ #bwp-sidebar-right .postbox .hndle {
747
+ margin: 0;
748
+ padding: 8px 12px;
749
+ font-size: 14px;
750
+ line-height: 1.4;
751
+ cursor: default;
752
+ }
753
+ #bwp-ads {
754
+ margin-top: 10px;
755
+ }
756
+ #bwp-ads a {
757
+ line-height: 1;
758
+ }
759
+ #bwp-news a {
760
+ margin-right: 5px;
761
+ }
762
+ .bwp-button-rss {
763
+ color: #ffffff !important;
764
+ text-shadow: 0px 1px 1px #d44d0d !important;
765
+ background: #f26522 none repeat scroll 0 0 !important;
766
+ border-color: #d44d0d !important;
767
+ box-shadow: 0 1px 0 #d44d0d !important;
768
+ }
769
+ .bwp-button-rss:hover,
770
+ .bwp-button-rss:active {
771
+ background: #f36f30 none repeat scroll 0 0 !important;
772
+ border-color: #bc440b !important;
773
+ }
774
+ .bwp-button-rss:active {
775
+ box-shadow: 0 2px 5px -3px rgba(20, 7, 1, 0.5) inset !important;
776
+ }
777
+ .bwp-button-twitter {
778
+ color: #ffffff !important;
779
+ text-shadow: 0px 1px 1px #2795e9 !important;
780
+ background: #55acee none repeat scroll 0 0 !important;
781
+ border-color: #2795e9 !important;
782
+ box-shadow: 0 1px 0 #2795e9 !important;
783
+ }
784
+ .bwp-button-twitter:hover,
785
+ .bwp-button-twitter:active {
786
+ background: #63b3ef none repeat scroll 0 0 !important;
787
+ border-color: #1689e0 !important;
788
+ }
789
+ .bwp-button-twitter:active {
790
+ box-shadow: 0 2px 5px -3px rgba(6, 38, 62, 0.5) inset !important;
791
+ }
792
+ .bwp-feed {
793
+ list-style: outside none none;
794
+ margin: 0;
795
+ padding: 0;
796
+ }
797
+ .bwp-feed li {
798
+ margin-bottom: 8px;
799
+ line-height: 1.5em;
800
+ }
801
+ .bwp-feed a {
802
+ font-size: 13px;
803
+ font-weight: 400;
804
+ text-decoration: none;
805
+ }
806
+ .bwp-feed-buttons {
807
+ padding: 12px;
808
+ background-color: #fafafa;
809
+ border-top: 1px solid #eee;
810
+ }
811
+ /*--- End Sidebars ---*/
812
+ /*--- Icons ---*/
813
+ #icon-bwp-plugin {
814
+ background-repeat: no-repeat;
815
+ background-position: left center;
816
+ margin-top: 21px;
817
+ margin-left: 5px;
818
+ width: 36px;
819
+ }
820
+ .bwp-table-md {
821
+ width: 50%;
822
+ }
823
+ .bwp-table-full {
824
+ width: 100%;
825
+ }
826
+ .bwp-table-lg {
827
+ width: 75%;
828
+ }
829
+ .bwp-table-inline {
830
+ clear: none;
831
+ }
832
+ table.dataTable {
833
+ clear: left;
834
+ }
835
+ table.dataTable.no-footer {
836
+ border-bottom: 1px solid #e1e1e1;
837
+ }
838
+ .bwp-table th,
839
+ .bwp-table td,
840
+ table.dataTable tbody th,
841
+ table.dataTable tbody td,
842
+ table.dataTable thead th,
843
+ table.dataTable thead td {
844
+ font-size: 13px;
845
+ padding: 5px 10px;
846
+ }
847
+ table.dataTable thead th,
848
+ table.dataTable tfoot th {
849
+ font-weight: 600;
850
+ }
851
+ .bwp-table-fixed-headers thead tr {
852
+ display: block;
853
+ position: relative;
854
+ }
855
+ .bwp-table-fixed-headers tbody {
856
+ display: block;
857
+ overflow: auto;
858
+ width: 100%;
859
+ max-height: 297px;
860
+ }
861
+ .bwp-table-fixed-headers td.ordinal,
862
+ .bwp-table-fixed-headers th.ordinal {
863
+ min-width: 30px;
864
+ }
865
+ .bwp-table-fixed-headers-old-id-wrapper {
866
+ width: 50%;
867
+ max-height: 297px;
868
+ overflow-x: hidden;
869
+ overflow-y: auto;
870
+ }
871
+ .bwp-table-fixed-headers-old-id-wrapper tbody {
872
+ height: auto;
873
+ }
874
+ .bwp-table-valign-middle td {
875
+ vertical-align: middle;
876
+ }
877
+ table.dataTable thead th,
878
+ table.dataTable thead td {
879
+ border-bottom: 1px solid #e1e1e1;
880
+ }
881
+ table.dataTable,
882
+ table.dataTable th,
883
+ table.dataTable td {
884
+ box-sizing: border-box;
885
+ }
886
+ .dataTables_wrapper table.dataTable,
887
+ .dataTables_wrapper .dataTables_filter,
888
+ .dataTables_wrapper .dataTables_length,
889
+ .dataTables_wrapper .dataTables_info,
890
+ .dataTables_wrapper .dataTables_paginate {
891
+ color: #444;
892
+ }
893
+ .dataTables_wrapper .dataTables_filter input {
894
+ margin-right: 0;
895
+ }
896
+ .dataTables_length {
897
+ margin-bottom: 1em;
898
+ }
899
+ .dataTables_wrapper {
900
+ clear: left;
901
+ }
902
+ .dataTables_wrapper .dataTables_info {
903
+ font-weight: 600;
904
+ }
905
+ .dataTables_wrapper .dataTables_paginate .paginate_button {
906
+ border: none;
907
+ color: #0073aa !important;
908
+ }
909
+ .dataTables_wrapper .dataTables_paginate .paginate_button:hover {
910
+ background: none;
911
+ border: none;
912
+ color: #00a0d2 !important;
913
+ }
914
+ .dataTables_wrapper .dataTables_paginate .paginate_button:active {
915
+ background: none;
916
+ box-shadow: none;
917
+ color: #00a0d2 !important;
918
+ }
919
+ .dataTables_wrapper .dataTables_paginate .paginate_button.disabled,
920
+ .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,
921
+ .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active {
922
+ border: none;
923
+ }
924
+ .dataTables_wrapper .dataTables_paginate .paginate_button.current,
925
+ .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {
926
+ background: none;
927
+ border: none;
928
+ color: #444 !important;
929
+ }
930
+ .bwp-option-page p.submit {
931
+ clear: left;
932
+ margin-top: 2em;
933
+ padding-top: 0;
934
+ }
935
+ .bwp-option-page p.submit button,
936
+ .bwp-option-page p.submit input {
937
+ margin-right: 0.3em;
938
+ }
939
+ .bwp-fields {
940
+ margin: 0;
941
+ }
942
+ .bwp-inline-form-wrapper-full {
943
+ max-width: 100%;
944
+ }
945
+ .bwp-inline-form-wrapper-lg {
946
+ max-width: 75%;
947
+ }
948
+ .bwp-inline-form-wrapper-md {
949
+ max-width: 50%;
950
+ }
951
+ .bwp-form-group {
952
+ margin-bottom: 1em;
953
+ }
954
+ .bwp-form-group-first {
955
+ margin-top: 1em;
956
+ }
957
+ .bwp-form-group {
958
+ position: relative;
959
+ }
960
+ .bwp-form-group label {
961
+ display: inline-block;
962
+ margin-bottom: 5px;
963
+ max-width: 100%;
964
+ }
965
+ .bwp-form-group select {
966
+ display: block;
967
+ width: 100%;
968
+ }
969
+ .bwp-form-group-sm label {
970
+ max-width: 50%;
971
+ }
972
+ .bwp-form-group-sm select {
973
+ width: 50%;
974
+ }
975
+ .bwp-form-group-sm .bwp-form-control {
976
+ width: 50%;
977
+ }
978
+ .bwp-form-group-sm .bwp-form-control-icon {
979
+ right: 50%;
980
+ }
981
+ .bwp-form-group-xs label {
982
+ max-width: 25%;
983
+ }
984
+ .bwp-form-group-xs select {
985
+ width: 25%;
986
+ }
987
+ .bwp-form-group-xs .bwp-form-control {
988
+ width: 25%;
989
+ }
990
+ .bwp-form-group-xs .bwp-form-control-icon {
991
+ right: 25%;
992
+ }
993
+ .bwp-button-group {
994
+ margin-bottom: 1em;
995
+ }
996
+ .bwp-button-group .button-secondary {
997
+ vertical-align: baseline;
998
+ }
999
+ .bwp-inline-form-wrapper .select2-container input,
1000
+ .bwp-inline-form-wrapper .select2-container input:focus {
1001
+ box-shadow: none;
1002
+ padding: 0;
1003
+ }
1004
+ .bwp-inline-form-wrapper .select2-container li {
1005
+ margin: 0;
1006
+ }
1007
+ .bwp-form-control {
1008
+ display: block;
1009
+ width: 100%;
1010
+ }
1011
+ .bwp-form-control-with-icon {
1012
+ padding-right: 30px;
1013
+ }
1014
+ .bwp-form-control-icon {
1015
+ display: block;
1016
+ width: 20px;
1017
+ height: 20px;
1018
+ margin-right: 4px;
1019
+ position: absolute;
1020
+ top: 28px;
1021
+ right: 0;
1022
+ z-index: 2;
1023
+ text-align: center;
1024
+ line-height: 20px;
1025
+ cursor: pointer;
1026
+ }
1027
+ .bwp-opton-page-label {
1028
+ display: block;
1029
+ float: left;
1030
+ width: 200px;
1031
+ margin: 3px 0 1em 0;
1032
+ }
1033
+ .type-checkbox {
1034
+ margin-top: 3px;
1035
+ margin-bottom: 1.5em;
1036
+ }
1037
+ .type-input {
1038
+ margin-top: 5px;
1039
+ }
1040
+ .type-select {
1041
+ margin-top: 6px;
1042
+ }
1043
+ p.bwp-option-page-inputs {
1044
+ margin: 0 0 0 220px;
1045
+ padding: 0;
1046
+ }
1047
+ .bwp-option-page-inputs input[type="text"],
1048
+ .bwp-option-page-inputs select {
1049
+ margin: 0 0 5px 0;
1050
+ }
1051
+ .bwp-option-page-inputs label {
1052
+ margin: 0;
1053
+ }
1054
+ .bwp-option-page-inputs select {
1055
+ /* margin: 1px 0 0 0; */
1056
+ }
1057
+ .bwp-form-help-block {
1058
+ display: block;
1059
+ margin: -0.5em 0 1em 0;
1060
+ color: #737373;
1061
+ }
1062
+ .bwp-form-help-block-first {
1063
+ margin-top: 0;
1064
+ }
1065
+ .bwp-form-help-block-last {
1066
+ margin-bottom: 0;
1067
+ }
1068
+ .bwp-field-help-link {
1069
+ text-decoration: none;
1070
+ }
1071
+ .bwp-field-help-link:focus {
1072
+ box-shadow: none;
1073
+ }
1074
+ .bwp-field-help {
1075
+ vertical-align: middle;
1076
+ color: #0073aa;
1077
+ }
1078
+ .bwp-field-help:hover,
1079
+ .bwp-field-help:a