View file File name : premium-stale-cornerstone-content-filter.php Content :<?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Registers the filter for filtering stale cornerstone content. */ class WPSEO_Premium_Stale_Cornerstone_Content_Filter extends WPSEO_Abstract_Post_Filter { /** * Returns the query value this filter uses. * * @return string The query value this filter uses. */ public function get_query_val() { return 'stale-cornerstone-content'; } /** * Modifies the query based on the seo_filter variable in $_GET. * * @param string $where The where statement. * * @return string The modified query. */ public function filter_posts( $where ) { if ( ! $this->is_filter_active() ) { return $where; } global $wpdb; $where .= sprintf( ' AND ' . $wpdb->posts . '.ID IN( SELECT post_id FROM ' . $wpdb->postmeta . ' WHERE meta_key = "%s" AND meta_value = "1" ) AND ' . $wpdb->posts . '.post_modified < "%s" ', WPSEO_Meta::$meta_prefix . 'is_cornerstone', $this->date_threshold() ); return $where; } /** * Returns the label for this filter. * * @return string The label for this filter. */ protected function get_label() { return __( 'Stale cornerstone content', 'wordpress-seo-premium' ); } /** * Returns a text explaining this filter. * * @return string|null The explanation for this filter. */ protected function get_explanation() { $post_type_object = get_post_type_object( $this->get_current_post_type() ); if ( $post_type_object === null ) { return null; } return sprintf( /* translators: %1$s expands to dynamic post type label, %2$s expands anchor to blog post about cornerstone content, %3$s expands to </a> */ __( 'Stale cornerstone content refers to cornerstone content that hasn’t been updated in the last 6 months. Make sure to keep these %1$s up-to-date. %2$sLearn more about cornerstone content%3$s.', 'wordpress-seo-premium' ), strtolower( $post_type_object->labels->name ), '<a href="' . WPSEO_Shortlinker::get( 'https://yoa.st/1i9' ) . '" target="_blank">', '</a>' ); } /** * Returns the total amount of stale cornerstone content. * * @return int The total amount of stale cornerstone content. */ protected function get_post_total() { global $wpdb; $post_type = $this->get_current_post_type(); $cache_key = 'stale_cornerstone_count_' . $post_type; $count = wp_cache_get( $cache_key, 'stale_cornerstone_counts' ); if ( $count === false ) { $count = (int) $wpdb->get_var( $wpdb->prepare( ' SELECT COUNT( 1 ) FROM ' . $wpdb->postmeta . ' WHERE post_id IN( SELECT ID FROM ' . $wpdb->posts . ' WHERE post_type = %s && post_modified < %s ) && meta_value = "1" AND meta_key = %s ', $post_type, $this->date_threshold(), WPSEO_Meta::$meta_prefix . 'is_cornerstone' ) ); wp_cache_set( $cache_key, $count, 'stale_cornerstone_counts', DAY_IN_SECONDS ); } return $count; } /** * Returns the post types to which this filter should be added. * * @return array<string> The post types to which this filter should be added. */ protected function get_post_types() { // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Using YoastSEO hook. $post_types = apply_filters( 'wpseo_cornerstone_post_types', parent::get_post_types() ); if ( ! is_array( $post_types ) ) { return []; } return $post_types; } /** * Returns the date 6 months ago. * * @return string The formatted date. */ protected function date_threshold() { return gmdate( 'Y-m-d', strtotime( '-6months' ) ); } }