قلاب ها (هوک ها) یک مفهوم جالب در توسعه کد هستند. ایده اجرای قلاب تقریباً در همه زبان های اصلی رایج است.
هوک ها به شکل کدهای کوچک هستند که تماس های بین اجزای یک نرم افزار را قطع می کنند و اقدامات مناسب را برای رویدادهای خاص ارائه می دهند. در مورد هوک ووکامرس ، قلاب ها به دلیل سهولتی که در تغییر رفتارهای استاندارد معرفی می کنند، اهمیت ویژه ای پیدا می کنند.
قلاب های ووکامرس دو نوع مجزا دارند، به عنوان مثال.
- Action Hooks برای افزودن کد سفارشی در مکان های انتخاب شده در کد استفاده می شوند.
- Filter Hooks برای دستکاری یک متغیر قبل از بازگشت استفاده می شود.
طرح کلی
- projects_before_main_content
- projects_after_main_content
- projects_sidebar
آرشیوها
- projects_archive_description
حلقه
- projects_before_loop
- projects_before_loop_item
- projects_loop_item
- projects_after_loop_item
- projects_after_loop
پروژه تک
- projects_before_single_project
- projects_before_single_project_summary
- projects_single_project_summary
- projects_after_single_project_summary
- projects_after_single_project
اکشن و فیلترها
- get_product_search_form: فرم جستجوی محصول را نمایش می دهد. ابتدا تلاش خواهد کرد تا فایل product-searchform.php را در فرزند یا والد پیدا کند، سپس آن را بارگیری کند. اگر وجود نداشته باشد، فرم جستجوی پیش فرض نمایش داده می شود.
نوع: فیلتر (filter)
if ( ! function_exists( 'get_product_search_form' ) ) { function get_product_search_form( $echo = true ) { ob_start(); do_action( 'pre_get_product_search_form' ); wc_get_template( 'product-searchform.php' ); $form = apply_filters( 'get_product_search_form', ob_get_clean() ); if ( $echo ) { echo $form; } else { return $form; } } }
- pre_get_product_search_form: کلاس های محصول cat div را دریافت کنید. string|array $class یک یا چند کلاس برای افزودن به لیست کلاس. شی $category شی اختیاری.
نوع: فیلتر (filter)
function wc_get_product_cat_class( $class = '', $category = null ) { $classes = is_array( $class ) ? $class : array_map( 'trim', explode( ' ', $class ) ); $classes[] = 'product-category'; $classes[] = 'product'; $classes[] = wc_get_loop_class(); $classes = apply_filters( 'product_cat_class', $classes, $class, $category ); return array_unique( array_filter( $classes ) ); }
- woocommerce_after_account_downloads: این اقدامی است که برای دانلود محصول ووکامرس پس از احراز هویت حساب کاربری استفاده می شود.
نوع: عمل (Action)
do_action( 'woocommerce_after_account_downloads', $has_downloads );
woocommerce_ajax_variation_threshold : این فیلتری است که برای تغییرات ایجکس استفاده می شود.
نوع: عمل (Action)
function woocommerce_variable_add_to_cart() { global $product; // Enqueue variation scripts wp_enqueue_script( 'wc-add-to-cart-variation' ); // Get Available variations? $get_variations = sizeof( $product->get_children() ) <= apply_filters( 'woocommerce_ajax_variation_threshold', 30, $product ); // Load the template wc_get_template( 'single-product/add-to-cart/variable.php', array( 'available_variations' => $get_variations ? $product->get_available_variations() : false, 'attributes' => $product->get_variation_attributes(), 'selected_attributes' => $product->get_variation_default_attributes() ) ); }
- woocommerce_available_download_count : این فیلتر ووکامرس برای تعداد دانلودهای موجود است.
نوع: فیلتر (filter)
if ( is_numeric($download['downloads_remaining']) ) echo apply_filters( 'woocommerce_available_download_count', '<span class="woocommerce-Count count">' . sprintf( _n( '%s download remaining', '%s downloads remaining', $download['downloads_remaining'], 'woocommerce' ), $download['downloads_remaining'] ) . '</span> ', $download );
- woocommerce_available_download_link : این فیلتر ووکامرس برای نمایش لینک دانلود محصول موجود است.
نوع: فیلتر (filter)
echo apply_filters( 'woocommerce_available_download_link', '<a href="' . esc_url( $download['download_url'] ) . '">' . $download['download_name'] . '</a>', $download );
- woocommerce_available_download_start : این اقدام ووکامرس برای شروع دانلود است.
نوع: عمل (Action)
do_action( 'woocommerce_available_download_start', $download );
- woocommerce_before_account_downloads : اقدام ووکامرس برای دانلود محصول قبل از حساب کاربری با استفاده از boolean.
نوع: عمل (Action)
$has_downloads = (bool) $downloads; do_action( 'woocommerce_before_account_downloads', $has_downloads );
- woocommerce_before_account_orders : تعریف اقدام ووکامرس با استفاده از “ABSPATH”
نوع: عمل (Action)
<?php if ( ! defined( 'ABSPATH' ) ) { exit; } do_action( 'woocommerce_before_account_orders', $has_orders ); ?>
- woocommerce_breadcrumb_defaults: از فیلتر ووکامرس برای پیمایش در breadcrumb استفاده می شود.
نوع: فیلتر (filter)
function woocommerce_breadcrumb( $args = array() ) { $args = wp_parse_args( $args, apply_filters( 'woocommerce_breadcrumb_defaults', array( 'delimiter' => ' / ', 'wrap_before' => '<nav class="woocommerce-breadcrumb" ' . ( is_single() ? 'itemprop="breadcrumb"' : '' ) . '>', 'wrap_after' => '</nav>', 'before' => '', 'after' => '', 'home' => _x( 'Home', 'breadcrumb', 'woocommerce' ) ) ) ); $breadcrumbs = new WC_Breadcrumb(); if ( $args['home'] ) { $breadcrumbs->add_crumb( $args['home'], apply_filters( 'woocommerce_breadcrumb_home_url', home_url() ) ); } $args['breadcrumb'] = $breadcrumbs->generate(); wc_get_template( 'global/breadcrumb.php', $args ); }
- woocommerce_breadcrumb_home_url : از فیلتر ووکامرس برای پیمایش breadcrumb با استفاده از خانه استفاده می شود.
نوع: فیلتر (filter)
function woocommerce_breadcrumb( $args = array() ) { $args = wp_parse_args( $args, apply_filters( 'woocommerce_breadcrumb_defaults', array( 'delimiter' => ' / ', 'wrap_before' => '<nav class="woocommerce-breadcrumb" ' . ( is_single() ? 'itemprop="breadcrumb"' : '' ) . '>', 'wrap_after' => '</nav>', 'before' => '', 'after' => '', 'home' => _x( 'Home', 'breadcrumb', 'woocommerce' ) ) ) ); $breadcrumbs = new WC_Breadcrumb(); if ( $args['home'] ) { $breadcrumbs->add_crumb( $args['home'], apply_filters( 'woocommerce_breadcrumb_home_url', home_url() ) ); } $args['breadcrumb'] = $breadcrumbs->generate(); wc_get_template( 'global/breadcrumb.php', $args ); }
- woocommerce_cart_item_class: استفاده از فیلتر ووکامرس برای کلاس کالای سبد خرید.
نوع: فیلتر (filter)
<?php if ( $_product && $_product->exists() && $cart_item['quantity'] > 0 && apply_filters( 'woocommerce_checkout_cart_item_visible', true, $cart_item, $cart_item_key ) ) { ?> <tr class="<?php echo esc_attr( apply_filters( 'woocommerce_cart_item_class', 'cart_item', $cart_item, $cart_item_key ) ); }?>">
- woocommerce_cart_item_name : استفاده از فیلتر ووکامرس برای نام کالای سبد خرید
نوع: فیلتر (filter)
<?php if ( ! $product_permalink ) { echo apply_filters( 'woocommerce_cart_item_name', $_product->get_name(), $cart_item, $cart_item_key ) . ' '; echo apply_filters( 'woocommerce_cart_item_name', sprintf( '<a href="%s">%s</a>', esc_url( $product_permalink ), $_product->get_name() ), $cart_item, $cart_item_key ); } ?> <?php echo apply_filters( 'woocommerce_cart_item_name', $_product->get_name(), $cart_item, $cart_item_key ) . ' '; ?>
- woocommerce_cart_item_price : استفاده از فیلتر ووکامرس برای قیمت گذاری اقلام سبد خرید.
نوع: فیلتر (filter)
<?php $product_price = apply_filters( 'woocommerce_cart_item_price', WC()->cart->get_product_price( $_product ), $cart_item, $cart_item_key ); ?> <td class="product-price" data-title="<?php _e( 'Price', 'woocommerce' ); ?>"> <?php echo apply_filters( 'woocommerce_cart_item_price', WC()->cart->get_product_price( $_product ), $cart_item, $cart_item_key ); ?>
- woocommerce_cart_item_product : استفاده از فیلتر ووکامرس برای قیمت گذاری اقلام سبد خرید.
نوع: فیلتر (filter)
<?php foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) { $_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );} ?> <?php foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) { $_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key ); } ?> <?php foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) { $_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key ); } ?>
- woocommerce_cart_item_product_id: استفاده از فیلتر ووکامرس برای شناسه محصول کالای سبد خرید.
نوع: فیلتر (filter)
<?php $_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key ); $product_id = apply_filters( 'woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key ); ?> <?php $_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key ); $product_id = apply_filters( 'woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key ); ?>
- woocommerce_cart_item_subtotal : از فیلتر ووکامرس برای مجموع فرعی از اقلام سبد خرید استفاده می شود.
نوع: فیلتر (filter)
<td class="product-total"> <?php echo apply_filters( 'woocommerce_cart_item_subtotal', WC()->cart->get_product_subtotal( $_product, $cart_item['quantity'] ), $cart_item, $cart_item_key ); ?> <?php echo apply_filters( 'woocommerce_cart_item_subtotal', WC()->cart->get_product_subtotal( $_product, $cart_item['quantity'] ), $cart_item, $cart_item_key ); ?>
- woocommerce_cart_item_thumbnail : از فیلتر ووکامرس برای تصویر بند انگشتی از کالاهای سبد خرید استفاده می شود.
نوع: فیلتر (filter)
<?php $thumbnail = apply_filters( 'woocommerce_cart_item_thumbnail', $_product->get_image(), $cart_item, $cart_item_key ); $product_price = apply_filters( 'woocommerce_cart_item_price', WC()->cart->get_product_price( $_product ), $cart_item, $cart_item_key ); ?> <?php $thumbnail = apply_filters( 'woocommerce_cart_item_thumbnail', $_product->get_image(), $cart_item, $cart_item_key ); ?>
- woocommerce_cart_item_visible : استفاده از فیلتر ووکامرس برای قابل مشاهده بودن کالای سبد خرید.
نوع: فیلتر (filter)
<?php if ( $_product && $_product->exists() && $cart_item['quantity'] > 0 && apply_filters( 'woocommerce_cart_item_visible', true, $cart_item, $cart_item_key ) ) { } ?>
- woocommerce_catalog_orderby: استفاده از فیلتر ووکامرس برای سفارش کاتالوگ محصولات.
نوع: فیلتر (filter)
function woocommerce_catalog_ordering() { global $wp_query; if ( 1 === $wp_query->found_posts || ! woocommerce_products_will_display() ) { return; } $orderby = isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) ); $show_default_orderby = 'menu_order' === apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) ); $catalog_orderby_options = apply_filters( 'woocommerce_catalog_orderby', array( 'menu_order' => __( 'Default sorting', 'woocommerce' ), 'popularity' => __( 'Sort by popularity', 'woocommerce' ), 'rating' => __( 'Sort by average rating', 'woocommerce' ), 'date' => __( 'Sort by newness', 'woocommerce' ), 'price' => __( 'Sort by price: low to high', 'woocommerce' ), 'price-desc' => __( 'Sort by price: high to low', 'woocommerce' ) ) ); if ( ! $show_default_orderby ) { unset( $catalog_orderby_options['menu_order'] ); } if ( 'no' === get_option( 'woocommerce_enable_review_rating' ) ) { unset( $catalog_orderby_options['rating'] ); } wc_get_template( 'loop/orderby.php', array( 'catalog_orderby_options' => $catalog_orderby_options, 'orderby' => $orderby, 'show_default_orderby' => $show_default_orderby ) ); }
خلاصه
در این مقاله، در مورد مفهوم قلاب یا همان هوک های ووکامرس و نحوه استفاده از آنها در حلقه، پروژه واحد، فیلترها و اکشنها بحث کردیم. این قلاب ها در تمام جنبه های توسعه ووکامرس از جمله توسعه قالب وردپرس و افزونه وردپرس ضروری هستند. امیدواریم که به خوبی با هوک ووکامرس آشنا شده باشید. همچنین ممکن است بخواهید مقاله دیگر ما را در مورد هوک وردپرس ببینید.