VK Filter Searchプラグインを使って、検索結果ページをカスタマイズ

関数名やコードの柔軟な対応について:


1. **関数名の考え方:**
- 関数名はできるだけわかりやすく、機能を表すように心掛けましょう。
- ショップ検索に関連する機能であることが理解しやすいように、関数名を選択します。

2. **コードの柔軟な対応:**
- タイトルやパンくずリストの文字列が将来変更される可能性がある場合、関数を使って柔軟に対応するアプローチは賢明です。
- パンくずリストやタイトル以外にも、同じ検索ページで使用される可能性のあるテキストがあれば、それも関数で管理すると良いでしょう。

3. **関数の再利用:**
- ショップ検索に関する機能が他の部分でも使用される可能性がある場合、関数を再利用できるように設計します。
- グローバル変数やパラメータを適切に使用して、関数をより汎用的に利用可能にします。

例えば、関数名を `get_shop_search_text()` (※任意の名前)などにして、将来的な変更にも対応できるような設計にすることが考えられます。同様に、他のテキストも関数で管理することで、全体のメンテナンスが容易になります。

VK Filter Search プラグインを使用時のカスタマイズ

絞り込み検索機能をVK Filter Searchを使って実装する過程で、ブラウザーのタブに表示される「" "の検索結果」という文言のカスタマイズ方法

「ショップ検索」という文字列を使い回すことなく、`get_custom_text()` 関数 (※任意の名前)で一元管理するように変更:

// カスタマイズする文字列を返す関数
function get_custom_text() {
    return 'ショップ検索';
}
 
 
 
 
// タイトルの書き換え
add_filter('document_title_parts', function($title) {
    // 検索ページの場合、タイトルをカスタマイズした文字列に変更
    if (is_search()) {
        $title['title'] = get_custom_text();
    }
    return $title;
});
 
 
 
 
 
// パンくずリストの書き換え
add_filter('vk_breadcrumb_array', function($breadcrumb_array) {
 
    // 検索ページの場合、パンくずリストを「ホーム/ショップ検索」に変更
    if (is_search()) {
        $breadcrumb_array[1]['name'] = 'ホーム/' . get_custom_text();
    }
 
    return $breadcrumb_array;
});

タイトルの書き換えコード部分の説明:

    • 説明: document_title_parts フィルターは、WordPressのテーマがページのタイトルを生成する際に使用されるフィルターです。具体的には、ページのタイトルを部分ごとに変更するために使用されます。
    • 結論: これはWordPressのコア機能であり、テーマに関連するフィルターです。

is_search() – Function | Developer.WordPress.orgDetermines whether the query is for a search.developer.wordpress.org

// タイトルの書き換え
add_filter('document_title_parts', function($title) {

    // 検索ページの場合、タイトルをカスタマイズした文字列に変更
    if (is_search()) {
        $title['title'] = get_custom_text();
    }

    return $title;
});


**$title について:**
- `$title` は連想配列になっています。特に `document_title_parts` フィルターフック内で使用されるものです。
- タイトルは `$title['title']` のように連想配列のキーを指定してアクセスします。

参考ドキュメントのコードとの繋がり:

document_title_partsの
参考ドキュメントページコード解説:

document_title_parts | Hook | WordPress Developer ResourcesFilters the parts of the document title.developer.wordpress.org

参考ドキュメント説明:

apply_filters( 'document_title_parts', array $title )

document_title_partsの参考ドキュメントで使用されているコードの`apply_filters` 関数は 、WordPress でフィルターフックを実行するために使用されます。具体的には、指定されたフィルターフックに登録されているコールバック関数を呼び出し、その結果を返します。

apply_filters( 'document_title_parts', array $title )` は、WordPress のドキュメンテーションで使われる一般的な形式です。
これはフィルターフック `document_title_parts` を実行し、関数内で渡される `$title` 変数をフィルタリングするためのものです。

`apply_filters( 'document_title_parts', array $title )` では、`document_title_parts` というフィルターフックに対して、フィルタリングされるデータ `$title`(連想配列)を渡しています。このフィルターフックは、WordPressのタイトルを表示する部分に対するフィルタリングが行われるものと考えられます。

無名関数(Anonymous Function):

名前のない関数を指します。通常の関数は名前を持ちますが、無名関数はその場で定義され、変数に代入されるか、他の関数に引数として渡されることが一般的です。

PHPでは、無名関数は `function()` のような構文で定義されます。

以下は無名関数の例です:

```php

$addition = function ($a, $b) {
    return $a + $b;
};

$result = $addition(3, 4); 



// 結果は 7

この例では、変数 `$addition` に無名関数が代入されています。その後、この変数を通じて関数を呼び出すことができます。

