. 'bavel.svg', ], 'rabbet' => [ 'title' => esc_html__( 'Rabbet', 'essential-addons-for-elementor-lite' ), 'image' => $image_dir_url . 'rabbet.svg', ], 'chevron-left' => [ 'title' => esc_html__( 'Chevron Left', 'essential-addons-for-elementor-lite' ), 'image' => $image_dir_url . 'chevron-left.svg', ], 'chevron-right' => [ 'title' => esc_html__( 'Chevron Right', 'essential-addons-for-elementor-lite' ), 'image' => $image_dir_url . 'chevron-right.svg', ], 'star' => [ 'title' => esc_html__( 'Start', 'essential-addons-for-elementor-lite' ), 'image' => $image_dir_url . 'star.svg', ], ], 'default' => 'bavel', 'toggle' => false, 'image_choose' => true, 'css_class' => 'eael-image-masking-choose', 'condition' => array_merge( $condition, [ 'eael_image_masking_enable_custom_clip_path' . $tab . '!' => 'yes' ] ) ] ); $element->add_control( 'eael_image_masking_enable_custom_clip_path' . $tab, [ 'label' => esc_html__( 'Use Custom Clip Path', 'essential-addons-for-elementor-lite' ), 'type' => Controls_Manager::SWITCHER, 'return_value' => 'yes', 'condition' => $condition, ] ); $element->add_control( 'eael_image_masking_custom_clip_path' . $tab, [ 'label' => '', 'type' => Controls_Manager::TEXTAREA, 'rows' => 10, 'label_block' => true, 'dynamic' => [ 'active' => false, ], 'ai' => [ 'active' => false, ], 'default' => 'clip-path: polygon(50% 0%, 80% 10%, 100% 35%, 100% 70%, 80% 90%, 50% 100%, 20% 90%, 0% 70%, 0% 35%, 20% 10%);', 'placeholder' => 'clip-path: polygon(50% 0%, 0% 100%, 100% 100%);', 'description' => __( 'Enter your custom clip path value. You can use Clippy to generate your custom clip path.', 'essential-addons-for-elementor-lite' ), 'condition' => array_merge( $condition, [ 'eael_image_masking_enable_custom_clip_path' . $tab => 'yes' ] ), ] ); $condition = [ 'eael_image_masking_type' => 'image' ]; if( '_hover' === $tab ){ $condition['eael_image_masking_hover_effect'] = 'yes'; } $svg_url = EAEL_PLUGIN_URL . 'assets/front-end/img/image-masking/svg-shapes/'; $element->add_control( 'eael_image_masking_svg' . $tab, [ 'label' => esc_html__( 'Choose Shape', 'essential-addons-for-elementor-lite' ), 'label_block' => true, 'type' => Controls_Manager::CHOOSE, 'options' => [ 'polygon' => [ 'title' => esc_html__( 'Polygon', 'essential-addons-for-elementor-lite' ), 'image' => $svg_url . 'polygon.svg', ], 'rounded' => [ 'title' => esc_html__( 'Rounded', 'essential-addons-for-elementor-lite' ), 'image' => $svg_url . 'rounded.svg', ], 'arch-down' => [ 'title' => esc_html__( 'Arch Down', 'essential-addons-for-elementor-lite' ), 'image' => $svg_url . 'arch-down.svg', ], 'arch-group' => [ 'title' => esc_html__( 'Arch Group', 'essential-addons-for-elementor-lite' ), 'image' => $svg_url . 'arch-group.svg', ], 'arch-up' => [ 'title' => esc_html__( 'Arch Up', 'essential-addons-for-elementor-lite' ), 'image' => $svg_url . 'arch-up.svg', ], 'asterisk' => [ 'title' => esc_html__( 'Asterisk', 'essential-addons-for-elementor-lite' ), 'image' => $svg_url . 'asterisk.svg', ], 'blob' => [ 'title' => esc_html__( 'Blob', 'essential-addons-for-elementor-lite' ), 'image' => $svg_url . 'blob.svg', ], 'blocks' => [ 'title' => esc_html__( 'Blocks', 'essential-addons-for-elementor-lite' ), 'image' => $svg_url . 'blocks.svg', ], 'brash-1' => [ 'title' => esc_html__( 'Brash 1', 'essential-addons-for-elementor-lite' ), 'image' => $svg_url . 'brash-1.svg', ], 'brash-2' => [ 'title' => esc_html__( 'Brash 2', 'essential-addons-for-elementor-lite' ), 'image' => $svg_url . 'brash-2.svg', ], 'brash-3' => [ 'title' => esc_html__( 'Brash 3', 'essential-addons-for-elementor-lite' ), 'image' => $svg_url . 'brash-3.svg', ], 'burst' => [ 'title' => esc_html__( 'Burst', 'essential-addons-for-elementor-lite' ), 'image' => $svg_url . 'burst.svg', ], 'chat' => [ 'title' => esc_html__( 'Chat', 'essential-addons-for-elementor-lite' ), 'image' => $svg_url . 'chat.svg', ], 'hex-tile' => [ 'title' => esc_html__( 'Hex Tile', 'essential-addons-for-elementor-lite' ), 'image' => $svg_url . 'hex-tile.svg', ], 'leaf' => [ 'title' => esc_html__( 'Leaf', 'essential-addons-for-elementor-lite' ), 'image' => $svg_url . 'leaf.svg', ], 'oval' => [ 'title' => esc_html__( 'Oval', 'essential-addons-for-elementor-lite' ), 'image' => $svg_url . 'oval.svg', ], 'pixel-cross' => [ 'title' => esc_html__( 'Pixel Cross', 'essential-addons-for-elementor-lite' ), 'image' => $svg_url . 'pixel-cross.svg', ], 'quote' => [ 'title' => esc_html__( 'Quote', 'essential-addons-for-elementor-lite' ), 'image' => $svg_url . 'quote.svg', ], 'star-dimond' => [ 'title' => esc_html__( 'Star Diamond', 'essential-addons-for-elementor-lite' ), 'image' => $svg_url . 'star-dimond.svg', ], 'upload' => [ 'title' => esc_html__( 'Upload', 'essential-addons-for-elementor-lite' ), 'image' => $svg_url . 'upload.svg', 'fullwidth' => true, ], ], 'toggle' => false, 'image_choose' => true, 'css_class' => 'eael-image-masking-choose col-5', 'default' => 'polygon', 'condition' => $condition ] ); if ( !apply_filters('eael/pro_enabled', false ) ) { $element->add_control( 'eael_image_masking_upload_pro_message' . $tab, [ 'label' => '', 'type' => Controls_Manager::RAW_HTML, 'raw' => '
' . __('This feature is available in the pro version.', 'essential-addons-for-elementor-lite') . '
' . __('Upgrade to EA PRO', 'essential-addons-for-elementor-lite') . '
', 'content_classes' => 'eael-pro-notice', 'condition' => array_merge( $condition, [ 'eael_image_masking_svg' . $tab => 'upload' ] ) ] ); } else { do_action( 'eael/image-masking/image_control', $element, array_merge( $condition, [ 'eael_image_masking_svg' . $tab => 'upload' ] ), $tab ); } if( '_hover' === $tab ){ $element->add_control( 'eael_image_masking_hover_selector', [ 'label' => esc_html__( 'Hover Selector', 'essential-addons-for-elementor-lite' ), 'type' => Controls_Manager::TEXT, 'label_block' => true, 'dynamic' => [ 'active' => false, ], 'ai' => [ 'active' => true, ], 'placeholder' => '.not-masked-element, #not-masked-element', 'description' => __( 'Enter the selector for the element you want to apply the hover effect on. If you leave this field empty, the hover effect will be applied on hover for full section.', 'essential-addons-for-elementor-lite' ), 'condition' => [ 'eael_image_masking_hover_effect' => 'yes', ] ] ); } } public function register_controls( $element ) { $element->start_controls_section( 'eael_image_masking_section', [ 'label' => __( ' Image Masking', 'essential-addons-for-elementor-lite' ), 'tab' => Controls_Manager::TAB_ADVANCED ] ); $element->add_control( 'eael_enable_image_masking', [ 'label' => __( 'Enable Image Masking', 'essential-addons-for-elementor-lite' ), 'type' => Controls_Manager::SWITCHER ] ); $element->add_control( 'eael_image_masking_type', [ 'label' => esc_html__( 'Type', 'essential-addons-for-elementor-lite' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'image' => [ 'title' => esc_html__( 'Image/SVG Masking', 'essential-addons-for-elementor-lite' ), 'icon' => 'eicon-image', ], 'clip' => [ 'title' => esc_html__( 'Clip Path', 'essential-addons-for-elementor-lite' ), 'icon' => 'eicon-integration', ], 'morphing' => [ 'title' => esc_html__( 'Morphing', 'essential-addons-for-elementor-lite' ), 'icon' => 'eicon-animation', ] ], 'condition' => [ 'eael_enable_image_masking' => 'yes' ], 'default' => 'clip', 'toggle' => false, ] ); $element->start_controls_tabs( 'eael_image_masking_tabs', [ 'condition' => [ 'eael_enable_image_masking' => 'yes', 'eael_image_masking_type!' => 'morphing' ] ] ); $element->start_controls_tab( 'eael_image_masking_normal_tab', [ 'label' => esc_html__( 'Normal', 'essential-addons-for-elementor-lite' ), ] ); $this->masking_controllers( $element ); $element->end_controls_tab(); $element->start_controls_tab( 'eael_image_masking_hover_tab', [ 'label' => esc_html__( 'Hover', 'essential-addons-for-elementor-lite' ), ] ); $this->masking_controllers( $element, '_hover' ); $element->end_controls_tab(); $element->end_controls_tabs(); $element->add_control( 'eael_image_masking_image_size', [ 'label' => esc_html__( 'Size', 'essential-addons-for-elementor-lite' ), 'type' => Controls_Manager::SELECT, 'default' => 'contain', 'options' => [ '' => esc_html__( 'Default', 'essential-addons-for-elementor-lite' ), 'auto' => esc_html__( 'Auto', 'essential-addons-for-elementor-lite' ), 'cover' => esc_html__( 'Cover', 'essential-addons-for-elementor-lite' ), 'contain' => esc_html__( 'Contain', 'essential-addons-for-elementor-lite' ), 'custom' => esc_html__( 'Custom', 'essential-addons-for-elementor-lite' ), ], 'condition' => [ 'eael_enable_image_masking' => 'yes', 'eael_image_masking_type' => 'image' ], 'selectors' => [ '{{WRAPPER}} img' => 'mask-size: {{VALUE}}; -webkit-mask-size: {{VALUE}};', ], ] ); $element->add_control( 'eael_image_masking_image_custom_size_custom', [ 'label' => '', 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', '%' ], 'range' => [ 'px' => [ 'min' => 0, 'max' => 1000, 'step' => 5, ], '%' => [ 'min' => 0, 'max' => 100, ], ], 'selectors' => [ '{{WRAPPER}} img' => 'mask-size: {{SIZE}}{{UNIT}}; -webkit-mask-size: {{SIZE}}{{UNIT}};', ], 'condition' => [ 'eael_enable_image_masking' => 'yes', 'eael_image_masking_type' => 'image', 'eael_image_masking_image_size' => 'custom' ], ] ); $element->add_control( 'eael_image_masking_image_position', [ 'label' => esc_html__( 'Position', 'essential-addons-for-elementor-lite' ), 'type' => Controls_Manager::SELECT, 'default' => 'center center', 'options' => [ '' => esc_html__( 'Default', 'essential-addons-for-elementor-lite' ), 'left top' => esc_html__( 'Left Top', 'essential-addons-for-elementor-lite' ), 'left center' => esc_html__( 'Left Center', 'essential-addons-for-elementor-lite' ), 'left bottom' => esc_html__( 'Left Bottom', 'essential-addons-for-elementor-lite' ), 'center top' => esc_html__( 'Center Top', 'essential-addons-for-elementor-lite' ), 'center center' => esc_html__( 'Center Center', 'essential-addons-for-elementor-lite' ), 'center bottom' => esc_html__( 'Center Bottom', 'essential-addons-for-elementor-lite' ), 'right top' => esc_html__( 'Right Top', 'essential-addons-for-elementor-lite' ), 'right center' => esc_html__( 'Right Center', 'essential-addons-for-elementor-lite' ), 'right bottom' => esc_html__( 'Right Bottom', 'essential-addons-for-elementor-lite' ) ], 'condition' => [ 'eael_enable_image_masking' => 'yes', 'eael_image_masking_type' => 'image' ], 'selectors' => [ '{{WRAPPER}} img' => 'mask-position: {{VALUE}}; -webkit-mask-position: {{VALUE}};', ], ] ); $element->add_control( 'eael_image_masking_image_repeat', [ 'label' => esc_html__( 'Repeat', 'essential-addons-for-elementor-lite' ), 'type' => Controls_Manager::SELECT, 'default' => 'no-repeat', 'options' => [ 'no-repeat' => esc_html__( 'No-repeat', 'essential-addons-for-elementor-lite' ), 'repeat' => esc_html__( 'Repeat', 'essential-addons-for-elementor-lite' ), 'repeat-x' => esc_html__( 'Repeat-x', 'essential-addons-for-elementor-lite' ), 'repeat-y' => esc_html__( 'Repeat-y', 'essential-addons-for-elementor-lite' ), ], 'condition' => [ 'eael_enable_image_masking' => 'yes', 'eael_image_masking_type' => 'image' ], 'selectors' => [ '{{WRAPPER}} img' => 'mask-repeat: {{VALUE}}; -webkit-mask-repeat: {{VALUE}};', ], ] ); if ( !apply_filters('eael/pro_enabled', false ) ) { $element->add_control( 'eael_image_masking_pro_message', [ 'label' => '', 'type' => Controls_Manager::RAW_HTML, 'raw' => '
' . __('This feature is available in the pro version.', 'essential-addons-for-elementor-lite') . '
' . __('Upgrade to EA PRO', 'essential-addons-for-elementor-lite') . '
', 'content_classes' => 'eael-pro-notice', 'condition' => [ 'eael_enable_image_masking' => 'yes', 'eael_image_masking_type' => 'morphing' ] ] ); } else { do_action( 'eael/image_masking/morphing_controls', $element ); } $element->end_controls_section(); } private function extract_first_path_d($svg) { // Try DOM first libxml_use_internal_errors(true); $dom = new \DOMDocument(); if (@$dom->loadXML($svg)) { $path = $dom->getElementsByTagName('path')->item(0); if ($path) { return $path->getAttribute('d'); } } // Regex fallback if (preg_match('/]+d="([^"]+)"/i', $svg, $match)) { return $match[1]; } return null; // not found } public function before_render( $element ) { $is_enabled = $element->get_settings_for_display( 'eael_enable_image_masking' ); $settings = $element->get_settings_for_display(); if ( 'yes' === $is_enabled ) { $type = $settings['eael_image_masking_type']; $element_id = $element->get_id(); $style = ''; $element->add_render_attribute( '_wrapper', 'class', 'eael-image-masking-' . esc_attr( $element_id ) ); if( 'clip' === $type ){ $clip_path_value = ''; if( 'yes' === $settings['eael_image_masking_enable_custom_clip_path'] ){ $clip_path_value = $settings['eael_image_masking_custom_clip_path']; $clip_path_value = str_replace( 'clip-path: ', '', $clip_path_value ); } else { $clip_path = $settings['eael_image_masking_clip_path']; $clip_path_value = $this->clip_paths( $clip_path ); } if( $clip_path_value ) { $style .= '.eael-image-masking-'. esc_html( $element_id ) .' img {clip-path: '.$clip_path_value.'}'; } if( 'yes' === $settings['eael_image_masking_hover_effect'] ){ $hover_clip_path_value = ''; if( 'yes' === $settings['eael_image_masking_enable_custom_clip_path_hover'] ){ $hover_clip_path_value = $settings['eael_image_masking_custom_clip_path_hover']; $hover_clip_path_value = str_replace( 'clip-path: ', '', $hover_clip_path_value ); } else { $hover_clip_path = $settings['eael_image_masking_clip_path_hover']; $hover_clip_path_value = $this->clip_paths( $hover_clip_path ); } if( $hover_clip_path_value ) { $hover_selector = $settings['eael_image_masking_hover_selector']; if( $hover_selector ){ $hover_selector = ' ' . trim( $hover_selector ); } $style .= '.eael-image-masking-'. esc_html( $element_id ) . $hover_selector . ':hover img {clip-path: '.$hover_clip_path_value.'}'; } $hover_selector = $settings['eael_image_masking_hover_selector']; if( $hover_selector ){ $hover_selector = ' ' . trim( $hover_selector ); } $style .= '.eael-image-masking-'. esc_html( $element_id ) . $hover_selector . ':hover img {clip-path: '.$hover_clip_path_value.'}'; } } else if( 'image' === $type ) { $svg = $element->get_settings_for_display( 'eael_image_masking_svg' ); $mask_url = ''; if( 'upload' !== $svg ){ $svg_url = self::$svg_dir_url; $mask_url = $svg_url . $svg . '.svg'; } else if( 'upload' === $svg ){ $image = $element->get_settings_for_display( 'eael_image_masking_image' ); $mask_url = isset( $image['url'] ) ? $image['url'] : ''; } if( $mask_url ) { $style .= '.eael-image-masking-'. esc_html( $element_id ) .' img {mask-image: url('.$mask_url.'); -webkit-mask-image: url('.$mask_url.');}'; } if( 'yes' === $settings['eael_image_masking_hover_effect'] ){ $hover_image = $element->get_settings_for_display( 'eael_image_masking_svg_hover' ); $hover_mask_url = ''; if( 'upload' !== $hover_image ){ $svg = $element->get_settings_for_display( 'eael_image_masking_svg' ); $svg_url = self::$svg_dir_url; $hover_mask_url = $svg_url . $hover_image . '.svg'; } else if( 'upload' === $hover_image ){ $hover_image = $element->get_settings_for_display( 'eael_image_masking_image_hover' ); $hover_mask_url = $hover_image['url'] ?? ''; } if( $hover_mask_url ) { $hover_selector = $element->get_settings_for_display( 'eael_image_masking_hover_selector' ); if( $hover_selector ){ $hover_selector = ' ' . trim( $hover_selector ); } $style .= '.eael-image-masking-'. esc_html( $element_id ) . $hover_selector .':hover img {mask-image: url('.$hover_mask_url.'); -webkit-mask-image: url('.$hover_mask_url.');}'; } } } else if( 'morphing' === $type ) { $morphing_options = apply_filters( 'eael/image_masking/morphing_options', [], $element, $element_id ); if( !empty( $morphing_options ) ){ if( !empty( $morphing_options['svg_html'] ) ){ //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped echo $morphing_options['svg_html']; } unset( $morphing_options['svg_html'] ); $element->add_render_attribute( '_wrapper', 'data-morphing-options', wp_json_encode( $morphing_options ) ); $element->add_render_attribute( '_wrapper', 'class', 'eael-morphing-enabled' ); } } if( $style ){ echo ''; } } } }ordpress-seo' ), 'remove_powered_by_header' => \__( 'Powered by HTTP header', 'wordpress-seo' ), ]; $this->permalink_cleanup_settings = [ 'clean_campaign_tracking_urls' => \__( 'Campaign tracking URL parameters', 'wordpress-seo' ), 'clean_permalinks' => \__( 'Unregistered URL parameters', 'wordpress-seo' ), ]; $this->search_cleanup_settings = [ 'search_cleanup' => \__( 'Filter search terms', 'wordpress-seo' ), 'search_cleanup_emoji' => \__( 'Filter searches with emojis and other special characters', 'wordpress-seo' ), 'search_cleanup_patterns' => \__( 'Filter searches with common spam patterns', 'wordpress-seo' ), 'deny_search_crawling' => \__( 'Prevent search engines from crawling site search URLs', 'wordpress-seo' ), 'redirect_search_pretty_urls' => \__( 'Redirect pretty URLs for search pages to raw format', 'wordpress-seo' ), ]; $this->unused_resources_settings = [ 'remove_emoji_scripts' => \__( 'Emoji scripts', 'wordpress-seo' ), 'deny_wp_json_crawling' => \__( 'Prevent search engines from crawling /wp-json/', 'wordpress-seo' ), 'deny_adsbot_crawling' => \__( 'Prevent Google AdsBot from crawling', 'wordpress-seo' ), ]; } /** * Adds content to the Crawl Cleanup network tab. * * @param Yoast_Form $yform The yoast form object. * * @return void */ public function add_crawl_settings_tab_content_network( $yform ) { $this->add_crawl_settings( $yform ); } /** * Print the settings sections. * * @param Yoast_Form $yform The Yoast form class. * * @return void */ private function add_crawl_settings( $yform ) { $this->print_toggles( $this->basic_settings, $yform, \__( 'Basic crawl settings', 'wordpress-seo' ) ); $this->print_toggles( $this->feed_settings, $yform, \__( 'Feed crawl settings', 'wordpress-seo' ) ); $this->print_toggles( $this->unused_resources_settings, $yform, \__( 'Remove unused resources', 'wordpress-seo' ) ); $first_search_setting = \array_slice( $this->search_cleanup_settings, 0, 1 ); $rest_search_settings = \array_slice( $this->search_cleanup_settings, 1 ); $search_settings_toggles = [ 'off' => \__( 'Disabled', 'wordpress-seo' ), 'on' => \__( 'Enabled', 'wordpress-seo' ), ]; $this->print_toggles( $first_search_setting, $yform, \__( 'Search cleanup settings', 'wordpress-seo' ), $search_settings_toggles ); $this->print_toggles( $rest_search_settings, $yform, '', $search_settings_toggles ); $permalink_warning = \sprintf( /* Translators: %1$s expands to an opening anchor tag for a link leading to the Yoast SEO page of the Permalink Cleanup features, %2$s expands to a closing anchor tag. */ \esc_html__( 'These are expert features, so make sure you know what you\'re doing before removing the parameters. %1$sRead more about how your site can be affected%2$s.', 'wordpress-seo' ), '', '' ); $this->print_toggles( $this->permalink_cleanup_settings, $yform, \__( 'Permalink cleanup settings', 'wordpress-seo' ), [], $permalink_warning ); // Add the original option as hidden, so as not to lose any values if it's disabled and the form is saved. $yform->hidden( 'clean_permalinks_extra_variables', 'clean_permalinks_extra_variables' ); } /** * Prints a list of toggles for an array of settings with labels. * * @param array $settings The settings being displayed. * @param Yoast_Form $yform The Yoast form class. * @param string $title Optional title for the settings being displayed. * @param array $toggles Optional naming of the toggle buttons. * @param string $warning Optional warning to be displayed above the toggles. * * @return void */ private function print_toggles( array $settings, Yoast_Form $yform, $title = '', $toggles = [], $warning = '' ) { if ( ! empty( $title ) ) { echo '

