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;
});
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
There are no results matching your search