{"id":4892,"date":"2020-06-03T10:54:40","date_gmt":"2020-06-03T10:54:40","guid":{"rendered":"https:\/\/the7kennisbank.nl\/?p=4892"},"modified":"2020-06-09T13:22:24","modified_gmt":"2020-06-09T13:22:24","slug":"facets","status":"publish","type":"post","link":"https:\/\/the7kennisbank.nl\/en\/wp-grid-builder\/facets\/","title":{"rendered":"Filter facets"},"content":{"rendered":"<div class=\"wpb-content-wrapper\"><div class=\"vc_row wpb_row vc_row-fluid\"><div class=\"wpb_column vc_column_container vc_col-sm-12\"><div class=\"vc_column-inner\"><div class=\"wpb_wrapper\">\n\t<div class=\"wpb_text_column wpb_content_element \" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t<div>\n<div class=\"container flex items-center justify-between\">\n<h1 class=\"entry-title\">\/facets<\/h1>\n<\/div>\n<\/div>\n<div id=\"article-wrapper\" class=\"container\">\n<p>This filter is called when fetching facets in the admin interface and on the frontend to display facets and query content.<\/p>\n<p>It allows to add your own facets with your own logic. <strong>Creating custom facets requires advanced knowledge in PHP and SQL languages<\/strong><\/p>\n<table class=\"wp-block-table arguments-table\">\n<tbody>\n<tr>\n<td>Argument<\/td>\n<td>Type<\/td>\n<td>Description<\/td>\n<\/tr>\n<tr>\n<td>$facets<\/td>\n<td>array<\/td>\n<td>Holds registered facet arguments<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"code-syntax-block code-syntax-wrapper\">\n<p>[pastacode lang=&#8221;php&#8221; manual=&#8221;function%20prefix_register_facet(%20%24facets%20)%20%7B%0A%0A%2F%2F%20&#8217;my_facet&#8217;%20corresponds%20to%20the%20facet%20slug.%0A%24facets%5B&#8217;my_facet&#8217;%5D%20%3D%20%5B%0A&#8217;name&#8217;%20%3D%3E%20__(%20&#8217;My%20Facet&#8217;%2C%20&#8217;text-dmain&#8217;%20)%2C%20%0A&#8217;type&#8217;%20%3D%3E%20&#8217;filter&#8217;%2C%0A&#8217;class&#8217;%20%3D%3E%20&#8217;My_Facet_Class&#8217;%2C%20%0A%5D%3B%20%0A%0Areturn%20%24facets%3B%0A%0A%7D%0A%0Aadd_filter(%20&#8217;wp_grid_builder%2Ffacets&#8217;%2C%20&#8217;prefix_register_facet&#8217;%2C%2010%2C%201%20)%3B&#8221; message=&#8221;&#8221; highlight=&#8221;&#8221; provider=&#8221;manual&#8221;\/]<\/p>\n<\/div>\n<p>The plugin will use the following methods, if available, from your facet <code>class<\/code><\/p>\n<ul>\n<li><code>query_facet<\/code>: To query facet values\/names depending of content and filter state.<\/li>\n<li><code>render_facet<\/code>: To display facet values\/names queried by <code>query_facet<\/code> method.<\/li>\n<li><code>query_objects<\/code>: To filter content by querying object ids (post ids, term ids or user ids) from selected facet values.<\/li>\n<\/ul>\n<p>As example, this facet class allows to create an alphabetical list to filter content by first letter:<\/p>\n<div class=\"code-syntax-block code-syntax-wrapper\">\n<p>[pastacode lang=&#8221;php&#8221; manual=&#8221;%2F**%20%0A*%20Alphabetical%20Facet%20class%20example%20%0A*%20%0A*%20%40class%20My_Facet_Class%20%0A*%20%40since%201.0.0%0A*%2F%0Aclass%20My_Facet_Class%20%7B%20%0A%0A%09%2F**%20%0A%09*%20Constructor%20%0A%09*%20%0A%09*%20%40access%20public%20%0A%09*%2F%0A%09public%20function%20__construct()%20%7B%7D%0A%0A%09%2F**%20%0A%09*%20Query%20facet%20choices%0A%09*%0A%09*%20%40access%20public%20%0A%09*%20%0A%09*%20%40param%20array%20%24facet%20Holds%20facet%20settings.%20%0A%09*%20%40return%20array%20Holds%20facet%20items.%20%0A%09*%2F%20%0A%09public%20function%20query_facet(%20%24facet%20)%20%7B%0A%09%09%0A%09%09global%20%24wpdb%3B%20%0A%09%09%0A%09%09%24where_clause%20%3D%20wpgb_get_where_clause(%20%24facet%20)%3B%20%0A%09%0A%09%09%2F%2F%20We%20query%20facet_name%20distinctly%20by%20the%20first%20letter.%0A%09%09%2F%2F%20In%20this%20example%2C%20we%20do%20not%20use%20the%20facet_value%20because%20depending%20of%20its%20length%20it%20may%20be%20encoded%20(md5).%0A%09%09%24facet_names%20%3D%20%24wpdb-%3Eget_col(%0A%09%09%09%24wpdb-%3Eprepare(%20%0A%09%09%09%09%22SELECT%20DISTINCT%20UPPER(LEFT(facet_name%2C%201))%20AS%20letter%20%0A%09%09%09%09FROM%20%7B%24wpdb-%3Eprefix%7Dwpgb_index%20%0A%09%09%09%09WHERE%20slug%20%3D%20%25s%20%0A%09%09%09%09AND%20%24where_clause%0A%09%09%09%09GROUP%20BY%20letter%22%2C%0A%09%09%09%09%24facet%5B&#8217;slug&#8217;%5D%0A%09%09%09)%20%0A%09%09)%3B%20%2F%2F%20WPCS%3A%20unprepared%20SQL%20ok.%20%0A%0A%09%09return%20%24facet_names%3B%20%0A%09%7D%20%0A%09%0A%09%2F**%20%0A%09*Render%20facet%20choices%20%0A%09*%20%0A%09*%20%40access%20public%20%0A%09*%20%0A%09*%20%40param%20array%20%24facet%20Holds%20facet%20settings.%20%0A%09*%20%40param%20array%20%24items%20Holds%20facet%20items.%20%0A%09*%20%40return%20string%20Facet%20markup.%20%0A%09*%2F%0A%09public%20function%20render_facet(%20%24facet%2C%20%24items%20)%20%7B%0A%09%0A%09%09%24output%20%3D%20&#8217;%3Cdiv%20class%3D%22wpgb-alphabetical-facet%22%3E&#8217;%3B%0A%09%09%24output%20.%3D%20&#8217;%3Cul%20class%3D%22wpgb-inline-list%22%3E&#8217;%3B%0A%09%09%24output%20.%3D%20%24this-%3Erender_letters(%20%24facet%2C%20%24items%20)%3B%0A%09%09%24output%20.%3D%20&#8217;%3C%2Ful%3E&#8217;%3B%0A%09%09%24output%20.%3D%20&#8217;%3C%2Fdiv%3E&#8217;%3B%0A%09%0A%09return%20%24output%3B%0A%09%0A%7D%20%0A%0A%2F**%20%0A*%20Render%20letter%20buttons%20%0A*%20%0A*%20%40access%20public%20%0A*%20%0A*%20%40param%20array%20%24facet%20Holds%20facet%20settings.%20%0A*%20%40param%20array%20%24items%20Holds%20facet%20items.%20%0A*%20%40return%20string%20Letter%20buttons%20markup.%20%0A*%2F%0A%0Apublic%20function%20render_letters(%20%24facet%2C%20%24items%20)%20%7B%0A%0A%09%24output%20%3D%20&#8221;%3B%20%0A%09%24letters%20%3D%20str_split(%20&#8217;ABCDEFGHIJKLMNOPQRSTUVWXYZ&#8217;%20)%3B%0A%09%0A%09foreach%20(%20%24letters%20as%20%24letter%20)%20%7B%0A%09%09%24output%20.%3D%20&#8217;%3Cli%3E&#8217;%20.%20%24this-%3Erender_button(%20%24facet%2C%20%24items%2C%20%24letter%20)%20.%20&#8217;%3C%2Fli%3E&#8217;%3B%0A%09%7D%0A%0A%09return%20%24output%3B%20%0A%0A%7D%20%0A%0A%2F**%0A*%20Render%20letter%20button%20%0A*%0A*%20%40access%20public%0A*%20%0A*%20%40param%20array%20%24facet%20Holds%20facet%20settings.%0A*%20%40param%20array%20%24items%20Holds%20facet%20items.%0A*%20%40param%20string%20%24letter%20Current%20letter.%0A*%20%40return%20string%20Letter%20button%20markup.%0A*%2F%20%0A%0Apublic%20function%20render_button(%20%24facet%2C%20%24items%2C%20%24letter%20)%20%7B%0A%0A%09%24checked%20%3D%20in_array(%20%24letter%2C%20%24facet%5B&#8217;selected&#8217;%5D%2C%20true%20)%3B%0A%09%24disabled%20%3D%20!%20in_array(%20%24letter%2C%20(array)%20%24items%2C%20true%20)%3B%0A%09%24pressed%20%3D%20%24checked%20%3F%20&#8217;true&#8217;%20%3A%20&#8217;false&#8217;%3B%0A%09%24tabindex%20%3D%20%24disabled%20%3F%20-1%20%3A%200%3B%0A%0A%09%24output%20%3D%20&#8217;%3Cdiv%20class%3D%22wpgb-button%22%20role%3D%22button%22%20aria-pressed%3D%22&#8217;%20.%20esc_attr(%20%24pressed%20)%20.%20&#8217;%22%20tabindex%3D%22&#8217;%20.%20esc_attr(%20%24tabindex%20)%20.%20&#8217;%22%3E&#8217;%3B%0A%09%24output%20.%3D%20&#8217;%3Cinput%20type%3D%22hidden%22%20name%3D%22&#8217;%20.%20esc_attr(%20%24facet%5B&#8217;slug&#8217;%5D%20)%20.%20&#8217;%22%20value%3D%22&#8217;%20.%20esc_attr(%20%24letter%20)%20.%20&#8217;%22&#8217;%20.%20disabled(%20%24disabled%2C%20true%2C%20false%20)%20.%20&#8217;%3E&#8217;%3B%0A%09%24output%20.%3D%20&#8217;%3Cspan%20class%3D%22wpgb-button-label%22%3E&#8217;%20.%20esc_html(%20%24letter%20)%20.%20&#8217;%3C%2Fspan%3E&#8217;%3B%0A%09%24output%20.%3D%20&#8217;%3C%2Fdiv%3E&#8217;%3B%0A%0A%09return%20%24output%3B%0A%0A%7D%0A%0A%2F**%0A*%20Query%20object%20ids%20(post%2C%20user%2C%20term)%20for%20selected%20facet%20values%20%0A*%20%0A*%20%40since%201.0.0%20*%20%40access%20public%20%0A*%20%0A*%20%40param%20array%20%24facet%20Holds%20facet%20settings.%20%0A*%20%40return%20array%20Holds%20queried%20facet%20object%20ids.%20%0A*%2F%20%0A%0Apublic%20function%20query_objects(%20%24facet%20)%20%7B%0A%09%0A%09global%20%24wpdb%3B%0A%0A%09%24placeholders%20%3D%20rtrim(%20str_repeat(%20&#8217;%25s%2C&#8217;%2C%20count(%20%24facet%5B&#8217;selected&#8217;%5D%20)%20)%2C%20&#8217;%2C&#8217;%20)%3B%0A%09%2F%2F%20We%20query%20object%20ids%20that%20match%20selected%20letter(s)%20from%20index%20table.%0A%09%24object_ids%20%3D%20%24wpdb-%3Eget_col(%0A%09%09%24wpdb-%3Eprepare(%0A%09%09%09%22SELECT%20DISTINCT%20object_id%20%0A%09%09%09FROM%20%7B%24wpdb-%3Eprefix%7Dwpgb_index%0A%09%09%09WHERE%20slug%20%3D%20%25s%0A%09%09%09AND%20UPPER(LEFT(facet_name%2C%201))%20IN%20(%24placeholders)%22%2C%0A%09%09%09array_merge(%20(array)%20%24facet%5B&#8217;slug&#8217;%5D%2C%20%24facet%5B&#8217;selected&#8217;%5D%20)%0A%09%09)%0A%09)%3B%20%2F%2F%20WPCS%3A%20unprepared%20SQL%20ok.%20%0A%0A%09return%20%24object_ids%3B%20%0A%7D%0A%0A%7D&#8221; message=&#8221;&#8221; highlight=&#8221;&#8221; provider=&#8221;manual&#8221;\/]<\/p>\n<\/div>\n<\/div>\n\n\t\t<\/div>\n\t<\/div>\n<\/div><\/div><\/div><\/div><div class=\"vc_row wpb_row vc_row-fluid\"><div class=\"wpb_column vc_column_container vc_col-sm-12\"><div class=\"vc_column-inner\"><div class=\"wpb_wrapper\"><\/div><\/div><\/div><\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>\/facets This filter is called when fetching facets in the admin interface and on the frontend to display facets and query content. It allows to add your own facets with your own logic. Creating custom facets requires advanced knowledge in PHP and SQL languages Argument Type Description $facets array Holds registered facet arguments [pastacode lang=&#8221;php&#8221;&hellip;<\/p>\n","protected":false},"author":2,"featured_media":4996,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[44,57,43],"tags":[],"class_list":["post-4892","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-documentation","category-php-filters","category-wp-grid-builder","category-44","category-57","category-43","description-off"],"acf":[],"_links":{"self":[{"href":"https:\/\/the7kennisbank.nl\/en\/wp-json\/wp\/v2\/posts\/4892","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/the7kennisbank.nl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/the7kennisbank.nl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/the7kennisbank.nl\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/the7kennisbank.nl\/en\/wp-json\/wp\/v2\/comments?post=4892"}],"version-history":[{"count":7,"href":"https:\/\/the7kennisbank.nl\/en\/wp-json\/wp\/v2\/posts\/4892\/revisions"}],"predecessor-version":[{"id":5055,"href":"https:\/\/the7kennisbank.nl\/en\/wp-json\/wp\/v2\/posts\/4892\/revisions\/5055"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/the7kennisbank.nl\/en\/wp-json\/wp\/v2\/media\/4996"}],"wp:attachment":[{"href":"https:\/\/the7kennisbank.nl\/en\/wp-json\/wp\/v2\/media?parent=4892"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/the7kennisbank.nl\/en\/wp-json\/wp\/v2\/categories?post=4892"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/the7kennisbank.nl\/en\/wp-json\/wp\/v2\/tags?post=4892"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}