', \esc_html( $title ), '

'; } if ( ! empty( $warning ) ) { // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped in Alert_Presenter. echo new Alert_Presenter( $warning, 'warning' ); } if ( empty( $toggles ) ) { $toggles = [ 'off' => \__( 'Keep', 'wordpress-seo' ), 'on' => \__( 'Remove', 'wordpress-seo' ), ]; } $setting_prefix = WPSEO_Option::ALLOW_KEY_PREFIX; $toggles = [ // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch -- Reason: text is originally from Yoast SEO. 'on' => \__( 'Allow Control', 'wordpress-seo' ), // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch -- Reason: text is originally from Yoast SEO. 'off' => \__( 'Disable', 'wordpress-seo' ), ]; foreach ( $settings as $setting => $label ) { $attr = []; $variable = $setting_prefix . $setting; if ( $this->should_feature_be_disabled_permalink( $setting ) ) { $attr = [ 'disabled' => true, ]; $variable = $setting_prefix . $setting . '_disabled'; // Also add the original option as hidden, so as not to lose any values if it's disabled and the form is saved. $yform->hidden( $setting_prefix . $setting, $setting_prefix . $setting ); } elseif ( $this->should_feature_be_disabled_multisite( $setting ) ) { $attr = [ 'disabled' => true, 'preserve_disabled_value' => false, ]; } $yform->toggle_switch( $variable, $toggles, $label, '', $attr ); if ( $this->should_feature_be_disabled_permalink( $setting ) ) { echo '

'; if ( \current_user_can( 'manage_options' ) ) { \printf( /* translators: 1: Link start tag to the Permalinks settings page, 2: Link closing tag. */ \esc_html__( 'This feature is disabled when your site is not using %1$spretty permalinks%2$s.', 'wordpress-seo' ), '', '' ); } else { echo \esc_html__( 'This feature is disabled when your site is not using pretty permalinks.', 'wordpress-seo' ); } echo '

'; } } } /** * Checks if the feature should be disabled due to non-pretty permalinks. * * @param string $setting The setting to be displayed. * * @return bool */ protected function should_feature_be_disabled_permalink( $setting ) { return ( \in_array( $setting, [ 'clean_permalinks', 'clean_campaign_tracking_urls' ], true ) && empty( \get_option( 'permalink_structure' ) ) ); } /** * Checks if the feature should be disabled due to the site being a multisite. * * @param string $setting The setting to be displayed. * * @return bool */ protected function should_feature_be_disabled_multisite( $setting ) { return ( \in_array( $setting, [ 'deny_search_crawling', 'deny_wp_json_crawling', 'deny_adsbot_crawling' ], true ) && \is_multisite() ); } }
Fatal error: Uncaught Error: Class "Yoast\WP\SEO\Integrations\Blocks\Dynamic_Block_V3" not found in /htdocs/wp-content/plugins/wordpress-seo/src/integrations/blocks/breadcrumbs-block.php:14 Stack trace: #0 /htdocs/wp-content/plugins/advanced-custom-fields/vendor/composer/ClassLoader.php(576): include() #1 /htdocs/wp-content/plugins/advanced-custom-fields/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}('/htdocs/wp-cont...') #2 [internal function]: Composer\Autoload\ClassLoader->loadClass('Yoast\\WP\\SEO\\In...') #3 /htdocs/wp-content/plugins/wordpress-seo/src/loader.php(252): class_exists('Yoast\\WP\\SEO\\In...') #4 /htdocs/wp-content/plugins/wordpress-seo/src/loader.php(208): Yoast\WP\SEO\Loader->conditionals_are_met('Yoast\\WP\\SEO\\In...') #5 /htdocs/wp-includes/class-wp-hook.php(324): Yoast\WP\SEO\Loader->load_integrations('') #6 /htdocs/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters(NULL, Array) #7 /htdocs/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #8 /htdocs/wp-settings.php(727): do_action('init') #9 /htdocs/wp-config.php(101): require_once('/htdocs/wp-sett...') #10 /htdocs/wp-load.php(51): require_once('/htdocs/wp-conf...') #11 /htdocs/wp-blog-header.php(13): require_once('/htdocs/wp-load...') #12 /htdocs/index.php(17): require('/htdocs/wp-blog...') #13 {main} thrown in /htdocs/wp-content/plugins/wordpress-seo/src/integrations/blocks/breadcrumbs-block.php on line 14