WPML
apply_filters( 'wpml_copy_post_to_language', int $post_id, string $target_language, bool $mark_as_duplicate )
Tipo
filter
Categoría
Insertar contenido
Versión de WPML
4.0.0

Descripción

Este hook de filtro permite a los desarrolladores copiar una entrada a un idioma especificado con WPML. Duplica la entrada en el idioma de destino y ofrece la opción de marcarla como duplicado o como traducción.

Argumentos

$post_id
(int) (Obligatorio) El ID de la entrada que se va a copiar.
$target_language
(string) (Obligatorio) El código de idioma del idioma de destino al que se copiará la entrada.
$mark_as_duplicate
(bool) (Obligatorio) Si se establece en true, la entrada duplicada se marcará como un duplicado de la entrada original. Si es false, se tratará como una entrada traducida.

Ejemplo de uso

En el siguiente ejemplo, utilizamos el filtro para copiar una entrada con el ID 1 al francés y la marcamos como un duplicado de la entrada original.

Ejemplo
$duplicate_post_id = apply_filters( 'wpml_copy_post_to_language', 1, 'fr', true );

En el ejemplo avanzado que ve a continuación, demostramos cómo duplicar automáticamente una entrada determinada a todos los demás idiomas activos en su sitio de WPML, excluyendo el idioma original de la entrada.

Ejemplo avanzado
function myplugin_duplicate_copy_post_to_secondary_languages( $post_id, $mark_as_duplicate = false ) {
    // Retrieve the post's element type, trid, and existing translations
    $element_type = apply_filters( 'wpml_element_type', get_post_type( $post_id ) );
    $trid         = apply_filters( 'wpml_element_trid', null, $post_id, $element_type );
    $translations = (array) apply_filters( 'wpml_get_element_translations', [], $trid, $element_type );

    if ( ! $translations ) {
        // Handle error or invalid values accordingly
        return;
    }

    // Retrieve the active languages
    $wpml_languages = (array) apply_filters('wpml_active_languages', [], 'orderby=id&order=desc');

    foreach ( $wpml_languages as $language ) {
        // Duplicate the post if no translation exists for the given language
        if ( ! isset( $translations[ $language['language_code'] ] ) ) {
            apply_filters(
                    'wpml_copy_post_to_language',
                    $post_id,
                    $language['language_code'],
                    $mark_as_duplicate
            );
        }
    }
}

wpml_set_element_language_details, wpml_make_post_duplicates, wpml_admin_make_post_duplicates, wpml_delete_package, wpml_import_get_trid_from_imported_translations, wpml_register_string, wpml_register_single_string, wpml_show_package_language_ui, wpml_delete_package_action

Los 10 hooks de Insertar contenido →