無名関数は主にコールバック関数やフィルターフックなど、一度きりの使用や短いスコープでの利用が適しています。

`add_filter` を使用する場合、通常は無名関数が使われます。`add_filter` はWordPressのフックシステムを利用して、ある処理の前後に自分の処理を挿入することができます。これには無名関数がよく利用されます。

例えば、以下のように `add_filter` を使用して無名関数を登録することがあります:

```php

add_filter('some_filter_hook', function($value) {

    // ここにフィルタリング処理を記述
    return $value;

});

この例では、`some_filter_hook` フックに対して無名関数が登録されています。
この無名関数はフィルタリング処理を行い、最終的な結果を返します。このようにして、`add_filter` を使用することでWordPressの動作を拡張できます。

つまり、`add_filter` の第2引数に渡されるのが無名関数です。
`add_filter` 関数はWordPressのフィルターフックに新しいフィルターを追加するために使用されます。
その際、第2引数にはフィルターが呼び出されたときに実行される無名関数が入ります。

`some_filter_hook` フックが呼び出された際に、指定された無名関数が実行され、その結果が元の処理に影響を与えることが期待されます。

`add_filter` 関数の第2引数はコールバック関数であり、これがフィルターフックが呼び出された際に実行される処理を指定します。この引数は任意ですが、通常、フィルターフックに対する処理や変更を記述する無名関数を指定します。

要するに、第2引数はフィルターフックが実際に何を行うかを指定するためのものであり、必要に応じて設定します。

ドキュメントのフィルターフック名から判断する

"見方としては、以下の要素が重要です:

1. **フィルターフックの名前:** `document_title_parts` がそれに該当します。この名前は、どのフィルターフックが実行されるかを示します。

2. **フィルタリングされるデータ:** `array $title` と書かれているので、`$title` はこのフィルターフックに渡されるデータの変数です。この変数を通じて、フィルタリングされるデータにアクセスできます。

3. **コールバック関数の適用:** フィルターフック(`document_title_parts` )に登録されているコールバック関数が `$title` データを受け取り、変更して返します。これにより、特定のコンテキストでタイトルを変更できます。

`apply_filters( 'document_title_parts', array $title )` におけるコールバック関数は、`'document_title_parts'` フックに登録されている関数です。このフックが実行された時点で、登録されたコールバック関数が呼び出され、その中で `$title` 配列を処理・変更する役割を担います。このコールバック関数は、`'document_title_parts'` フックがトリガーされた際に実行される点で重要です。"

document_title_partsのドキュメントコードの見方


document_title_partsの参考ドキュメントコード:

apply_filters( 'document_title_parts', array $title )

通常、ドキュメントやコード内でフィルターフック名を見つけた場合、それがどの部分で使用されているかを把握することができます。フィルターフック名は、何を変更したいのか、どのイベントやデータに対して働くのかを示すものです。


第一引数は`apply_filters`関数内で使用されるフィルターフックの名前を指定します。第二引数はそのフィルターフックに渡されるデータや変数を表します。そして、このフィルターフック名に関連づけられたコールバック関数が、そのデータを処理し、結果を返すことができます。つまり、第一引数はフィルターフック名を指定し、第二引数はそのフックに渡されるデータを表します。


例えば、add_filter('document_title_parts', 'my_custom_function')というコードを見た場合、document_title_parts というフックがドキュメントのタイトルに関連していることがわかります。

そして、このフックに登録された my_custom_function という関数 (任意の名前) が、タイトルに変更を加えることが期待されます。

これにより、コード内の特定のポイントで何が行われているかを推測でき、それに基づいてカスタマイズや修正を行うことができます。

つまり、一般的にはフィルターフック名からそのフックが何に関連しているのかを判断することができます。

WordPressの公式ドキュメンテーションやテーマやプラグインのドキュメントでは、フック名やアクション名が明示的に説明されていることがよくあります。

例えば、`add_filter('document_title_parts', 'my_custom_function')`のようなコードがあれば、
「`document_title_parts`」というフックが文書のタイトルに関連していることを示しています。そのため、ドキュメント内でこのフックに関する情報を探し、それに基づいてフィルターがどのように機能するかを理解できます。

'"ドキュメントでは、まずは、したい事(動作)の使用されている第一引数の関数名を見つけます。"

ドキュメントの参照ポイント

無名関数の補足説明

無名関数ではない通常の関数:

```php

function my_custom_function($title) {
    // 何らかの変更を行う
    return $title;
}

add_filter('document_title_parts', 'my_custom_function');

add_filter('document_title_parts', 'my_custom_function');
の`my_custom_function` は無名関数ではなく、通常の関数の名前です。`add_filter` ファンクションでは、フックに関数を登録するために関数の名前を指定します。

