acf-qtranslate icon indicating copy to clipboard operation
acf-qtranslate copied to clipboard

Give ability to either set return preferences if language isn't found – or, return raw!

Open shankie-codes opened this issue 9 years ago • 1 comments

Hi there Funkjedi,

The plugin (very helpfully for the most part) applies the filter before the value is returned to the template using get_field(). Indeed, this is the core of the plugin!

However, in certain circumstances, I'd like to be able to control how the field is returned to the template. For instance, qTranslate-x provides the following functions to control how a given request is handled if the requested language isn't found:

qtranxf_useCurrentLanguageIfNotFoundShowEmpty() qtranxf_useCurrentLanguageIfNotFoundShowAvailable() qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage()

However, the plugin always bakes in qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage().

I'd like to be able to either set my return preferences for the field, or better yet, have the option to return the raw field content – which would then allow the developer to pass the returned raw content through the qtranxf_useCurrentLanguageIfNotFound function of his/her choosing.

Any thoughts on how to do this?

Cheers,

Andrew

shankie-codes avatar Sep 15 '15 05:09 shankie-codes

Hi, same question from me! I think that would be useful to have the option to get the raw content of a field. In my case I'm trying to write a pdf document in a different language than the one displayed in current web page. I've found a little workaround: defining and setting the value of a custom qtranslate option $q_config['return_raw'] changing few lines in acf-qtranslate/src/acf_5/acf.php

  • public function __construct($plugin) { $this->plugin = $plugin; global $q_config; isset($q_config['return_raw']) ? $q_config['return_raw'] : $q_config['return_raw']=0; add_filter('acf/format_value', array($this, 'format_value')); add_action('acf/include_fields', array($this, 'include_fields')); add_action('acf/input/admin_enqueue_scripts', array($this, 'admin_enqueue_scripts')); }

and

  • public function format_value($value) { global $q_config; if (is_string($value)) { if($q_config['return_raw'] == 0){ $value = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage($value); }else{ $q_config['return_raw'] = 0; // reset to zero to be sure next field will be formatted as usual } } return $value; }

then at the bottom of acf-qtranslate/compatibility/qtranslatexs.php

  • function get_field_raw( $selector, $post_id = false, $format_value = true ) { global $q_config; $q_config['return_raw'] = 1; return get_field( $selector, $post_id , $format_value ); }

Now I can get the raw content of a acf_qtranslate_acf_5_textarea and acf_qtranslate_acf_5_text using the funcion get_field_raw in the same way you use the already provided get_field function, but it doesn't with the acf_qtranslate_acf_5_wysiwyg field.

I can't manage to get the raw data from this field type

Any help would be apreciated.

puntonero avatar Feb 26 '16 13:02 puntonero