Rank Math bu şekilde yapmış bizde kelime sayısı için bu fonksiyonları kullanıp yapabilir miyiz?


/wp-content/plugins/seo-by-rank-math/includes/admin/class-post-filters.php

<?php
/**
 * The admin post filters functionality.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use WP_Meta_Query;
use RankMath\Helper;
use RankMath\Runner;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Security;
use MyThemeShop\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Post_Filters class.
 */
class Post_Filters implements Runner {

    use Hooker;

    /**
     * Register hooks.
     */
    public function hooks() {
        $this->action( 'admin_init', 'init' );
    }

    /**
     * Intialize.
     */
    public function init() {
        if ( ! Helper::has_cap( 'general' ) ) {
            return;
        }

        $this->filter( 'pre_get_posts', 'posts_by_seo_filters' );
        $this->filter( 'parse_query', 'posts_by_focus_keywords' );
        $this->filter( 'restrict_manage_posts', 'add_seo_filters', 11 );

        foreach ( Helper::get_allowed_post_types() as $post_type ) {
            $this->filter( "views_edit-$post_type", 'add_pillar_content_filter_link' );
        }
    }

    /**
     * Filter posts in admin by Rank Math's Filter value.
     *
     * @param \WP_Query $query The wp_query instance.
     */
    public function posts_by_seo_filters( $query ) {
        if ( ! $this->can_seo_filters() ) {
            return;
        }

        if ( 'rank_math_seo_score' === $query->get( 'orderby' ) ) {
            $query->set( 'orderby', 'meta_value' );
            $query->set( 'meta_key', 'rank_math_seo_score' );
            $query->set( 'meta_type', 'numeric' );
        }

        if ( empty( $_GET['pillar_content'] ) && empty( $_GET['seo-filter'] ) ) {
            return;
        }

        $meta_query = [];

        // Check for Pillar Content filter.
        if ( ! empty( $_GET['pillar_content'] ) ) {
            $meta_query[] = [
                'key'   => 'rank_math_pillar_content',
                'value' => 'on',
            ];
        }

        $this->set_seo_filters( $meta_query );
        $query->set( 'meta_query', $meta_query );
    }

    /**
     * Filter post in admin by Pillar Content.
     *
     * @param \WP_Query $query The wp_query instance.
     */
    public function posts_by_focus_keywords( $query ) {
        if ( ! $this->can_fk_filter() ) {
            return;
        }

        if ( $ids = $this->posts_had_reviews() ) { // phpcs:ignore
            $query->set( 'post_type', 'any' );
            $query->set( 'post__in', $ids );
            return;
        }

        $query->set( 'post_status', 'publish' );
        if ( $ids = $this->has_fk_in_title() ) { // phpcs:ignore
            $query->set( 'post__in', $ids );
            return;
        }

        $focus_keyword = Param::get( 'focus_keyword', '' );
        if ( 1 === absint( $focus_keyword ) ) {
            $query->set(
                'meta_query',
                [
                    'relation' => 'AND',
                    [
                        'key'     => 'rank_math_focus_keyword',
                        'compare' => 'NOT EXISTS',
                    ],
                    [
                        'relation' => 'OR',
                        [
                            'key'     => 'rank_math_robots',
                            'value'   => 'noindex',
                            'compare' => 'NOT LIKE',
                        ],
                        [
                            'key'     => 'rank_math_robots',
                            'compare' => 'NOT EXISTS',
                        ],
                    ],
                ]
            );
            return;
        }

        $query->set( 'post_type', 'any' );
        $query->set(
            'meta_query',
            [
                [
                    'relation' => 'OR',
                    [
                        'key'     => 'rank_math_focus_keyword',
                        'value'   => $focus_keyword . ',',
                        'compare' => 'LIKE',
                    ],
                    [
                        'key'     => 'rank_math_focus_keyword',
                        'value'   => $focus_keyword,
                        'compare' => 'LIKE',
                    ],
                ],
            ]
        );
    }

    /**
     * Add SEO filters.
     */
    public function add_seo_filters() {
        global $post_type;

        if ( 'attachment' === $post_type || ! in_array( $post_type, Helper::get_allowed_post_types(), true ) ) {
            return;
        }

        $options = [
            ''          => esc_html__( 'Rank Math', 'rank-math' ),
            'great-seo' => esc_html__( 'SEO Score: Good', 'rank-math' ),
            'good-seo'  => esc_html__( 'SEO Score: Ok', 'rank-math' ),
            'bad-seo'   => esc_html__( 'SEO Score: Bad', 'rank-math' ),
            'empty-fk'  => esc_html__( 'Focus Keyword Not Set', 'rank-math' ),
            'noindexed' => esc_html__( 'Articles noindexed', 'rank-math' ),
        ];

        $options = $this->do_filter( 'manage_posts/seo_filter_options', $options, $post_type );
        $selected = Param::get( 'seo-filter' );
        ?>
        <select name="seo-filter" id="rank-math-seo-filter">
            <?php foreach ( $options as $val => $option ) : ?>
                <option value="<?php echo esc_attr( $val ); ?>" <?php selected( $selected, $val, true ); ?>><?php echo esc_html( $option ); ?></option>
            <?php endforeach; ?>
        </select>
        <?php
    }

