ACFの真偽チェックボックスフィールドにリレバンスウェイトを追加
Advanced Custom Fields は、サイトのカスタマイズを非常に簡単にする素晴らしいプラグインです。コンテンツ入力が容易になるだけでなく、コンテンツマネージャーにとって他の詳細の管理を容易にすることもできます。ACF と SearchWP の両方を利用することは、多くの顧客が活用していることです!
ACF をチェックボックスフィールドで設定し、現在の投稿の特定の属性が true か false かを制御できるようにすることができます。たとえば、一部の投稿がプロプライエタリと見なされ、検索が実行される際にそれらの投稿により多くのウェイトを付けたい場合があります。
こちらも参照: Advanced Custom Fields と SearchWP
SearchWP のいくつかのフックを使用することで、これは簡単に実現できます!
All hooks should be added to your custom SearchWP Customizations Plugin.
ACF チェックボックスフィールドの名前が proprietary であると仮定すると、その Advanced Custom Field True/False チェックボックスがオンになっている投稿には 1000 のボーナスウェイトが追加されます。
| <?php | |
| // Add Relevance Weight to ACF True/False Checkbox Fields in SearchWP. | |
| // @link https://searchwp.com/documentation/knowledge-base/add-relevance-acf-checkbox/ | |
| add_filter( 'searchwp\query\mods', function( $mods ) { | |
| global $wpdb; | |
| $my_meta_key = 'proprietary'; // ACF True/False name. | |
| $bonus_weight = 1000; // Extra weight to add when checkbox is ticked. | |
| $mod = new \SearchWP\Mod(); | |
| $mod->set_local_table( $wpdb->postmeta ); | |
| $mod->on( 'post_id', [ 'column' => 'id' ] ); | |
| $mod->on( 'meta_key', [ 'value' => $my_meta_key ] ); | |
| $mod->weight( function( $runtime_mod ) use ( $bonus_weight ) { | |
| $local_alias = $runtime_mod->get_local_table_alias(); | |
| return "IF({$local_alias}.meta_value+0 = 1, {$bonus_weight}, 0)"; | |
| } ); | |
| $mods[] = $mod; | |
| return $mods; | |
| } ); |
適用可能なフィールド name を 9 行目で編集することで、任意の ACF フィールド名を使用するようにフックをカスタマイズできます。また、使用されるボーナスウェイトを調整したい場合は、10 行目を編集できます。

