WooCommerceフックの使用方法–包括的なガイド

公開: 2016-12-06
woocommerceフック
@Cloudwaysをフォローする

フックは、コード開発における興味深い概念です。 フックを実装するという考えは、ほとんどすべての主要な言語で普及しています。

フックは、ソフトウェアのコンポーネント間の呼び出しをインターセプトし、特定のイベントに適切なアクションを提供する小さなコードスニペットの形式を取ります。 WooCommerceの場合、フックは標準の動作を簡単に変更できるため、特別な意味を持ちます。

WooCommerceフックには、2つの異なるタイプがあります。

  • アクションフックは、コード内の選択した場所にカスタムコードを追加するために使用されます。
  • フィルタフックは、変数が返される前に変数を操作するために使用されます。

一般的なレイアウト

  • 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ファイルを見つけようとし、次にそれをロードします。 存在しない場合は、デフォルトの検索フォームが表示されます。

タイプ:フィルター

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){
            エコー$フォーム;
        } そうしないと {
            $formを返します。
        }
    }
}
  • pre_get_product_search_form:productcatdivのクラスを取得します。 string | array$classクラスリストに追加する1つ以上のクラス。 オブジェクト$categoryオブジェクトオプション。

タイプ:フィルター

function wc_get_product_cat_class($ class =''、$ category = null){
    $ classes = is_array($ class)? $ class:array_map('trim'、explode(''、$ class));
    $ classes [] ='product-category';
    $ classes []='製品';
    $ classes [] = wc_get_loop_class();
    $ classes = apply_filters('product_cat_class'、$ classes、$ class、$ category);

    戻り値array_unique(array_filter($ classes));
}
  • woocommerce_after_account_downloads:これは、アカウント認証後にWooCommerce製品をダウンロードするために使用されるアクションです。

タイプ:アクション

do_action('woocommerce_after_account_downloads'、$ has_downloads);
  • woocommerce_ajax_variation_threshold:これはバリエーションをajaxするために使用されるフィルターです。

タイプ:フィルター

関数woocommerce_variable_add_to_cart(){
        グローバル$product;

        //バリエーションスクリプトをエンキューします
        wp_enqueue_script('wc-add-to-cart-variation');

        //利用可能なバリエーションを取得しますか?
        $ get_variations = sizeof($ product-> get_children())<= apply_filters('woocommerce_ajax_variation_threshold'、30、$ product);

        //テンプレートをロードします
        wc_get_template('single-product / add-to-cart / variable.php'、array(
            'available_variations' => $ get_variations? $ product-> get_available_variations():false、
            '属性'=>$ product-> get_variation_attributes()、
            'selected_attributes' => $ product-> get_variation_default_attributes()
        ));
    }
  • woocommerce_available_download_count:これは利用可能なダウンロードのカウントのためのWooCommerceフィルターです。

タイプ:フィルター

if(is_numeric($ download ['downloads_remaining']))
echo apply_filters('woocommerce_available_download_count'、'<span class = "woocommerce-Count count">' .sprintf(_n('%sダウンロード残り'、'%sダウンロード残り'、$ download ['downloads_remaining']、'woocommerce' )、$ download ['downloads_remaining'])。'</ span>'、$ download);
  • woocommerce_available_download_link:これは、利用可能な製品のダウンロードリンクを表示するためのWooCommerceフィルターの使用です。

タイプ:フィルター

echo apply_filters('woocommerce_available_download_link'、'<a href="' .esc_url($download['download_url'])。'">'。$download['download_name']。'</a>'、$ download);
  • woocommerce_available_download_start:これはダウンロードを開始するためのWooCommerceアクションの使用です

タイプ:アクション

do_action('woocommerce_available_download_start'、$ download);
  • woocommerce_before_account_downloads:ブール値を使用してアカウントの前に製品をダウンロードするWooCommerceアクション。

タイプ:アクション

$ has_downloads =(bool)$ downloads;
do_action('woocommerce_before_account_downloads'、$ has_downloads);
  • woocommerce_before_account_orders: WooCommerceアクションは「ABSPATH」を使用して定義します

