Lightningのパンくずリスト(breadcrumb)

Chick

パンくずリストとは、ウェブサイトで自分が今どのページにいるかを示すナビゲーションのこと。例えば、ホーム > カテゴリ > 商品ページ のように、簡単に前のページに戻れる便利な機能です。

lightning/_g3/index.php:


特定の条件を満たす場合にのみパンくずリスト(breadcrumb)を表示する。
パンくずリストのオプションは、パンくずリストの表示に関する設定情報を格納する配列。

<?php // 'lightning_breadcrumb_before' アクションフックを実行します 
	do_action( 'lightning_breadcrumb_before', 'lightning_breadcrumb_before' );
	//'lightning_is_breadcrumb_position_normal' フィルターフックを使用して、通常の位置にパンくずリストを表示するかどうかを決定します 
		if ( apply_filters( 'lightning_is_breadcrumb_position_normal', true, 'breadcrumb_position_normal' ) ) {
		//'lightning_is_breadcrumb' フィルターフックを使用して、パンくずリストを表示するかどうかを決定します 
				if ( apply_filters( 'lightning_is_breadcrumb', true, 'breadcrumb' ) ) {
				  // VkBreadcrumb クラスのインスタンスを作成します
							$vk_breadcrumb      = new VkBreadcrumb();
	//パンくずリストのオプションを定義します
		$breadcrumb_options = array(
				'id_outer'        => 'breadcrumb',
				'class_outer'     => 'breadcrumb',
				'class_inner'     => 'container',
				'class_list'      => 'breadcrumb-list',
				'class_list_item' => 'breadcrumb-list__item',
			);
			//パンくずリストを表示します
		 $vk_breadcrumb->the_breadcrumb( $breadcrumb_options );
		}
	}
	//'lightning_breadcrumb_after' アクションフックを実行します 
		do_action( 'lightning_breadcrumb_after', 'lightning_breadcrumb_after' );
	?>

$breadcrumb_options:

  • パンくずリストの表示に関するオプションを格納する配列です。
  • id_outer は外側のコンテナ(通常は div タグ)のIDを指定します。
  • class_outer は外側のコンテナのクラスを指定します。
  • class_inner は内側のコンテナ(通常は ol タグ)のクラスを指定します。
  • class_list はパンくずリスト(通常は li タグのリスト)のクラスを指定します。
  • class_list_item は各パンくずリストアイテム(li タグ)のクラスを指定します。

wp-content/themes/lightning/vendor/vektor-inc/vk-breadcrumb/src/VkBreadcrumb.php:

the_breadcrumb()メソッドは、このファイルで定義されています。the_breadcrumb() メソッドが定義されているソースファイルの場所を示す情報。

・メソッドの引数や戻り値に関する情報
・メソッドがどのような処理を行っているかの詳細
・メソッドが他のクラスや関数とどのように連携しているか

このような情報は、開発者がコードを理解し、必要に応じて修正やカスタマイズを行う際に非常に重要です。また、バグの原因を特定したり、新しい機能を追加する際にも役立ちます。

したがって、「大事な中身」は、プログラムや機能の実装を記述したソースファイルや、特定の機能がどのファイルで定義されているかという情報です。これにより、ソフトウェアの振る舞いを理解し、効果的に開発を進めることができます。

/**
	 * Print Bread Crumb
	 */
	public static function the_breadcrumb() {
    // 許可されたHTMLタグとその属性を定義する配列
    $allowed_html = array(
        'div'  => array(
            'id'        => array(),        // divタグに許可された属性:id
            'class'     => array(),        // divタグに許可された属性:class
            'itemprop'  => array(),        // divタグに許可された属性:itemprop
            'itemscope' => array(),        // divタグに許可された属性:itemscope
            'itemtype'  => array(),        // divタグに許可された属性:itemtype
        ),
        'ol'   => array(
            'id'        => array(),        // olタグに許可された属性:id
            'class'     => array(),        // olタグに許可された属性:class
            'itemprop'  => array(),        // olタグに許可された属性:itemprop
            'itemscope' => array(),        // olタグに許可された属性:itemscope
            'itemtype'  => array(),        // olタグに許可された属性:itemtype
        ),
        'li'   => array(
            'id'        => array(),        // liタグに許可された属性:id
            'class'     => array(),        // liタグに許可された属性:class
            'itemprop'  => array(),        // liタグに許可された属性:itemprop
            'itemscope' => array(),        // liタグに許可された属性:itemscope
            'itemtype'  => array(),        // liタグに許可された属性:itemtype
        ),
        'a'    => array(
            'id'       => array(),         // aタグに許可された属性:id
            'class'    => array(),         // aタグに許可された属性:class
            'href'     => array(),         // aタグに許可された属性:href
            'target'   => array(),         // aタグに許可された属性:target
            'itemprop' => array(),         // aタグに許可された属性:itemprop
        ),
        'span' => array(
            'id'        => array(),        // spanタグに許可された属性:id
            'class'     => array(),        // spanタグに許可された属性:class
            'itemprop'  => array(),        // spanタグに許可された属性:itemprop
            'itemscope' => array(),        // spanタグに許可された属性:itemscope
            'itemtype'  => array(),        // spanタグに許可された属性:itemtype
        ),
        'i'    => array(
            'id'    => array(),            // iタグに許可された属性:id
            'class' => array(),            // iタグに許可された属性:class
        ),
        'meta' => array(
            'itemprop' => array(),         // metaタグに許可された属性:itemprop
            'content'  => array(),         // metaタグに許可された属性:content
        ),
        'ruby' => array(),                 // rubyタグに許可された属性:なし
        'rt'   => array(),                 // rtタグに許可された属性:なし
    );

    // wp_kses() 関数を使用して、パンくずリストを許可されたHTMLタグと属性を使って出力します   
     echo wp_kses( self::get_breadcrumb(), $allowed_html );
}

wp_kses() 関数は、指定されたHTML文字列(この場合は self::get_breadcrumb() で取得したパンくずリスト)を、指定された許可されたHTMLタグと属性のみでフィルタリングし、安全な形で出力します。これにより、不正なHTMLやスクリプトの挿入を防ぐことができます。

メソッドの役割

このメソッドは、パンくずリストを生成し、それを指定された許可されたHTMLタグと属性を用いて出力する役割を持ちます。

コードの理解の難しさ

このコードが難しいと感じる理由は、以下の点が考えられます:

  • PHPのオブジェクト指向プログラミングの理解: クラスメソッドとして定義されており、$this の代わりに self:: を使用しているため、クラスのコンテキストでの動作が必要です。
  • wp_kses() 関数の使用: セキュリティの観点から重要な関数であり、正しく設定された許可されたHTMLタグと属性を知る必要があります。
  • フィルタリングの概念wp_kses() 関数がどのようにHTMLをフィルタリングしているのか理解する必要があります。

このようなコードを理解するためには、PHPの基本的な知識とオブジェクト指向プログラミングの理解が必要です。また、WordPress特有の関数やセキュリティ対策の考え方を理解していることが望ましいです。