در سایت‌های وردپرسی زمانی که به بخش Posts یا همه نوشته‌ها مراجعه می‌کنید، ستونی برای نمایش تعداد کلمات مطالب وجود ندارد. اضافه کردن چنین ستونی با استفاده از برخی پلاگین‌ها بسیار ساده است اما بدون اضافه کردن افزونه‌ها هم می‌توانید این کار را انجام بدهید. کافی است تابعی در functions.php قالب فعال اضافه کنید و آن را فراخوانی کنید.

در ادامه به روش اضافه کردن ستون نمایش تعداد کلمات مطالب در بخش لیست مطالب WordPress می‌پردازیم. با ما باشید.

شمارش کلمات مطالب در زمان ذخیره‌سازی و در حالت کلی

شمارش کلمات یک مطلب در زمان انتشار یا آپدیت کردن امکان‌پذیر است. برای این کار می‌توانید از تابع زیر استفاده کنید که در آن ابتدا شورت‌کدها از محتویات پست حذف شده و سپس تگ‌های HTML آن کنار گذاشته می‌شود و در نهایت با استفاده از تابع str_word_count وردپرس، تعداد کلمات شمارش می‌شود.

تمام مراحل فوق با استفاده از add_action در مرحله‌ی ذخیره کردن پست‌ها صورت می‌گیرد و طبعاً در سایت‌هایی که تعداد پست‌ها بسیار زیاد است، این روش بهینه‌تر است چرا که پردازش زیادی نیاز ندارد اما در چنین سایتی می‌بایست پست‌ها مجدد بروزرسانی شوند که کار وقت‌گیری است.

و روش دوم این است که تابعی جدید تعریف کنید که در مرحله‌ی حذف و اضافه کردن ستون‌های لیست مطالب، فراخوانی می‌شود. به عنوان مثال برای افزودن ستونی به اسم تعداد کلمه، می‌توانید از add_filter و تابع دلخواهی استفاده کنید که ستون alireza_post_content_length که عنوان آن تعداد کلمه است را اضافه می‌کند:

فراموش نکنید که این ستون هم مثل دیگر ستون‌های لیست مطالب، قابلیت فعالسازی و غیرفعالسازی دارد و البته در آخرین جایگاه اضافه می‌شود:

پر کردن ستون جدید مشخصات پست‌ها در وردپرس

برای پر کردن ستون جدید در بخش مدیریت مطالب وردپرس، از فیلتر manage_post_posts_columns استفاده می‌شود. به عنوان مثال اگر بخواهید ستونی به اسم تعداد کلمه که قبلاً ایجاد کرده‌اید را پر کنید، می‌بایست از add_action استفاده کنید و به اکشن manage_post_posts_custom_column،  تابع جدیدی اضافه کنید که کار آن شمارش کلمات است. این تابع نام ستون و شناسه‌ی پست را دریافت می‌کند و خروجی آن تعداد کلمات است.

به عنوان مثال برای زبان انگلیسی می‌توانید محتویات مطلب را با دادن متغیر شناسه‌ی پست یا $post_id به تابع get_post دریافت کنید و سپس تگ‌های HTML را با دستور strip_tags حذف کنید و در نهایت از دستور str_word_count برای شمارش کلمات موجود در رشته یا string استفاده کنید. در این حالت استرینگ ما، جملات بدنه‌ی مطلب بدون تگ‌های HTML است:

شمارش کلمات فارسی در مطالب فارسی وردپرس

اگر از دستور str_word_count برای شمارش کلمات استفاده کنید و وب‌سایت شما فارسی باشد و به عبارت دیگر نوع اینکدینگ کاراکترها، UTF-8 باشد، اعداد به دست آمده کاملاً اشتباه و بسیار کم خواهد بود!

برای حل کردن این مشکل، بهتر است تابع ساده‌ی دیگری تعریف کنید. نام این تابع را mb_str_word_count می‌گذاریم و در آن فاصله یا اسپیس را به عنوان کاراکتر جداکننده‌ی استرینگ با دستور mb_split تعریف می‌کنیم. به این ترتیب رشته‌ی ارسال شده به این تابع، به آرایه‌ای از کلمات تبدیل می‌شود. خروجی این تابع، تعداد عناصر آرایه‌ی words است که با دستور count محاسبه می‌شود.

و حال دستور str_word_count که قبلاً استفاده شده را با تابع mb_str_word_count جایگزین می‌کنیم:

اکنون شمارش کلمات صحیح به نظر می‌رسد و تفاوتی که در شمارش پیش‌فرض وردپرس با شمارش توسط تابع تعریف شده وجود دارد، به کاراکترهای خاصی مثل Enter زدن مربوط می‌شود.

اضافه کردن قابلیت مرتب‌سازی ستون‌ها در لیست مطالب وردپرس

ستون جدید شمارش تعداد کلمات قابلیت مرتب‌سازی به صورت صعودی یا نزولی ندارد. برای افزودن این ویژگی مفید و کاربردی، از فیلتر دیگری برای فراخوانی تابع مرتب‌سازی استفاده می‌کنیم.

و برای مشخص کردن شیوه‌ی مرتب‌سازی، از فیلتر post_orderby و تابع جدید استفاده می‌کنیم:

در نهایت برای اضافه کردن ستون تعداد کلمه به لیست مطالب وردپرس با قابلیت مرتب‌سازی صعودی یا نزولی، کافی است کد زیر را در functions.php قالب قرار دهید: