Enhancing the search functionality on your Divi-powered website can significantly improve user experience and help visitors find the content they are looking for more efficiently.
In this article, we will guide you through the process of enabling products and other custom post types in Divi's Search Module.
The Divi Search Module works out of the box only with the standard post types (Post and Page). To enable other post types, like products, you will need to add custom PHP code.
Enable Products and Other Post Types in Divi's Search Module using a Child theme
Install and Activate a Child theme for Divi
Go to WordPress Dashboard → Appearance → Theme File Editor
Select the functions.php file from the child theme
Add this PHP code after the existing code
function custom_remove_default_et_pb_custom_search() {
remove_action( 'pre_get_posts', 'et_pb_custom_search' );
add_action( 'pre_get_posts', 'custom_et_pb_custom_search' );
}
add_action( 'wp_loaded', 'custom_remove_default_et_pb_custom_search' );
function custom_et_pb_custom_search( $query = false ) {
if ( is_admin() || ! is_a( $query, 'WP_Query' ) || ! $query->is_search ) {
return;
}
if ( isset( $_GET['et_pb_searchform_submit'] ) ) {
$postTypes = array();
if ( ! isset($_GET['et_pb_include_posts'] ) && ! isset( $_GET['et_pb_include_pages'] ) ) {
$postTypes = array( 'post' );
}
if ( isset( $_GET['et_pb_include_pages'] ) ) {
$postTypes = array( 'page' );
}
if ( isset( $_GET['et_pb_include_posts'] ) ) {
$postTypes[] = 'post';
}
/* BEGIN Add custom post types */
$postTypes[] = 'product';
/* END Add custom post types */
$query->set( 'post_type', $postTypes );
if ( ! empty( $_GET['et_pb_search_cat'] ) ) {
$categories_array = explode( ',', $_GET['et_pb_search_cat'] );
$query->set( 'category__not_in', $categories_array );
}
if ( isset( $_GET['et-posts-count'] ) ) {
$query->set( 'posts_per_page', (int) $_GET['et-posts-count'] );
}
}
}
Enable Products and Other Post Types in Divi's Search Module using the Code Snippets plugin
Install and activate the Code Snippets plugin
Go to WordPress Dashboard → Snippets → Add new and create a new PHP snippet
Give the snippet a name and copy/paste the following code:
function custom_remove_default_et_pb_custom_search() {
remove_action( 'pre_get_posts', 'et_pb_custom_search' );
add_action( 'pre_get_posts', 'custom_et_pb_custom_search' );
}
add_action( 'wp_loaded', 'custom_remove_default_et_pb_custom_search' );
function custom_et_pb_custom_search( $query = false ) {
if ( is_admin() || ! is_a( $query, 'WP_Query' ) || ! $query->is_search ) {
return;
}
if ( isset( $_GET['et_pb_searchform_submit'] ) ) {
$postTypes = array();
if ( ! isset($_GET['et_pb_include_posts'] ) && ! isset( $_GET['et_pb_include_pages'] ) ) {
$postTypes = array( 'post' );
}
if ( isset( $_GET['et_pb_include_pages'] ) ) {
$postTypes = array( 'page' );
}
if ( isset( $_GET['et_pb_include_posts'] ) ) {
$postTypes[] = 'post';
}
/* BEGIN Add custom post types */
$postTypes[] = 'product';
/* END Add custom post types */
$query->set( 'post_type', $postTypes );
if ( ! empty( $_GET['et_pb_search_cat'] ) ) {
$categories_array = explode( ',', $_GET['et_pb_search_cat'] );
$query->set( 'category__not_in', $categories_array );
}
if ( isset( $_GET['et-posts-count'] ) ) {
$query->set( 'posts_per_page', (int) $_GET['et-posts-count'] );
}
}
}Save the snippet.
Note: If you need to include other custom post types in the search results, you can edit this part of the code:
/* BEGIN Add custom post types */
$postTypes[] = 'product';
/* END Add custom post types */
For example, to include the project custom post type, the code will look like this:
/* BEGIN Add custom post types */
$postTypes[] = 'product';
$postTypes[] = 'project';
/* END Add custom post types */