タイプ:アクション

<?php
 if(!defined('ABSPATH')){
    	出口;
    }
do_action('woocommerce_before_account_orders'、$ has_orders); ?>
  • woocommerce_breadcrumb_defaults: WooCommerceフィルターはブレッドクラムをナビゲートするために使用します。

タイプ:フィルター

function woocommerce_breadcrumb($ args = array()){
        $ args = wp_parse_args($ args、apply_filters('woocommerce_breadcrumb_defaults'、array(
            '区切り文字'=>'&nbsp;&#47;&nbsp;'、
            'wrap_before' =>'<nav class ="woocommerce-breadcrumb"'。 (is_single()?'itemprop = "breadcrumb"':'')。 '>'、
            'wrap_after' =>'</ nav>'、
            '前'=>''、
            '後'=>''、
            '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: WooCommerceフィルターは、ホームを使用してブレッドクラムをナビゲートするために使用します。

タイプ:フィルター

function woocommerce_breadcrumb($ args = array()){
        $ args = wp_parse_args($ args、apply_filters('woocommerce_breadcrumb_defaults'、array(
            '区切り文字'=>'&nbsp;&#47;&nbsp;'、
            'wrap_before' =>'<nav class ="woocommerce-breadcrumb"'。 (is_single()?'itemprop = "breadcrumb"':'')。 '>'、
            'wrap_after' =>'</ nav>'、
            '前'=>''、
            '後'=>''、
            '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:カートアイテムのクラスに使用されるWooCommerceフィルター。

タイプ:フィルター

<?php
    if($ _product && $ _product-> examples()&& $ 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:カートアイテムの名前に使用されるWooCommerceフィルター

タイプ:フィルター

<?php
    if(!$ product_permalink){
        echo apply_filters('woocommerce_cart_item_name'、$ _ product-> get_name()、$ cart_item、$ cart_item_key)。 '&nbsp;';
        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)。 '&nbsp;'; ?>
  • woocommerce_cart_item_price:カートアイテムの価格設定に使用されるWooCommerceフィルター。

タイプ:フィルター

<?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:カートの商品アイテムに使用されるWooCommerceフィルター。

タイプ:フィルター

<?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:カートアイテムの商品IDに使用されるWooCommerceフィルター。

タイプ:フィルター

<?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:カートアイテムの小計に使用されるWooCommerceフィルター。

タイプ:フィルター

<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:カートアイテムのサムネイルに使用されるWooCommerceフィルター。

タイプ:フィルター

<?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:カートアイテムの可視性のためのWooCommerceフィルターの使用。

タイプ:フィルター

<?php
    if($ _product && $ _product-> examples()&& $ cart_item ['quantity']> 0 && apply_filters('woocommerce_cart_item_visible'、true、$ cart_item、$ cart_item_key)){       
    }
?>
  • woocommerce_catalog_orderby:製品カタログの注文に使用されるWooCommerceフィルター。

タイプ:フィルター

function woocommerce_catalog_ordering(){
        グローバル$wp_query;

        if(1 === $ wp_query-> found_posts ||!woocommerce_products_will_display()){
            戻る;
        }

        $ 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' => __('デフォルトの並べ替え'、'woocommerce')、
            '人気'=>__('人気で並べ替え'、'woocommerce')、
            'rating' => __('平均評価で並べ替え'、'woocommerce')、
            '日付'=>__('新しさで並べ替え'、'woocommerce')、
            '価格'=>__('価格で並べ替え:低から高'、'woocommerce')、
            'price-desc' => __('価格で並べ替え:高から低'、'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));
    }

概要

この記事では、WooCommerceフックの概念と、フックをループ、単一プロジェクト、フィルター、およびアクションで使用する方法について説明しました。 これらのフックは、テーマやプラグインの開発を含むWooCommerce開発のすべての側面で不可欠です。 さらに、Commercegurusの友人は、WooCommerceストアの開発に使用されるいくつかのフックに関する優れたガイドも持っています。

会話に追加したい場合は、下にコメントを残してください。