آشنایی با هوک، اکشن و فیلتر در وردپرس

استفاده از Action & Filter Hooks نمای کلی قلاب ها قلاب‌های وردپرس در دو نوع هستند، اکشن هوک و قلاب فیلتر: اکشن‌ها به شما امکان می‌دهند تا عملکردهای خاصی را در اجرای موضوع فراخوانی کنید و فیلترها کد خاصی را تغییر می‌دهند (یا کاملاً بازنویسی می‌کنند) که به یک تابع ارسال شده یا به صفحه مرورگر ارسال می‌شود. Themify مجموعه‌ای از اقدامات و فیلترهای خاص و اضافی را پیاده‌سازی می‌کند تا بتوانید کد خود را به موضوع وصل کنید، چه اضافه کردن کد HTML جدید یا فیلتر کردن یک متن خاص. به عنوان مثال، با قلاب‌های عمل می‌توانید تکه‌ای از کد HTML را در تمام صفحات بدون نیاز به لمس الگوی header.php، به عنوان مثال، برای نشان دادن یک تصویر، به هدر اضافه کنید. یک مثال پیچیده تر نشان دادن یک تصویر در سرصفحه صفحات دسته بندی است که برای هر دسته یک تصویر متفاوت دارد. از طرف دیگر، با قلاب های فیلتر می توانیم قالب تاریخ نشان داده شده در پست های خود را تغییر دهیم. به روز رسانی: ما اکنون محتوای Hook را داریم که به شما امکان می دهد قلاب ها را از طریق Themify Panel بدون نوشتن توابع سفارشی PHP اضافه کنید. اضافه کردن قلاب برای افزودن فیلتر یا قلاب های اکشن: یک فایل custom-functions.php در پوشه تم ایجاد کنید اکنون می توانید اکشن یا فیلتر را روی قلاب ها اعمال کنید (نمونه استفاده های زیر را برای مثال بخوانید) نمونه استفاده از قلاب نمونه کدهای زیر نشان می دهد که با قلاب ها چه کاری می توانید انجام دهید. استفاده ساده یک استفاده رایج از قلاب اکشن اضافه کردن محتوای سفارشی به صفحه ارائه شده در مرورگر است. این کد نمونه با استفاده از hook themify_header_end یک تگ div متنی را به هدر اضافه می کند:<?php function theme_header_end() { echo '<div class=&quotcustom-text&quot>Custom Text</div>'; }; add_action('themify_header_end', 'theme_header_end'); ?> برای افزودن محتوا در جای دیگری، کافیست نام قلاب اکشن را که می خواهید به عنوان نقطه درج استفاده کنید، مشخص کنید. به عنوان مثال می توانید محتوا را در انتهای پست درج کنید.<?php function theme_post_end() { echo '<div class=&quotcustom-text&quot>Custom Text at the end of the post</div>'; }; add_action('themify_post_end', 'theme_post_end'); ?>برچسب های مشروطدر داخل تابعی که توسط اکشن هوک فراخوانی می شود، می توانید از تگ های شرطی وردپرس برای نمایش مطالب مختلف در صفحات مختلف استفاده کنید.<?php function my_text_before_content() { if(is_home()) { echo 'Text for home page.'; } elseif(is_page()){ if (is_page(7)) { echo 'Text for page with ID 7.'; } else { echo 'Text for regular page.'; } } elseif(is_single()){ echo 'Text for single post.'; } elseif (is_category()) { echo 'Text for category archive page.'; } }; add_action('themify_content_before', 'my_text_before_content'); ?>بنر هدر بیایید نمونه های بالا را به یک کاربرد عملی ببریم. به عنوان مثال، می توانید از آن برای نمایش تصویر بنر هدر بدون نیاز به ویرایش قالب header.php استفاده کنید.<?php function add_banner_header_end(){ echo '<div class=&quotheader-banner&quot><img alt=&quotheader banner&quot src=&quothttp://example.com/url/to/image.jpg&quot /></div>'; } add_action('themify_header_end', 'add_banner_header_end'); ?>بنر هدر مشروطبرای نمایش بنر هدر مختلف در صفحات مختلف:<?php function add_banner_header_end(){ if(is_home()) echo '<div class=&quotheader-banner&quot?><img alt=&quotheader banner&quot src=&quothttp://example.com/url/to/image-home.jpg&quot /?></div?>'; elseif(is_page(7)) echo '<div class=&quotheader-banner&quot?><img alt=&quotheader banner&quot src=&quothttp://example.com/url/to/image-page-id-7.jpg&quot /?></div?>'; elseif(is_page()) echo '<div class=&quotheader-banner&quot?><img alt=&quotheader banner&quot src=&quothttp://example.com/url/to/image-page.jpg&quot /?></div?>'; elseif(is_single()) echo '<div class=&quotheader-banner&quot?><img alt=&quotheader banner&quot src=&quothttp://example.com/url/to/image-single.jpg&quot /?></div?>'; elseif(is_category()) echo '<div class=&quotheader-banner&quot?><img alt=&quotheader banner&quot src=&quothttp://example.com/url/to/image-category.jpg&quot /?></div?>'; } add_action('themify_header_end', 'add_banner_header_end'); ?>پیام خوش آمد گویی را اضافه کنید برای افزودن پیام خوشامدگویی در صفحه اصلی:<?php function add_welcome_message(){ if(is_home()) { echo '<div class=&quotwelcome-text&quot>Welcome message</div>'; } }; add_action('themify_content_before', 'add_welcome_message'); ?>سپس باید این را به Themify > Styling > Custom CSS اضافه کنید تا به کلاس .welcome-message استایل دهید: .welcome-message { padding: 15px; font-size: 120%; text-align: center; }کدهای کوتاه را اجرا کنیدهمچنین می توانید کدهای کوتاه را در هوک ها اجرا کنید. مثال زیر کد کوتاه [[post_slider]] را درست بعد از ناحیه سرصفحه فقط در صفحه اصلی اضافه می کند.<?php function show_post_slider_layout_before() { echo do_shortcode('[post_slider limit=&quot8&quot visible=&quot4&quot]'); }; add_action('themify_layout_before', 'show_post_slider_layout_before'); ?> ویجت هدر را اضافه کنید برای اضافه کردن یک منطقه ویجت سفارشی، ابتدا باید آن را به عنوان نوار کناری ثبت کنید: <?php function theme_register_sidebar(){ register_sidebar(array( 'name' => 'Custom Header Widget', 'id' => 'custom-header-widget', 'before_widget' => ' <div class=&quotwidget %2$s&quot id=&quot%1$s&quot>', 'after_widget' => '</div>', 'before_title' => '<strong class=&quotwidgettitle&quot>', 'after_title' => '</strong>', )); } add_action( 'widgets_init', 'theme_register_sidebar' ); ?>اکنون این کد را برای نمایش ویجت هدر اضافه کنید:<?php function new_header_widget(){ echo '<div class=&quotheader-widget&quot>'; if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('custom-header-widget') ) ; echo '</div>'; } add_action('themify_header_end', 'new_header_widget'); ?>تابع PHP را اجرا کنید برخی از افزونه ها از شما می خواهند که یک فراخوانی تابع PHP را به فایل های قالب اضافه کنید. Breadcrumb NavXT یکی از آنهاست. شما می توانید از قلاب ها برای اضافه کردن تابع PHP بدون نیاز به ویرایش الگو استفاده کنید. نمونه زیر تابع breadcrumb را در قلاب post_start صفحه تک پست اضافه می کند. <?php function breadcrumbs_on_post_start(){ if(function_exists('bcn_display')){ echo '<div class=&quotbreadcrumbs&quot>'; bcn_display(); echo '</div>'; } } add_action('themify_post_start', 'breadcrumbs_on_post_start'); ?>علاوه بر این، اگر می‌خواهید این را فقط در نماهای واحد فعال کنید، از آن استفاده می‌کنید به فراخوانی اضافی تابع ()is_single توجه کنید.<?php function breadcrumbs_on_post_start(){ if( function_exists('bcn_display') && is_single()){ echo '<div class=&quotbreadcrumbs&quot>'; bcn_display(); echo '</div>'; } } add_action('themify_post_start', 'breadcrumbs_on_post_start'); ?>استفاده از قلاب فیلتر به عنوان مثال، ما قالب تاریخ نشان داده شده در پست را تغییر می دهیم.<?php function custom_date_format($date){ return 'Y/d/m'; } add_filter('themify_loop_date', 'custom_date_format'); ?> در اینجا چند تفاوت را در مقایسه با قلاب های اکشن مشاهده خواهید کرد. به عنوان مثال، فیلترها همیشه حداقل یک متغیر را دریافت می کنند، و شما می توانید محتوای این متغیر را تغییر دهید، مانند مثال بالا، آن را با بازگرداندن چیز دیگری رد کنید. بیایید نمونه‌ای را ببینیم که در آن متغیر نیز به همراه پارامتر اضافی برگردانده می‌شود و ترتیب پست‌های نشان‌داده‌شده در صفحه دسته‌بندی Query را معکوس می‌کند:<?php function custom_post_order($query){ return $query . '&order=ASC'; } add_filter('themify_query_posts_page_args', 'custom_post_order'); ?> پرس و جو از صفحه پست ها بر اساس برچسب ها برای ایجاد یک صفحه Query Posts که پست‌ها را بر اساس برچسب‌ها به جای دسته‌بندی‌هایشان جستجو می‌کند، این مراحل را دنبال کنید: 1. صفحه را ویرایش یا ایجاد کنید تا از آن به عنوان پست پرس و جو استفاده کنید 2. Query Posts را فعال کنید تا یک دسته را برای دسته Query انتخاب کنید. این لازم است در غیر این صورت صفحه یک صفحه محتوای معمولی است. در حالی که هنوز در صفحه ویرایش هستید، نوار آدرس مرورگر را بررسی کنید، به دنبال چیزی مانند post.php?post=555 بگردید و عدد را یادداشت کنید، مثلاً 555. 3. به پست‌ها > برچسب‌ها بروید و تگ‌هایی را که استفاده می‌کنید، به عنوان مثال Sometag، یادداشت کنید. 4. از کد زیر در فایل custom-functions.php استفاده کنید.<?php /** * Check if it's a certain page and if so, query by tag instead of by category. * * @param string $query Parameters for the query. * @return string */ function custom_themify_query_posts_page_args( $query ) { // Check that we're in the page whose ID is, for example, 555, the number we took note before. if ( is_page( 555 ) ) { // Remove the categories to query. $query = str_replace( '/cat=(.*?)&/', '', $query ); // Add the tag slug that you took note before. $query = 'tag=sometag&' . $query; } // Return the query to be performed. return $query; } add_filter('themify_query_posts_page_args', 'custom_themify_query_posts_page_args'); ?> مشکل رایج: صفحه خالی می توانید چندین بلوک کد PHP را در فایل custom-functions.php بنویسید مانند:<?php // function 1 ?> <?php // function 2 ?>