Skip to content

Instantly share code, notes, and snippets.

@benloeffel
Last active May 9, 2022 12:53
Show Gist options
  • Save benloeffel/f9e4147c2a327b48f435981c0de0efc1 to your computer and use it in GitHub Desktop.
Save benloeffel/f9e4147c2a327b48f435981c0de0efc1 to your computer and use it in GitHub Desktop.

Redirect Divi Filterable Portfolio items to custom URLs

Description

Overrides the Divi Filterable Portfolio module to provide the ability to add a custom link for each portfolio item.

Getting Started

Dependencies

  • Tested with Divi Version: 4.15.1
  • Divi Child Theme

Installing

  1. Create a new subfolder in named includes in your divi child theme folder called divi-child.
  2. Create a file named FilterablePortfolio.php inside the includes directory and paste the custom module code and save the file.
  3. At the end of your functions.php paste the function to reference the new file.

How to set the custom links

  1. Set a URL for a project by adding a custom field with the name url and the desired value (example: https://google.com)
  2. (Optional): Opening the link in a new URL by adding a custom field with the name target and the value being _blank.

Authors

Version History

  • 0.1
    • Initial Release

Acknowledgments

<?php
class Custom_ET_Builder_Module_Filterable_Portfolio extends ET_Builder_Module_Type_PostBased
{
function init()
{
$this->name = esc_html__('Filterable Portfolio', 'et_builder');
$this->plural = esc_html__('Filterable Portfolios', 'et_builder');
$this->slug = 'et_pb_filterable_portfolio';
$this->vb_support = 'off';
$this->main_css_element = '%%order_class%%.et_pb_filterable_portfolio';
$this->settings_modal_toggles = array(
'general' => array(
'toggles' => array(
'main_content' => et_builder_i18n('Content'),
'elements' => et_builder_i18n('Elements'),
),
),
'advanced' => array(
'toggles' => array(
'layout' => et_builder_i18n('Layout'),
'overlay' => et_builder_i18n('Overlay'),
'text' => array(
'title' => et_builder_i18n('Text'),
'priority' => 49,
),
'image' => et_builder_i18n('Image'),
),
),
);
$this->advanced_fields = array(
'fonts' => array(
'title' => array(
'label' => et_builder_i18n('Title'),
'css' => array(
'main' => "{$this->main_css_element} h2, {$this->main_css_element} .et_pb_module_header",
'limited_main' => "{$this->main_css_element} h2, {$this->main_css_element} h2 a, {$this->main_css_element} h1.et_pb_module_header, {$this->main_css_element} h1.et_pb_module_header a, {$this->main_css_element} h3.et_pb_module_header, {$this->main_css_element} h3.et_pb_module_header a, {$this->main_css_element} h4.et_pb_module_header, {$this->main_css_element} h4.et_pb_module_header a, {$this->main_css_element} h5.et_pb_module_header, {$this->main_css_element} h5.et_pb_module_header a, {$this->main_css_element} h6.et_pb_module_header, {$this->main_css_element} h6.et_pb_module_header a",
'hover' => "{$this->main_css_element} h2:hover, {$this->main_css_element} h2:hover a, {$this->main_css_element} h1.et_pb_module_header:hover, {$this->main_css_element} h1.et_pb_module_header:hover a, {$this->main_css_element} h3.et_pb_module_header:hover, {$this->main_css_element} h3.et_pb_module_header:hover a, {$this->main_css_element} h4.et_pb_module_header:hover, {$this->main_css_element} h4.et_pb_module_header:hover a, {$this->main_css_element} h5.et_pb_module_header:hover, {$this->main_css_element} h5.et_pb_module_header:hover a, {$this->main_css_element} h6.et_pb_module_header:hover, {$this->main_css_element} h6.et_pb_module_header:hover a",
'important' => 'all',
),
'header_level' => array(
'default' => 'h2',
),
),
'filter' => array(
'label' => esc_html__('Filter Criteria', 'et_builder'),
'hide_text_align' => true,
'css' => array(
'main' => "{$this->main_css_element} .et_pb_portfolio_filter",
'limited_main' => "{$this->main_css_element} .et_pb_portfolio_filter, {$this->main_css_element} .et_pb_portfolio_filter a",
'hover' => "{$this->main_css_element} .et_pb_portfolio_filter:hover, {$this->main_css_element} .et_pb_portfolio_filter:hover a",
'color_hover' => "{$this->main_css_element} .et_pb_portfolio_filter:hover a",
'color' => "{$this->main_css_element} .et_pb_portfolio_filter a",
),
),
'caption' => array(
'label' => esc_html__('Meta', 'et_builder'),
'css' => array(
'main' => "{$this->main_css_element} .post-meta, {$this->main_css_element} .post-meta a",
'hover' => "{$this->main_css_element} .post-meta a:hover",
),
),
'pagination' => array(
'label' => esc_html__('Pagination', 'et_builder'),
'css' => array(
'main' => "{$this->main_css_element} .et_pb_portofolio_pagination a",
'text_align' => "{$this->main_css_element} .et_pb_portofolio_pagination ul",
'hover' => "{$this->main_css_element} .et_pb_portofolio_pagination a:hover",
),
'text_align' => array(
'options' => et_builder_get_text_orientation_options(array('justified'), array()),
),
),
),
'background' => array(
'settings' => array(
'color' => 'alpha',
),
),
'borders' => array(
'default' => array(
'css' => array(
'main' => array(
'border_radii' => "{$this->main_css_element} .et_pb_portfolio_item",
'border_styles' => "{$this->main_css_element} .et_pb_portfolio_item",
),
),
),
'image' => array(
'css' => array(
'main' => array(
'border_radii' => "{$this->main_css_element} .et_portfolio_image",
'border_styles' => "{$this->main_css_element} .et_portfolio_image",
),
),
'label_prefix' => et_builder_i18n('Image'),
'tab_slug' => 'advanced',
'toggle_slug' => 'image',
),
),
'box_shadow' => array(
'default' => array(),
'image' => array(
'label' => esc_html__('Image Box Shadow', 'et_builder'),
'option_category' => 'layout',
'tab_slug' => 'advanced',
'toggle_slug' => 'image',
'css' => array(
'main' => '%%order_class%% .et_pb_portfolio_item .et_portfolio_image',
'overlay' => 'inset',
),
'default_on_fronts' => array(
'color' => '',
'position' => '',
),
),
),
'margin_padding' => array(
'css' => array(
'important' => array('custom_margin'), // needed to overwrite last module margin-bottom styling
),
),
'max_width' => array(
'css' => array(
'module_alignment' => '%%order_class%%.et_pb_filterable_portfolio.et_pb_module',
),
),
'text' => array(
'use_background_layout' => true,
'options' => array(
'background_layout' => array(
'default' => 'light',
'hover' => 'tabs',
),
),
'css' => array(
'main' => '%%order_class%% .et_pb_module_header, %%order_class%% .post-meta',
),
),
'filters' => array(
'css' => array(
'main' => '%%order_class%%',
),
'child_filters_target' => array(
'tab_slug' => 'advanced',
'toggle_slug' => 'image',
),
),
'image' => array(
'css' => array(
'main' => '%%order_class%% .et_portfolio_image',
),
),
'scroll_effects' => array(
'grid_support' => 'yes',
),
'button' => false,
);
$this->custom_css_fields = array(
'portfolio_filters' => array(
'label' => esc_html__('Portfolio Filters', 'et_builder'),
'selector' => '.et_pb_filterable_portfolio .et_pb_portfolio_filters',
'no_space_before_selector' => true,
),
'active_portfolio_filter' => array(
'label' => esc_html__('Active Portfolio Filter', 'et_builder'),
'selector' => '.et_pb_filterable_portfolio .et_pb_portfolio_filters li a.active',
'no_space_before_selector' => true,
),
'portfolio_image' => array(
'label' => esc_html__('Portfolio Image', 'et_builder'),
'selector' => '.et_portfolio_image',
),
'overlay' => array(
'label' => et_builder_i18n('Overlay'),
'selector' => '.et_overlay',
),
'overlay_icon' => array(
'label' => esc_html__('Overlay Icon', 'et_builder'),
'selector' => '.et_overlay:before',
),
'portfolio_title' => array(
'label' => esc_html__('Portfolio Title', 'et_builder'),
'selector' => '.et_pb_portfolio_item h2',
),
'portfolio_post_meta' => array(
'label' => esc_html__('Portfolio Post Meta', 'et_builder'),
'selector' => '.et_pb_portfolio_item .post-meta',
),
'portfolio_pagination' => array(
'label' => esc_html__('Portfolio Pagination', 'et_builder'),
'selector' => '.et_pb_portofolio_pagination',
),
'portfolio_pagination_active' => array(
'label' => esc_html__('Pagination Active Page', 'et_builder'),
'selector' => '.et_pb_portofolio_pagination a.active',
),
);
$this->help_videos = array(
array(
'id' => 'AZheY1hVcJc',
'name' => esc_html__('An introduction to the Filterable Portfolio module', 'et_builder'),
),
);
}
function get_fields()
{
$fields = array(
'fullwidth' => array(
'label' => et_builder_i18n('Layout'),
'type' => 'select',
'option_category' => 'layout',
'options' => array(
'on' => esc_html__('Fullwidth', 'et_builder'),
'off' => esc_html__('Grid', 'et_builder'),
),
'affects' => array(
'hover_icon',
'zoom_icon_color',
'hover_overlay_color',
),
'description' => esc_html__('Choose your desired portfolio layout style.', 'et_builder'),
'computed_affects' => array(
'__projects',
),
'tab_slug' => 'advanced',
'toggle_slug' => 'layout',
'default_on_front' => 'on',
),
'posts_number' => array(
'default' => 10,
'label' => esc_html__('Post Count', 'et_builder'),
'type' => 'text',
'option_category' => 'configuration',
'description' => esc_html__('Define the number of projects that should be displayed per page.', 'et_builder'),
'computed_affects' => array(
'__projects',
),
'toggle_slug' => 'main_content',
),
'include_categories' => array(
'label' => esc_html__('Included Categories', 'et_builder'),
'type' => 'categories',
'option_category' => 'basic_option',
'description' => esc_html__('Select the categories that you would like to include in the feed.', 'et_builder'),
'computed_affects' => array(
'__project_terms',
'__projects',
),
'taxonomy_name' => 'project_category',
'toggle_slug' => 'main_content',
),
'show_title' => array(
'label' => esc_html__('Show Title', 'et_builder'),
'type' => 'yes_no_button',
'option_category' => 'configuration',
'options' => array(
'on' => et_builder_i18n('Yes'),
'off' => et_builder_i18n('No'),
),
'toggle_slug' => 'elements',
'description' => esc_html__('Turn project titles on or off.', 'et_builder'),
'default_on_front' => 'on',
'mobile_options' => true,
'hover' => 'tabs',
),
'show_categories' => array(
'label' => esc_html__('Show Categories', 'et_builder'),
'type' => 'yes_no_button',
'option_category' => 'configuration',
'options' => array(
'on' => et_builder_i18n('Yes'),
'off' => et_builder_i18n('No'),
),
'toggle_slug' => 'elements',
'description' => esc_html__('Turn the category links on or off.', 'et_builder'),
'default_on_front' => 'on',
'mobile_options' => true,
'hover' => 'tabs',
),
'show_pagination' => array(
'label' => esc_html__('Show Pagination', 'et_builder'),
'type' => 'yes_no_button',
'option_category' => 'configuration',
'options' => array(
'on' => et_builder_i18n('Yes'),
'off' => et_builder_i18n('No'),
),
'toggle_slug' => 'elements',
'description' => esc_html__('Enable or disable pagination for this feed.', 'et_builder'),
'default_on_front' => 'on',
'mobile_options' => true,
'hover' => 'tabs',
),
'zoom_icon_color' => array(
'label' => esc_html__('Zoom Icon Color', 'et_builder'),
'description' => esc_html__('Here you can define a custom color for the zoom icon.', 'et_builder'),
'type' => 'color-alpha',
'custom_color' => true,
'depends_show_if' => 'off',
'tab_slug' => 'advanced',
'toggle_slug' => 'overlay',
'sticky' => true,
),
'hover_overlay_color' => array(
'label' => esc_html__('Hover Overlay Color', 'et_builder'),
'type' => 'color-alpha',
'custom_color' => true,
'depends_show_if' => 'off',
'tab_slug' => 'advanced',
'toggle_slug' => 'overlay',
'sticky' => true,
),
'hover_icon' => array(
'label' => esc_html__('Hover Icon Picker', 'et_builder'),
'type' => 'select_icon',
'option_category' => 'configuration',
'class' => array('et-pb-font-icon'),
'depends_show_if' => 'off',
'tab_slug' => 'advanced',
'toggle_slug' => 'overlay',
'sticky' => true,
),
'__project_terms' => array(
'type' => 'computed',
'computed_callback' => array('ET_Builder_Module_Filterable_Portfolio', 'get_portfolio_terms'),
'computed_depends_on' => array(
'include_categories',
),
),
'__projects' => array(
'type' => 'computed',
'computed_callback' => array('ET_Builder_Module_Filterable_Portfolio', 'get_portfolio_item'),
'computed_depends_on' => array(
'show_pagination',
'posts_number',
'include_categories',
'fullwidth',
),
),
);
return $fields;
}
static function get_portfolio_item($args = array(), $conditional_tags = array(), $current_page = array())
{
global $et_fb_processing_shortcode_object, $post;
$global_processing_original_value = $et_fb_processing_shortcode_object;
$defaults = array(
'show_pagination' => 'on',
'include_categories' => '',
'fullwidth' => 'on',
'nopaging' => true,
);
$query_args = array();
$args = wp_parse_args($args, $defaults);
$include_categories = self::filter_invalid_term_ids(explode(',', $args['include_categories']), 'project_category');
if (!empty($include_categories)) {
$query_args['tax_query'] = array(
array(
'taxonomy' => 'project_category',
'field' => 'id',
'terms' => $include_categories,
'operator' => 'IN',
),
);
}
$default_query_args = array(
'post_type' => 'project',
'post_status' => array('publish', 'private'),
'perm' => 'readable',
'posts_per_page' => -1,
);
$query_args = wp_parse_args($query_args, $default_query_args);
// Get portfolio query
$query = new WP_Query($query_args);
// Format portfolio output, and add supplementary data
$width = 'on' === $args['fullwidth'] ? 1080 : 400;
$width = (int) apply_filters('et_pb_portfolio_image_width', $width);
$height = 'on' === $args['fullwidth'] ? 9999 : 284;
$height = (int) apply_filters('et_pb_portfolio_image_height', $height);
$classtext = 'on' === $args['fullwidth'] ? 'et_pb_post_main_image' : '';
$titletext = get_the_title();
// Loop portfolio item and add supplementary data
if ($query->have_posts()) {
$post_index = 0;
while ($query->have_posts()) {
$query->the_post();
ET_Post_Stack::replace($post);
$categories = array();
$category_classes = array('et_pb_portfolio_item');
if ('on' !== $args['fullwidth']) {
$category_classes[] = 'et_pb_grid_item';
}
$categories_object = get_the_terms(get_the_ID(), 'project_category');
if (!empty($categories_object)) {
foreach ($categories_object as $category) {
// Update category classes which will be used for post_class
$category_classes[] = 'project_category_' . urldecode($category->slug);
// Push category data
$categories[] = array(
'id' => $category->term_id,
'slug' => $category->slug,
'label' => $category->name,
'permalink' => get_term_link($category),
);
}
}
// need to disable processing to make sure get_thumbnail() doesn't generate errors
$et_fb_processing_shortcode_object = false;
// Capture the ALT text defined in WP Media Library
$alttext = get_post_meta(get_post_thumbnail_id(), '_wp_attachment_image_alt', true);
// Get thumbnail
$thumbnail = get_thumbnail($width, $height, $classtext, $alttext, $titletext, false, 'Blogimage');
$et_fb_processing_shortcode_object = $global_processing_original_value;
// Append value to query post
$query->posts[$post_index]->post_permalink = get_permalink();
$query->posts[$post_index]->post_thumbnail = print_thumbnail($thumbnail['thumb'], $thumbnail['use_timthumb'], $titletext, $width, $height, '', false, true);
$query->posts[$post_index]->post_categories = $categories;
$query->posts[$post_index]->post_class_name = array_merge(get_post_class('', get_the_ID()), $category_classes);
// Append category classes
$category_classes = implode(' ', $category_classes);
$post_index++;
ET_Post_Stack::pop();
}
ET_Post_Stack::reset();
} elseif (self::is_processing_computed_prop()) {
// This is for the VB
$query = array('posts' => self::get_no_results_template());
}
return $query;
}
static function get_portfolio_terms($args = array(), $conditional_tags = array(), $current_page = array())
{
$portfolio = self::get_portfolio_item($args, $conditional_tags, $current_page);
$terms = array();
if (!empty($portfolio->posts)) {
foreach ($portfolio->posts as $post) {
if (!empty($post->post_categories)) {
foreach ($post->post_categories as $category) {
$terms[$category['slug']] = $category;
}
}
}
}
return $terms;
}
/**
* Renders the module output.
*
* @param array $attrs List of attributes.
* @param string $content Content being processed.
* @param string $render_slug Slug of module that is used for rendering output.
*
* @return string
*/
public function render($attrs, $content, $render_slug)
{
global $post;
$sticky = et_pb_sticky_options();
$multi_view = et_pb_multi_view_options($this);
$fullwidth = $this->props['fullwidth'];
$posts_number = $this->props['posts_number'];
$include_categories = $this->props['include_categories'];
$show_title = $this->props['show_title'];
$show_categories = $this->props['show_categories'];
$show_pagination = $this->props['show_pagination'];
$hover_icon = $this->props['hover_icon'];
$hover_icon_sticky = $sticky->get_value('hover_icon', $this->props);
$header_level = $this->props['title_level'];
$this->generate_styles(
array(
'hover' => false,
'base_attr_name' => 'zoom_icon_color',
'selector' => '%%order_class%% .et_overlay:before',
'css_property' => 'color',
'render_slug' => $render_slug,
'important' => true,
'type' => 'color',
)
);
$this->generate_styles(
array(
'hover' => false,
'base_attr_name' => 'hover_overlay_color',
'selector' => '%%order_class%% .et_overlay',
'css_property' => array('background-color', 'border-color'),
'render_slug' => $render_slug,
'type' => 'color',
)
);
$projects = self::get_portfolio_item(
array(
'show_pagination' => $show_pagination,
'posts_number' => $posts_number,
'include_categories' => $include_categories,
'fullwidth' => $fullwidth,
)
);
$categories_included = array();
$portfolio_order = self::_get_index(array(self::INDEX_MODULE_ORDER, $render_slug));
$items_count = 0;
$overlay_output = 'on' === $fullwidth ? '' : ET_Builder_Module_Helper_Overlay::render(
array(
'icon' => $hover_icon,
'icon_sticky' => $hover_icon_sticky,
)
);
if ('on' !== $fullwidth) {
// Overlay Icon Styles.
$this->generate_styles(
array(
'hover' => false,
'utility_arg' => 'icon_font_family',
'render_slug' => $render_slug,
'base_attr_name' => 'hover_icon',
'important' => true,
'selector' => '%%order_class%% .et_overlay:before',
'processor' => array(
'ET_Builder_Module_Helper_Style_Processor',
'process_extended_icon',
),
)
);
}
ob_start();
if ($projects->post_count > 0) {
while ($projects->have_posts()) {
$projects->the_post();
ET_Post_Stack::replace($post);
$category_classes = array();
$categories = get_the_terms(get_the_ID(), 'project_category');
if ($categories) {
foreach ($categories as $category) {
$category_classes[] = 'project_category_' . urldecode($category->slug);
$categories_included[] = $category->term_id;
}
}
$category_classes = implode(' ', $category_classes);
$item_class = sprintf('et_pb_filterable_portfolio_item_%1$s_%2$s', $portfolio_order, $items_count);
$items_count++;
$main_post_class = sprintf(
'et_pb_portfolio_item%1$s %2$s %3$s',
('on' !== $fullwidth ? ' et_pb_grid_item' : ''),
$category_classes,
$item_class
);
?>
<div id="post-<?php the_ID(); ?>" <?php post_class($main_post_class); ?>>
<?php
$thumb = '';
$width = 'on' === $fullwidth ? 1080 : 400;
$width = (int) apply_filters('et_pb_portfolio_image_width', $width);
$height = 'on' === $fullwidth ? 9999 : 284;
$height = (int) apply_filters('et_pb_portfolio_image_height', $height);
$classtext = 'on' === $fullwidth ? 'et_pb_post_main_image' : '';
$titletext = get_the_title();
/**
* Custom Filterable Portfolio Module Modification END
*/
// Modified code to pick up the value set for custom field 'url' and apply as the portfolio link
$permalink = get_post_meta(get_the_ID(), 'url', true);
// Fallback to default setting if url custom field or value not set
if ('' == $permalink) {
$permalink = get_permalink();
}
// Modified code to pick up the value set for custom field 'target' and apply as the portfolio link target to allow you to open links in a new window if you want
$linktarget = get_post_meta(get_the_ID(), 'target', true);
if ('' == $linktarget) {
$linktarget = '_self';
}
/**
* Custom Filterable Portfolio Module Modification END
*/
$post_meta = get_the_term_list(get_the_ID(), 'project_category', '', ', ');
$alttext = get_post_meta(get_post_thumbnail_id(), '_wp_attachment_image_alt', true);
$thumbnail = get_thumbnail($width, $height, $classtext, $alttext, $titletext, false, 'Blogimage');
$thumb = $thumbnail['thumb'];
if ('' !== $thumb) :
?>
<a href="<?php echo esc_url($permalink); ?>" target="<?php echo $linktarget; ?>">
<span class="et_portfolio_image">
<?php print_thumbnail($thumb, $thumbnail['use_timthumb'], $titletext, $width, $height); ?>
<?php
if ('on' !== $fullwidth) {
echo et_core_esc_previously($overlay_output);
}
?>
</span>
</a>
<?php
endif;
$multi_view->render_element(
array(
'tag' => et_pb_process_header_level($header_level, 'h2'),
'content' => sprintf('<a href="%1$s">%2$s</a>', esc_url($permalink), et_core_intentionally_unescaped($titletext, 'html')),
'attrs' => array(
'class' => 'et_pb_module_header',
),
'visibility' => array(
'show_title' => 'on',
),
'required' => array(
'show_title' => 'on',
),
),
true
);
$multi_view->render_element(
array(
'tag' => 'p',
'content' => et_core_esc_wp($post_meta),
'attrs' => array(
'class' => 'post-meta',
),
'visibility' => array(
'show_categories' => 'on',
),
'required' => array(
'show_categories' => 'on',
),
),
true
);
?>
</div>
<?php
ET_Post_Stack::pop();
}
ET_Post_Stack::reset();
}
if (!$posts = ob_get_clean()) {
$posts = self::get_no_results_template();
$category_filters = '';
} else {
$categories_included = explode(',', $include_categories);
$terms_args = array(
'include' => $categories_included,
'orderby' => 'name',
'order' => 'ASC',
);
$terms = get_terms('project_category', $terms_args);
$category_filters = '<ul class="clearfix">';
$category_filters .= sprintf(
'<li class="et_pb_portfolio_filter et_pb_portfolio_filter_all"><a href="#" class="active" data-category-slug="all">%1$s</a></li>',
esc_html__('All', 'et_builder')
);
foreach ($terms as $term) {
$category_filters .= sprintf(
'<li class="et_pb_portfolio_filter"><a href="#" data-category-slug="%1$s">%2$s</a></li>',
esc_attr(urldecode($term->slug)),
esc_html($term->name)
);
}
$category_filters .= '</ul>';
}
$video_background = $this->video_background();
$parallax_image_background = $this->get_parallax_image_background();
// Images: Add CSS Filters and Mix Blend Mode rules (if set)
if (isset($this->advanced_fields['image']['css'])) {
$this->add_classname(
$this->generate_css_filters(
$render_slug,
'child_',
self::$data_utils->array_get($this->advanced_fields['image']['css'], 'main', '%%order_class%%')
)
);
}
// Module classnames
$this->add_classname(
array(
'et_pb_portfolio',
$this->get_text_orientation_classname(),
)
);
// Background layout class names.
$background_layout_class_names = et_pb_background_layout_options()->get_background_layout_class($this->props);
$this->add_classname($background_layout_class_names);
if ('on' === $fullwidth) {
$this->add_classname('et_pb_filterable_portfolio_fullwidth');
} else {
$this->add_classname(
array(
'et_pb_filterable_portfolio_grid',
'clearfix',
)
);
}
// Background layout data attributes.
$data_background_layout = et_pb_background_layout_options()->get_background_layout_attrs($this->props);
$pagination_classes_multi_view_attr = $multi_view->render_attrs(
array(
'classes' => array(
'clearfix' => array(
'show_pagination' => 'on',
),
'no_pagination' => array(
'show_pagination' => 'off',
),
),
)
);
$pagination_multi_view = $multi_view->render_element(
array(
'tag' => 'div',
'attrs' => array(
'class' => 'et_pb_portofolio_pagination',
),
'visibility' => array(
'show_pagination' => 'on',
),
'required' => array(
'show_pagination' => 'on',
),
)
);
$output = sprintf(
'<div%4$s class="%1$s" data-posts-number="%5$d"%8$s%11$s>
%10$s
%9$s
%13$s
%14$s
<div class="et_pb_portfolio_filters clearfix">%2$s</div>
<div class="et_pb_portfolio_items_wrapper %6$s"%12$s>
<div class="et_pb_portfolio_items">%3$s</div>
</div>
%7$s
</div>',
$this->module_classname($render_slug),
$category_filters,
$posts,
$this->module_id(),
esc_attr($posts_number), // #5
('on' === $multi_view->get_value('show_pagination') ? 'clearfix' : 'no_pagination'),
$pagination_multi_view,
is_rtl() ? ' data-rtl="true"' : '',
$video_background,
$parallax_image_background, // #10
et_core_esc_previously($data_background_layout),
$pagination_classes_multi_view_attr,
et_core_esc_previously($this->background_pattern()), // #13
et_core_esc_previously($this->background_mask()) // #14
);
return $output;
}
}
<?php
/**
* Custom Filterable Portfolio Module
*/
function divi_custom_filterable_portfolio_module()
{
get_template_part('/includes/FilterablePortfolio');
$blabla = new Custom_ET_Builder_Module_Filterable_Portfolio();
remove_shortcode('et_pb_filterable_portfolio');
add_shortcode('et_pb_filterable_portfolio', array($blabla, '_shortcode_callback'));
}
add_action('et_builder_ready', 'divi_custom_filterable_portfolio_module');
function divi_custom_filterable_portfolio_class($classlist)
{
// Blog Module 'classname' overwrite.
$classlist['et_pb_filterable_portfolio'] = array('classname' => 'Custom_ET_Builder_Module_Filterable_Portfolio',);
return $classlist;
}
add_filter('et_module_classes', 'divi_custom_filterable_portfolio_class');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment