summaryrefslogtreecommitdiffstats
path: root/wp-includes/robots-template.php
diff options
context:
space:
mode:
Diffstat (limited to 'wp-includes/robots-template.php')
-rw-r--r--wp-includes/robots-template.php193
1 files changed, 193 insertions, 0 deletions
diff --git a/wp-includes/robots-template.php b/wp-includes/robots-template.php
new file mode 100644
index 0000000..e719e74
--- /dev/null
+++ b/wp-includes/robots-template.php
@@ -0,0 +1,193 @@
+<?php
+/**
+ * Robots template functions.
+ *
+ * @package WordPress
+ * @subpackage Robots
+ * @since 5.7.0
+ */
+
+/**
+ * Displays the robots meta tag as necessary.
+ *
+ * Gathers robots directives to include for the current context, using the
+ * {@see 'wp_robots'} filter. The directives are then sanitized, and the
+ * robots meta tag is output if there is at least one relevant directive.
+ *
+ * @since 5.7.0
+ * @since 5.7.1 No longer prevents specific directives to occur together.
+ */
+function wp_robots() {
+ /**
+ * Filters the directives to be included in the 'robots' meta tag.
+ *
+ * The meta tag will only be included as necessary.
+ *
+ * @since 5.7.0
+ *
+ * @param array $robots Associative array of directives. Every key must be the name of the directive, and the
+ * corresponding value must either be a string to provide as value for the directive or a
+ * boolean `true` if it is a boolean directive, i.e. without a value.
+ */
+ $robots = apply_filters( 'wp_robots', array() );
+
+ $robots_strings = array();
+ foreach ( $robots as $directive => $value ) {
+ if ( is_string( $value ) ) {
+ // If a string value, include it as value for the directive.
+ $robots_strings[] = "{$directive}:{$value}";
+ } elseif ( $value ) {
+ // Otherwise, include the directive if it is truthy.
+ $robots_strings[] = $directive;
+ }
+ }
+
+ if ( empty( $robots_strings ) ) {
+ return;
+ }
+
+ echo "<meta name='robots' content='" . esc_attr( implode( ', ', $robots_strings ) ) . "' />\n";
+}
+
+/**
+ * Adds `noindex` to the robots meta tag if required by the site configuration.
+ *
+ * If a blog is marked as not being public then noindex will be output to
+ * tell web robots not to index the page content. Add this to the
+ * {@see 'wp_robots'} filter.
+ *
+ * Typical usage is as a {@see 'wp_robots'} callback:
+ *
+ * add_filter( 'wp_robots', 'wp_robots_noindex' );
+ *
+ * @since 5.7.0
+ *
+ * @see wp_robots_no_robots()
+ *
+ * @param array $robots Associative array of robots directives.
+ * @return array Filtered robots directives.
+ */
+function wp_robots_noindex( array $robots ) {
+ if ( ! get_option( 'blog_public' ) ) {
+ return wp_robots_no_robots( $robots );
+ }
+
+ return $robots;
+}
+
+/**
+ * Adds `noindex` to the robots meta tag for embeds.
+ *
+ * Typical usage is as a {@see 'wp_robots'} callback:
+ *
+ * add_filter( 'wp_robots', 'wp_robots_noindex_embeds' );
+ *
+ * @since 5.7.0
+ *
+ * @see wp_robots_no_robots()
+ *
+ * @param array $robots Associative array of robots directives.
+ * @return array Filtered robots directives.
+ */
+function wp_robots_noindex_embeds( array $robots ) {
+ if ( is_embed() ) {
+ return wp_robots_no_robots( $robots );
+ }
+
+ return $robots;
+}
+
+/**
+ * Adds `noindex` to the robots meta tag if a search is being performed.
+ *
+ * If a search is being performed then noindex will be output to
+ * tell web robots not to index the page content. Add this to the
+ * {@see 'wp_robots'} filter.
+ *
+ * Typical usage is as a {@see 'wp_robots'} callback:
+ *
+ * add_filter( 'wp_robots', 'wp_robots_noindex_search' );
+ *
+ * @since 5.7.0
+ *
+ * @see wp_robots_no_robots()
+ *
+ * @param array $robots Associative array of robots directives.
+ * @return array Filtered robots directives.
+ */
+function wp_robots_noindex_search( array $robots ) {
+ if ( is_search() ) {
+ return wp_robots_no_robots( $robots );
+ }
+
+ return $robots;
+}
+
+/**
+ * Adds `noindex` to the robots meta tag.
+ *
+ * This directive tells web robots not to index the page content.
+ *
+ * Typical usage is as a {@see 'wp_robots'} callback:
+ *
+ * add_filter( 'wp_robots', 'wp_robots_no_robots' );
+ *
+ * @since 5.7.0
+ *
+ * @param array $robots Associative array of robots directives.
+ * @return array Filtered robots directives.
+ */
+function wp_robots_no_robots( array $robots ) {
+ $robots['noindex'] = true;
+
+ if ( get_option( 'blog_public' ) ) {
+ $robots['follow'] = true;
+ } else {
+ $robots['nofollow'] = true;
+ }
+
+ return $robots;
+}
+
+/**
+ * Adds `noindex` and `noarchive` to the robots meta tag.
+ *
+ * This directive tells web robots not to index or archive the page content and
+ * is recommended to be used for sensitive pages.
+ *
+ * Typical usage is as a {@see 'wp_robots'} callback:
+ *
+ * add_filter( 'wp_robots', 'wp_robots_sensitive_page' );
+ *
+ * @since 5.7.0
+ *
+ * @param array $robots Associative array of robots directives.
+ * @return array Filtered robots directives.
+ */
+function wp_robots_sensitive_page( array $robots ) {
+ $robots['noindex'] = true;
+ $robots['noarchive'] = true;
+ return $robots;
+}
+
+/**
+ * Adds `max-image-preview:large` to the robots meta tag.
+ *
+ * This directive tells web robots that large image previews are allowed to be
+ * displayed, e.g. in search engines, unless the blog is marked as not being public.
+ *
+ * Typical usage is as a {@see 'wp_robots'} callback:
+ *
+ * add_filter( 'wp_robots', 'wp_robots_max_image_preview_large' );
+ *
+ * @since 5.7.0
+ *
+ * @param array $robots Associative array of robots directives.
+ * @return array Filtered robots directives.
+ */
+function wp_robots_max_image_preview_large( array $robots ) {
+ if ( get_option( 'blog_public' ) ) {
+ $robots['max-image-preview'] = 'large';
+ }
+ return $robots;
+}