この場合、`my_custom_function` は登録される関数で、`document_title_parts` フックが実行される際に呼び出されます。この関数には `$title` という引数が渡され、これを変更して返すことで文書のタイトルをカスタマイズできます。
つまりこの場合、function my_custom_function($title) { 
の`my_custom_function`という関数の名前が `add_filter` の第2引数に渡されています。したがって、関数の名前が明示的に指定されていることもあります。


無名関数を使う場合は、以下のようになります:

```php
add_filter('document_title_parts', function($title) {
    // 何らかの変更を行う
    return $title;
});
```

これが`add_filter` の第2引数に渡されるのが無名関数の具体例です。

このように無名関数を直接 `add_filter` 内に書くこともできます。ただし、関数が再利用される場合やコードが複雑になる場合は、通常の関数を使うことが一般的です。

`add_filter` の第2引数に渡されるのは、通常、関数の名前やクラスメソッドの名前です。しかし、WordPressでは無名関数(匿名関数)も使用できます。具体的には、`function($title) { /* 処理 */ }` のような形です。
この無名関数は `$title` を引数に取り、変更後の値 `$title` を返します。

つまり、`add_filter` の第2引数に渡されるものは、関数自体であり、その関数が匿名関数(無名関数)である場合もあれば、通常の関数やクラスメソッドの名前である場合もあります。つまり、「第2引数が全て無名関数」というわけではありません。


コード内で使われている関数の返り値の変数名について

関数の返り値として使われているこの変数名を変更するとコードが正常に動作しなくなります。
元の関数のフィルターフックが期待しているのは `$title` という変数です。したがって、関数内での変数名も `$title` を使用するのが望ましいです。

変数名は関数内でのスコープが限られているため、他の箇所で同じ名前の変数が使われていても影響を受けません。


間違い:

add_filter('document_title_parts', function($title) {

    // 検索ページの場合、タイトルをカスタマイズした文字列に変更
    if (is_search()) {
        $title['title'] = get_custom_text();
    }

    return $title2;問題あり
});


正しい:

add_filter('document_title_parts', function($title) {

    // 検索ページの場合、タイトルをカスタマイズした文字列に変更
    if (is_search()) {
        $title['title'] = get_custom_text();
    }

    return $title;正しい
});

このようにすることで、元のコードが期待通りに動作します。変数名の一致は規則ではなく、コードの目的や可読性と理解しやすさを考慮して行われることがあります。

変数名の一致は規則ではないですが、一般的にはコードを読みやすくするために変数名を一貫させることが推奨されます。変数名を一致させることで、コード全体がより理解しやすくなり、メンテナンスがしやすくなります。コード内で同じ変数名を使い回すことが多い場合、意図しないバグを防ぐことも期待できます。

したがって、変数名を `return $title;` のように一致させることが良い実践とされています。

例えば、

add_filter('some_filter_hook', function($value) {

    // 渡された$valueに基づいて処理を行う
    $modifiedValue = $value + 10;

    return $modifiedValue;
});

ここで重要なのは、このような場合は引数の名前が `$value` である必要はなく、変更しても機能します。ただし、通常は理解しやすさやコードの可読性のために、フックが期待する値に合わせることが一般的です。

document_title_partsを使用し、特定のページスラッグに基づいてサイトのタイトルの一部を書き換える

add_filter( 'document_title_parts', function( $title ) {

	if( is_page( array( 'slug1', 'slug2', 'slug3' ) ) ) {

		$title['title'] = 'abc';

	}

	return $title;
});

上記のコードは、WordPressの`add_filter`関数を使用して`document_title_parts`フィルターフックを利用しています。これは、特定のページスラッグ('slug1', 'slug2', 'slug3')に基づいてサイトのタイトルの一部を変更するためのものです。

`document_title_parts`フィルターは、サイトのタイトルを構成する要素を配列として提供し、その要素を変更することができます。与えられたコードは、指定したページスラッグが表示される場合にサイトのタイトル('title')を'abc'に変更するフィルターを追加しています。

タイトルの書き換え他にも:

タイトルの一部を変更するdocument_title_partsの他に、区切り記号を変更するdocument_title_separatorや、pre_get_document_titleなどもあります。

連想配列はキーと値


**連想配列(Associative Array):**
- 連想配列はキーと値のペアで構成されるデータ構造です。
- インデックスに通常の数値だけでなく、文字列や他のデータ型も使えます。
- 例: `$person = ['name' => 'John', 'age' => 30];`
- キーを指定して値にアクセスすることが特徴で、`$person['name']` は `'John'` を返します。

// 連想配列の例
$person = [
    'name' => 'John',
    'age' => 30
];


// キーを指定して値にアクセスすることができます。
$name = $person['name']; // これは 'John' を返します
$age = $person['age'];   // これは 30 を返します

この例では、`$person` は名前と年齢という2つの情報を持つ連想配列です。`'name'` と `'age'` がそれぞれの要素(キー)であり、それに対応する値は `'John'` と `30` です。キーを指定して値にアクセスすることができ、それによって対応する情報が取得できます。 

簡単に言えば、連想配列はキーと値の関連付けです。

パンくずリストの書き換えのコード部分の説明:

  • 説明: vk_breadcrumb_array フィルターは、おそらくVK Filter SearchプラグインまたはVK Filter Searchに関連するVK関連のテーマやプラグインが提供するパンくずリストのカスタマイズのためのフィルターです。このフィルターを使用することで、パンくずリストの構成を変更できます。
  • 結論: これはVK Filter Searchプラグイン、またはVK関連のテーマやプラグインの機能として提供されているフィルターです。

パンくずリストは、ウェブサイトのページ内でユーザーが現在位置を把握するのに役立つナビゲーション手法です。階層的なページ構造を示し、ユーザーがサイト内を移動する際の経路を示すリストです。例えば、「ホーム > カテゴリー > サブカテゴリー > 現在のページ」といった形で表示され、サイト内での位置関係を理解しやすくします。

// パンくずリストの書き換え
add_filter('vk_breadcrumb_array', function($breadcrumb_array) {

    // 検索ページの場合、パンくずリストを「ホーム/ショップ検索」に変更
    if (is_search()) {
     $breadcrumb_array[1]['name'] = 'ホーム/' . get_custom_text();
   }

    return $breadcrumb_array;
});

**$breadcrumb_array について:**
- `$breadcrumb_array` は2次元配列であり、主に `vk_breadcrumb_array` フィルターフック内で使用されます。($breadcrumb_array の構造については、/wp-content/themes/lightning/vendor/vektor-inc/vk-breadcrumb/src/VkBreadcrumb.php を参照してください。)


パンくずリストの要素にアクセスするには、`$breadcrumb_array[1]['name']` のように配列の要素へのアクセスが必要です。

**2次元配列(Two-dimensional Array):**
- 2次元配列は、要素が配列である配列です。行と列のように考えることができます。
- 例: `$matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];`
- この場合、`$matrix[1][2]` は `6` を返します。最初の添字は行、2番目の添字は列を指定します。

// 2次元配列の例
$matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
];