    /**
     * Add view to filter list for Pillar Content.
     *
     * @param array $views An array of available list table views.
     */
    public function add_pillar_content_filter_link( $views ) {
        global $typenow;

        $current = empty( $_GET['pillar_content'] ) ? '' : ' class="current" aria-current="page"';
        $pillars = get_posts(
            [
                'post_type'      => $typenow,
                'fields'         => 'ids',
                'posts_per_page' => -1,
                'meta_key'       => 'rank_math_pillar_content',
                'meta_value'     => 'on',
            ]
        );

        $views['pillar_content'] = sprintf(
            '<a href="%1$s"%2$s>%3$s <span class="count">(%4$s)</span></a>',
            Security::add_query_arg(
                [
                    'post_type'      => $typenow,
                    'pillar_content' => 1,
                ]
            ),
            $current,
            esc_html__( 'Pillar Content', 'rank-math' ),
            number_format_i18n( count( $pillars ) )
        );

        return $views;
    }

    /**
     * Can apply SEO filters.
     *
     * @return bool
     */
    private function can_seo_filters() {
        $screen = get_current_screen();
        if ( is_null( $screen ) || ! in_array( $screen->post_type, Helper::get_allowed_post_types(), true ) ) {
            return false;
        }

        return true;
    }

    /**
     * Set SEO filters meta query.
     *
     * @param array $query Meta query.
     */
    private function set_seo_filters( &$query ) {
        $filter = Param::get( 'seo-filter' );
        if ( false === $filter ) {
            return;
        }

        $hash = [
            'empty-fk'  => [
                'key'     => 'rank_math_focus_keyword',
                'compare' => 'NOT EXISTS',
            ],
            'bad-seo'   => [
                'key'     => 'rank_math_seo_score',
                'value'   => 50,
                'compare' => '<=',
                'type'    => 'numeric',
            ],
            'good-seo'  => [
                'key'     => 'rank_math_seo_score',
                'value'   => [ 51, 80 ],
                'compare' => 'BETWEEN',
                'type'    => 'numeric',
            ],
            'great-seo' => [
                'key'     => 'rank_math_seo_score',
                'value'   => 80,
                'compare' => '>',
                'type'    => 'numeric',
            ],
            'noindexed' => [
                'key'     => 'rank_math_robots',
                'value'   => 'noindex',
                'compare' => 'LIKE',
            ],
        ];

        // Extra conditions for "SEO Score" filters.
        $seo_score_filters = [ 'bad-seo', 'good-seo', 'great-seo' ];
        if ( in_array( $filter, $seo_score_filters, true ) ) {
            $query['relation'] = 'AND';
            $query[]           = [
                'key'     => 'rank_math_robots',
                'value'   => 'noindex',
                'compare' => 'NOT LIKE',
            ];
            $query[]           = [
                'key'     => 'rank_math_focus_keyword',
                'compare' => 'EXISTS',
            ];
            $query[]           = [
                'key'     => 'rank_math_focus_keyword',
                'value'   => '',
                'compare' => '!=',
            ];
        }

        if ( isset( $hash[ $filter ] ) ) {
            $query[] = $hash[ $filter ];
        }
    }

    /**
     * Can apply Focus Keyword filter.
     *
     * @return bool
     */
    private function can_fk_filter() {
        $screen = get_current_screen();
        if (
            is_null( $screen ) ||
            'edit' !== $screen->base ||
            (
                ! isset( $_GET['focus_keyword'] ) &&
                ! isset( $_GET['fk_in_title'] ) &&
                ! isset( $_GET['review_posts'] )
            )
        ) {
            return false;
        }

        return true;
    }

    /**
     * Check if Focus Keyword appears in the title.
     *
     * @return bool|array
     */
    private function has_fk_in_title() {
        global $wpdb;

        if ( ! Param::get( 'fk_in_title' ) ) {
            return false;
        }

        $screen     = get_current_screen();
        $meta_query = new WP_Meta_Query(
            [
                [
                    'key'     => 'rank_math_focus_keyword',
                    'compare' => 'EXISTS',
                ],
                [
                    'relation' => 'OR',
                    [
                        'key'     => 'rank_math_robots',
                        'value'   => 'noindex',
                        'compare' => 'NOT LIKE',
                    ],
                    [
                        'key'     => 'rank_math_robots',
                        'compare' => 'NOT EXISTS',
                    ],
                ],
            ]
        );

        $meta_query = $meta_query->get_sql( 'post', $wpdb->posts, 'ID' );
        return $wpdb->get_col( "SELECT {$wpdb->posts}.ID FROM $wpdb->posts {$meta_query['join']} WHERE 1=1 {$meta_query['where']} AND {$wpdb->posts}.post_type = '$screen->post_type' AND ({$wpdb->posts}.post_status = 'publish') AND {$wpdb->posts}.post_title NOT REGEXP REPLACE({$wpdb->postmeta}.meta_value, ',', '|')" ); // phpcs:ignore
    }

    /**
     * Check if any posts had Review schema.
     *
     * @return bool|array
     */
    private function posts_had_reviews() {
        global $wpdb;

        $review_posts = Param::get( 'review_posts' );
        if ( ! $review_posts ) {
            return false;
        }

        return ! get_option( 'rank_math_review_posts_converted', false );
    }
}