• 04-06-2021, 20:41:32
    #1
            // Add WordPress WordCount Column
    add_filter('manage_posts_columns', 'crunchify_add_wordcount_column');
    function crunchify_add_wordcount_column($crunchify_columns) {
        $crunchify_columns['crunchify_wordcount'] = 'Word Count';
        return $crunchify_columns;
    }
     
    // Show WordCount in Admin Panel
    add_action('manage_posts_custom_column',  'crunchify_show_wordcount');
    function crunchify_show_wordcount($name)
    {
        global $post;
        switch ($name)
        {
            case 'crunchify_wordcount':
                $crunchify_wordcount = crunchify_post_wordcount($post->ID);
                echo $crunchify_wordcount;
        }
    }
     
    // Get individual post word count
    function crunchify_post_wordcount($post_id) {
        $crunchify_post_content = get_post_field( 'post_content', $post_id );
        $crunchify_final_wordcount = str_word_count( strip_tags( strip_shortcodes($crunchify_post_content) ) );
        return $crunchify_final_wordcount;
    }

    Wordpress'de yazılar sayfasına bu kod parçası sayesinde Word Count sütunu ekledim ama kelime sayısana göre sıralamak istiyorum, bu şekilde bir kod buldum 1500 tane yazı var hepsini teker teker incelemek iş yükü bindereceği için ve başkalarınında bu sorunu yaşayacağını düşünerek bu php koduna uzman kişilerden destek bekliyorum.
  • 04-06-2021, 20:58:41
    #2
    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 );
        }
    }