Waiting for author
Overview of the issue
When using Visual Composer Pro with WPML, you might experience the following fatal error when accessing the Translation Management page:
PHP Fatal error: Uncaught TypeError: Argument 2 passed to WPML\Core\SharedKernel\Component\Post\Application\Query\Dto\PostTypeDto::__construct() must be of the type string, null given, called in ../public_html/wp-content/plugins/sitepress-multilingual-cms/vendor/wpml/wpml/src/Core/SharedKernel/Component/Post/Application/Query/Dto/PostTypeDto.php:26
Workaround
Please make sure you have a full backup of your site before proceeding.
Workaround 1 (Recommended)
Add the following code to your theme’s functions.php file:
add_filter( 'wpml_post_type_dto_filter', function ( $postTypeObject ) { if ( is_object( $postTypeObject ) ) { $default = $postTypeObject->name ?? ''; if ( ! isset( $postTypeObject->labels ) || ! is_object( $postTypeObject->labels ) ) { $postTypeObject->labels = new stdClass(); } if ( empty( $postTypeObject->name ) ) { $postTypeObject->name = $default; } if ( empty( $postTypeObject->labels->name ) ) { $postTypeObject->labels->name = $default; } if ( empty( $postTypeObject->labels->singular_name ) ) { $postTypeObject->labels->singular_name = $default; } } return $postTypeObject; } );
Workaround 2 (Alternative)
This workaround involves directly modifying plugin code, which can be lost on updates.
- Open: /wp-content/uploads/visualcomposer-assets/addons/themeEditor/themeEditor/PostTypeController.php
- Look for:
protected function registerPostType() { register_post_type(
- And replace it with:
protected function registerPostType() { if (!isset($this->postNamePlural)){ $this->postNamePlural = $this->postNameSlug; } register_post_type(