در این مقاله از دستیار وردپرس به معرفی افزونه Widget Logic می پردازیم.
این افزونه به هر ویجت یک فیلد کنترل اضافی به نام “منطق ویجت” می دهد که به شما اجازه می دهد صفحاتی را که ویجت ظاهر می شود کنترل کنید.
فیلد متن به شما اجازه می دهد از برچسب های شرطی WP یا هر کدام از کلیدهای PHP استفاده کنید.
لطفا توجه داشته باشید منطق ویجت به طور مستقیم EVAL’d است.
هر شخصی که دسترسی به ویرایش ویجت دارد، حق اضافه کردن هر کد را دارد، از جمله توابع مخرب و احتمالا مخرب.
یک فیلتر اختیاری ‘widget_logic_eval_override’ وجود دارد که شما می توانید آن را با استفاده از کد خود در صورت نیاز، دور زدن EVAL استفاده کنید.
همچنین گزینه ای برای اضافه کردن فیلتر ویدجت ‘widget_content’ وجود دارد – این به شما اجازه می دهد که هر HTML ویجت را مطابق با موضوع خود بدون ویرایش پلاگین ها و کد اصلی بچرخانید.
نوشتن کد منطق
متن موجود در فیلد منطق عددی می تواند یک کد کامل PHP باشد و در صورتی که ویجت ظاهر می شود، باید “true” را بازگرداند.
اگر “بازگشت” در متن وجود نداشته باشد، “بازگشت” ضمنی به آغاز می شود و ‘؛’ در پایان اضافه شده است. (این فقط برای ایجاد اظهارات واحد مانند is_home () راحت تر است.)
اصول اولیه
از برچسبهای شرطی WP خود استفاده کنید . شما می توانید کد را با استفاده از:
◾! (NOT) برای معکوس کردن منطق، به عنوان مثال !is_home() TRUE زمانی که این صفحه اصلی نیست.
◾ || (OR) برای ترکیب شرایط. X OR Y TRUE است، در صورتی که X درست باشد یا Y درست باشد.
◾ && (AND) برای ایجاد شرایط خاص تر . X AND Y درست است هر دو X درست باشد و Y درست است.
مثال ها
◾ is_home() – فقط صفحه اصلی وبلاگ
◾ !is_page(‘about’) – در همه جا بجز این صفحه WP خاص
◾ !is_user_logged_in() – نمایش داده می شود زمانی که یک کاربر وارد نشده است
◾ is_category(array(5,9,10,11)) – صفحه دسته یکی از شناسه های دسته بندی شده
◾ is_single() && in_category(‘baked-goods’) – تک پست که در رده با این ساندویچ است
◾ current_user_can(‘level_10’) – ویجت تنها مدیر
◾ strpos($_SERVER[‘HTTP_REFERER’], “google.com”)!=false – ویجت برای نشان دادن زمانی که با کلیک از طریق جستجوی گوگل
◾ is_category() && in_array($cat, get_term_children( 5, ‘category’)) – صفحه رده که is_category() && in_array($cat, get_term_children( 5, ‘category’)) از رده 5 است
◾ global $post; return (in_array(77,get_post_ancestors($post))); – صفحه WP که یک کودک از صفحه 77 است
◾ global $post; return (is_page(‘home’) || ($post->post_parent==”13″)); – صفحه اصلی یا صفحه ای که کودک از صفحه 13 است
توجه داشته باشید که اضافی ‘؛’ در انتها یک “بازگشت” صریح وجود دارد.
فیلتر “widget_logic_eval_override”
قبل از اینکه کد ویجت منطق برای هر ویجت ارزیابی شود، متن کد منطق عناصر از طریق این فیلتر منتقل می شود. اگر فیلتر نتایج BOOLEAN را باز کند، به جای آن برای تعیین اینکه آیا ویجت قابل مشاهده است، استفاده می شود. بازگشت TRUE برای قابل مشاهده است
فیلتر “widget_content”
هنگامی که این گزینه فعال است (علامت گزینه گزینه در پای صفحه ویجت را تیک بزنید) می توانید متن نمایش داده شده توسط هر ویجت را از فایل functions.php تم خود تغییر دهید. قلاب را به فیلتر با:
add_filter(‘widget_content’, ‘your_filter_function’, [priority], 2);
جایی که [priority] پارامتر اولویت اختیاری برای تابع add_filter است. تابع فیلتر می تواند یک پارامتر دوم (اگر شما آخرین پارامتر “2” را نشان می دهید) مانند این:
function your_filter_function($content=”, $widget_id=”)
پارامتر دوم ($ widget_id) می تواند برای هدفگیری ویدجت خاص مورد استفاده قرار گیرد.
یک تابع فیلد وردپرس به عنوان ورودی داده های غیر تغییر داده شده را به دست می آورد و داده های اصلاح شده را باز می گرداند که بدین معنی است که فیلترهای widget_content با خروجی HTML خام توسط ویجت ارائه می شوند و شما بعدا آزادانه می توانید چیزی دیگری را به طور کامل بازگردانید:
فیلترهای نمونه
add_filter(‘widget_content’, ‘basic_widget_content_filter’); function basic_widget_content_filter($content=”) { return $content.”
THIS APPEARS AFTER EVERY WIDGET
“; }
من انگیزه گرفتم تا این فیلتر را به منظور تبدیل تمام عناصر ویجت با پلاگین ttftitles عالی مانند این:
add_filter(‘widget_content’, ‘ttftext_widget_title’); function ttftext_widget_title($content=”) { preg_match(“/<h2[^>]*>([^<]+)/”,$content, $matches); $heading=$matches[1]; $insert_img=the_ttftext( $heading, false ); $content=preg_replace(“/(<h2[^>]*>)[^<]+/”,”$1$insert_img”,$content,1); return $content; }
مردم اغلب به دنبال راه هایی برای دادن سبک های متناوب ویجت هستند. این فیلتر ویجت widget_style_a / widget_style_b را به متن class = “widget …” وارد می کند که معمولا در تعریف اصلی ویجت یافت می شود:
add_filter(‘widget_content’, ‘make_alternating_widget_styles’); function make_alternating_widget_styles($content=”) { global $wl_make_alt_ws; $wl_make_alt_ws=($wl_make_alt_ws==”style_a”)?”style_b”:”style_a”; return preg_replace(‘/(class=”widget )/’, “$1 widget_${wl_make_alt_ws} “, $content); }
نصب و راه اندازی
فایل را از دستیار وردپرس دانلود نمایید.
1. ارسال widget-logic.php به /wp-content/plugins/ directory
2. افزونه را از طریق منوی Plugins در وردپرس فعال کنید
3. پیکربندی و گزینه ها در رابط کاربری ویجت معمول هستند.
پیکربندی
به غیر از منطق ویدجت های شما، سه گزینه اضافه شده به پای صفحه ویجت وجود دارد (تصاویر را ببینید).
◾ فیلتر ‘widget_content’ را اضافه کنید – این به شما اجازه می دهد که متن خروجی را در تمام ویدجت ها تغییر دهید. شما باید بدانید چگونه یک فیلتر WP را بنویسید، هرچند برخی از اصول در سایر یادداشت ها پوشیده شده است.
◾ استفاده از ‘wp_reset_query’ fix – بسیاری از ویژگی های WP، و همچنین بسیاری از تم ها و پلاگین های خارج وجود دارد، می تواند با برچسب های شرطی ظاهر شود، به طوری که is_home در صفحه اصلی درست نیست. این اغلب می تواند با یک بیانیه سریع wp_reset_query () درست قبل از اینکه ویجت ها نامیده می شوند ثابت شود و این گزینه این را برای شما به جای استفاده از کد ویرایش می کند
◾ منطق بار – این گزینه به شما اجازه می دهد که نقطه را در صفحه بار که در آن منطق ویجت خود را اگر ابتدا چک شده است. پیش از v.50 این زمانی بود که ماشه wp_head اتفاق افتاد، یعنی هنگام ایجاد بلوک HEAD HTML. بسیاری از تم ها با wp_head تماس نگرفتند، که یک مشکل بود. از v.50 اتفاق می افتد، به طور پیش فرض، در اسرع وقت، که به محض بارگیری افزونه. شما هم اکنون می توانید این نقاط دیرپا (به ترتیب زمانی):
◾ پس از بارگذاری موضوع (trigger after_setup_theme)
◾ وقتی تمام پی اچ پی بارگذاری شد (ماشه wp_loaded)
◾ پس از تعیین متغیرهای پرس و جو (parse_query) – این به طور پیش فرض است
◾ در طول صفحه هدر (ماشه wp_head)
منطق شما بستگی به توابع تعریف شده دارد، به عنوان مثال در فایل theme.php باشد، ممکن است نیاز به بارگیری تاخیر داشته باشد.
در مقابل شما ممکن است بار اولیه را بخواهید تا تعداد ویجت به طور صحیح محاسبه شود، مثلا برای نشان دادن یک لایه یا محتوای دیگر، زمانی که یک نوار کناری هیچ ویدجت نداشته باشد.
◾ نتیجه منطقی ویجت را ندهید – از v .58 کد منطقی ویجت تنها باید یک بار اجرا شود، اما ممکن است نتایج برخی از تم های غیر منتظره را ایجاد کند، بنابراین این گزینه در اینجا برای خاموش کردن این رفتار است. (حقیقت / نادرست کد هر بار که فیلتر sidebars_widgets نامیده می شود، ارزیابی می شود.
تصاویر :



