changelog

Live Example

[own_shortcode1] add_filter( 'voxel/dynamic-data/modifiers', function( $modifiers ) { class Cut_Before_And_After_Char extends \Voxel\Dynamic_Data\Modifiers\Base_Modifier { public function get_label(): string { return 'Cut before and/or after characters (flexible)'; } public function get_key(): string { return 'cut_before_and_after_char'; } protected function define_args(): void { $this->define_arg( [ 'type' => 'text', 'label' => 'Start character (cut before this)', ] ); $this->define_arg( [ 'type' => 'text', 'label' => 'End character (cut after this)', ] ); } public function apply( string $value ) { $start_char = $this->get_arg(0); $end_char = $this->get_arg(1); if ( empty( $value ) ) { return $value; } $start_char = html_entity_decode($start_char); $end_char = html_entity_decode($end_char); $start_char = $this->clean_escaped_characters( $start_char ); $end_char = $this->clean_escaped_characters( $end_char ); if ( !empty( $start_char ) ) { $start_pos = strpos( $value, $start_char ); if ( $start_pos !== false ) { $start_pos += strlen($start_char); $value = substr( $value, $start_pos ); } } if ( !empty( $end_char ) ) { $end_pos = strpos( $value, $end_char ); if ( $end_pos !== false ) { $value = substr( $value, 0, $end_pos ); } } return trim( $value ); } private function clean_escaped_characters( $char ) { if ( $char === '\\' ) { return '\\'; } return str_replace('\\', '', $char); } } $modifiers['cut_before_and_after_char'] = \Cut_Before_And_After_Char::class; return $modifiers; });

PHP

add_filter( 'voxel/dynamic-data/modifiers', function( $modifiers ) {

class Cut_Before_And_After_Char extends \Voxel\Dynamic_Data\Modifiers\Base_Modifier {
    public function get_label(): string {
        return 'Cut before and/or after characters (flexible)';
    }

    public function get_key(): string {
        return 'cut_before_and_after_char';
    }

    protected function define_args(): void {
        $this->define_arg( [
            'type' => 'text',
            'label' => 'Start character (cut before this)',
        ] );
        $this->define_arg( [
            'type' => 'text',
            'label' => 'End character (cut after this)',
        ] );
    }

    public function apply( string $value ) {
        $start_char = $this->get_arg(0);
        $end_char = $this->get_arg(1);

        if ( empty( $value ) ) {
            return $value;
        }

        $start_char = html_entity_decode($start_char);
        $end_char = html_entity_decode($end_char);

        $start_char = $this->clean_escaped_characters( $start_char );
        $end_char = $this->clean_escaped_characters( $end_char );

        if ( !empty( $start_char ) ) {
            $start_pos = strpos( $value, $start_char );
            if ( $start_pos !== false ) {
                $start_pos += strlen($start_char);
                $value = substr( $value, $start_pos );
            }
        }

        if ( !empty( $end_char ) ) {
            $end_pos = strpos( $value, $end_char );
            if ( $end_pos !== false ) {
                $value = substr( $value, 0, $end_pos );
            }
        }

        return trim( $value );
    }

    private function clean_escaped_characters( $char ) {
        if ( $char === '\\' ) {
            return '\\';
        }
        return str_replace('\\', '', $char);
    }
}

$modifiers['cut_before_and_after_char'] = \Cut_Before_And_After_Char::class;
return $modifiers;
});

Cut string before and after chosen character

The Mission

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

There are no results matching your search

AI Assistant