$new_language = filter_var( Obj::prop('wpml_language', $_POST), FILTER_SANITIZE_FULL_SPECIAL_CHARS, FILTER_NULL_ON_FAILURE );
class WPML_Widgets_Support_Backend implements IWPML_Action {
const NONCE = 'wpml-language-nonce';
private $active_languages;
private $template_service;
public function __construct( array $active_languages, IWPML_Template_Service $template_service ) {
$this->active_languages = $active_languages;
$this->template_service = $template_service;
public function add_hooks() {
add_action( 'in_widget_form', array( $this, 'language_selector' ), 10, 3 );
add_filter( 'widget_update_callback', array( $this, 'update' ), 10, 4 );
public function language_selector( $widget, $form, $instance ) {
$languages = $this->active_languages;
$languages['all'] = array(
'native_name' => __( 'All Languages', 'sitepress' ),
'label' => __( 'Display on language:', 'sitepress' ),
'languages' => $languages,
'selected_language' => Obj::propOr( 'all', 'wpml_language', is_array( $instance ) ? $instance : [] ),
'nonce' => wp_create_nonce( self::NONCE ),
echo $this->template_service->show( $model, 'language-selector.twig' );