// $matrix[1][2] は行1(2番目の行)、列2(3番目の列)の要素を指します。
$element = $matrix[1][2]; // これは 6 を返します

この例では、$matrix は3つの行と3つの列を持つ2次元配列です。そして、$matrix[1][2] は2番目の行([4, 5, 6])の3番目の列の要素である 6 を指します。

簡単に言えば、2次元配列は行と列の組み合わせのデータ構造です。

`apply_filters` と `add_filter`

`apply_filters` と `add_filter` は WordPress のフィルターフックシステムで使用される2つの異なる関数です。

1. **`add_filter`:**

```php

   add_filter( 'some_filter_hook', 'my_callback_function' );

   ```

- `add_filter` は、特定のフィルターフックに対して、変更を加えるためのコールバック関数を登録します。
- フィルターフックに対して新しいコールバック関数を追加する役割を果たします。
- 登録されたコールバック関数は、フィルターフックが実行される際に呼び出されます。


2. **`apply_filters`:**

```php

   $filtered_data = apply_filters( 'some_filter_hook', $data_to_be_filtered );

   ```

- `apply_filters` は、特定のフィルターフックを実行し、登録されたコールバック関数にデータを渡します。
- 実行されるフィルターフックに登録されたコールバック関数がデータを変更し、変更されたデータを返します。
通常、`apply_filters` はテーマやプラグインの開発者が提供したデータを変更するために使用されます。

言い換えれば、`add_filter` はフィルターフックに新しいコールバック関数を登録するためのもので、`apply_filters` は登録されたコールバック関数を実行し、データを変更するためのものです。
例として、`add_filter` を使ってフィルターフックにコールバック関数を追加し、`apply_filters` を使ってそのフィルターフックを実行してデータを変更する、といった流れが一般的になります。 

「自分で設定するのは少し不安…」「途中で手が止まってしまった…」

そんな方に向けて、

Lightningテーマの設定や表示について、一緒に整理する相談サービスを行っています。

※実際のご契約については、ココナラ経由での対応となります。


[👇ご依頼はココナラからどうぞ]

Lightningテーマの困ったを一緒に整理します