web-dev-qa-db-fra.com

WPML - Définir la langue du message inséré

J'ai un formulaire de contact 7 sur le front-end qui crée un nouveau poste personnalisé à chaque fois qu'il est rempli. Tout fonctionne bien, mais je ne comprends pas comment définir la langue de ce message (actuellement, il est enregistré en anglais car il s'agit de ma langue par défaut dans WPML).

Voici ce que j'ai essayé:

function save_form_to_post( $posted_data ) {

    $args = array(
        'post_type' => 'projects',
        'post_status'=> 'draft',
        'post_title'=> wp_strip_all_tags( $posted_data['title'] ),
        'post_content'=> wp_strip_all_tags( $posted_data['pitch'] ),
    );
    $post_id = wp_insert_post($args);

    if( $posted_data['language'] == 'Spanish' || $posted_data['language'] == 'German' || $posted_data['language'] == 'French' ) {
        if( $posted_data['language'] == 'Spanish' ) {
            $set_language_args = array(
                'element_id' => $post_id,
                'element_type'  => 'projects',
                'language_code' => 'es'
            );
            $cat_ID = 729;
        } elseif( $posted_data['language'] == 'German' ) {
            $set_language_args = array(
                'element_id' => $post_id,
                'element_type'  => 'projects',
                'language_code' => 'de'
            );
            $cat_id = 726;
        } elseif( $posted_data['language'] == 'French' ) {
            $set_language_args = array(
                'element_id' => $post_id,
                'element_type'  => 'projects',
                'language_code' => 'fr'
            );
            $cat_id = 725;
        }
        do_action( 'wpml_set_element_language_details', $set_language_args );
    } else {
        $cat_id = 723;
    }
    wp_set_object_terms( $post_id, $cat_id, 'project_category' );

    return $posted_data;
}
add_filter( 'wpcf7_posted_data', 'sep_save_screenplay_form' );

La langue est donc définie en fonction de la valeur d'un champ de sélection du formulaire frontal. Ensuite, j'ai essayé d'utiliser le hook wpml_set_element_language_details pour définir une langue pour le message (chaque message n'a pas de traduction). Et enfin, j'ai défini une taxonomie pour le poste.

À l'heure actuelle, la publication enregistre uniquement en anglais et non dans d'autres langues. Quelqu'un pourrait-il m'expliquer pourquoi cela ne fonctionne pas et comment le faire fonctionner?

Merci beaucoup.

1
Pipo

L'action wpml_set_element_language_details _element_type doit être associée au préfixe correct utilisé par WPML:

À partir des documents WPML

type_élément (chaîne) Type d'un élément. Il peut s'agir d'un type de message: post_post, post_page, post_attachment, post_nav_menu_item, post_ {clé de message personnalisée} ou taxonomie: taxe_catégorie, taxe_post_tag, taxe_nav_menu, taxe_ {clé de taxonomie personnalisée}. La valeur par défaut est post_post si elle n'est pas définie.

Dans votre cas, il devrait s'agir de post_projects mais vous pouvez également utiliser wpml_element_type pour obtenir le préfixe correct, comme ceci:

$element_type = apply_filters('wpml_element_type', 'projects');

Ressources:

https://wpml.org/wpml-hook/wpml_set_element_language_details/

https://wpml.org/wpml-hook/wpml_element_type/

1
Shibi