Yoast WPSEO Plugin: How to add change frequency selector to tab „advanced“ for sitemap generation

  • -

Yoast WPSEO Plugin: How to add change frequency selector to tab „advanced“ for sitemap generation

Description

Modification for the YOAST WordPress-SEO Plugin. This adds a new drop down select box for „Change frequency“ to change the Yoast default sitemap value from weekly to a different of the possible values: always, hourly, daily, weekly, monthly, yearly, never.

The new drop box selector for the change frequency of a page or post is placed in tab „advanced“ in the Yoast Meta Box.

yoast wpseo tab advanced sitemap change frequency

 

Test Environment

  • Yoast WPSEO v1.5.5.3
  • WordPress 3.9.3

also tested with Yoast WPSEO v1.5.2.2 (needs an additional line).

Please evaluate other versions. This HowTo is for developers and comes with no warranty.

Changes to class-wpseo-meta.php

Open the file \wp-content\plugins\wordpress-seo\inc\class-wpseo-meta.php

and in function

public static $meta_fields = array()

at around Line 222 (after ’sitemap-prio‘) add the following code

 'sitemap-change-frequency' => array(
   'type' => 'select',
   'title' => 'Change frequency', 
   'default_value' => 'weekly',
   'description' => '', // translation added later
   'options' => array(
     'always' => '',
     'hourly' => '',
     'daily' => '',
     'weekly' => '',
     'monthly' => '',
     'yearly' => '',
     'never' => '',
   ),
 ),

In the same file search for the function get_meta_field_defs() and inside the block

case 'advanced':

search for

/* Don't show the xml sitemap fields, if xml sitemaps aren't enabled */
 if ( $options['enablexmlsitemap'] !== true ) {
   unset(
     $field_defs['sitemap-include'],
     $field_defs['sitemap-prio']
   );
 }

and change to

/* Don't show the xml sitemap fields, if xml sitemaps aren't enabled */
 if ( $options['enablexmlsitemap'] !== true ) {
   unset(
     $field_defs['sitemap-include'],
     $field_defs['sitemap-prio'],
     $field_defs['sitemap-change-frequency']
   );
 }

class-metabox.php

Open the file wp-content\plugins\wordpress-seo\admin\class-metabox.php and look for the function

translate_meta_boxes()

At around line 105 insert the following

self::$meta_fields['advanced']['sitemap-change-frequency']['title'] = __( 'Sitemap Change frequency', 'wordpress-seo' );
 self::$meta_fields['advanced']['sitemap-change-frequency']['description'] = __( 'The Change frequency given to this page in the XML sitemap.', 'wordpress-seo' );
 self::$meta_fields['advanced']['sitemap-change-frequency']['options']['always'] = __( 'Always', 'wordpress-seo' );
 self::$meta_fields['advanced']['sitemap-change-frequency']['options']['hourly'] = __( 'Hourly', 'wordpress-seo' );
 self::$meta_fields['advanced']['sitemap-change-frequency']['options']['daily'] .= __( 'Daily', 'wordpress-seo' );
 self::$meta_fields['advanced']['sitemap-change-frequency']['options']['weekly'] .= __( 'Weekly', 'wordpress-seo' );
 self::$meta_fields['advanced']['sitemap-change-frequency']['options']['monthly'] .= __( 'Monthly', 'wordpress-seo' );
 self::$meta_fields['advanced']['sitemap-change-frequency']['options']['yearly'] .= __( 'Yearly', 'wordpress-seo' ); 
 self::$meta_fields['advanced']['sitemap-change-frequency']['options']['never'] .= __( 'Never', 'wordpress-seo' );

This adds an extra Meta tag to the Yoast WPSEO Database entries

To extract those entries and write them to the sitemap.xml you have to change

class-sitemaps.xml

Open \wp-content\plugins\wordpress-seo\inc\class-sitemaps.php and at around line 784 search for

$url['chf'] = $this->filter_frequency( $post_type . '_single', 'weekly', $url['loc'] );

and replace with

$url['chf'] =WPSEO_Meta::get_value( 'sitemap-change-frequency', $p->ID );

Other versions of Yoast WPSEO

For other versions of Yoast WPSEO Plugin you might have to replace more lines, where the array variable $url[‚chf‘] gets assigned.

If using Version 1.5.2.2 please also replace at around line 550:

$url['chf'] = 'weekly';

with the substitution

$url['chf'] = $freq = WPSEO_Meta::get_value( 'sitemap-change-frequency', $p->ID );

Sie benötigen Hilfe?

Mit * gekennzeichnete Felder sind Pflichtangaben
Durch Absenden des Formulars bestätigen Sie, unsere Datenschutzerklärung zur Kenntnis genommen zu haben

Das könnte Sie auch interessieren

KONTAKT