WPML
Status
Offen
Themen-Tags
WCML

Übersicht über das Problem

Die WooCommerce-Produktkurzbeschreibung basiert auf dem Feld für den Beitragsauszug, und dieses ist normalerweise ein einfaches Textfeld, das keine Shortcodes verarbeitet. Daher ist nicht zu erwarten, dass Page-Builder-Shortcodes funktionieren, wenn Sie diese in den Beitragsauszug einfügen, und bei der Übersetzung von Beitragsauszügen versucht WPML nicht, solche Shortcodes zu verarbeiten.

Aber WC behandelt diese „Auszüge“ etwas anders, und Shortcodes funktionieren, aber WPML verhält sich weiterhin so, als ob sie nicht funktionieren würden, und wenn der Shortcode Attribute enthält, die übersetzt werden müssen, oder interne Links, die automatisch verarbeitet werden sollten, ist dies nicht ohne Weiteres möglich.

Problemumgehung

Wir haben Code vorbereitet, der als Plugin hinzugefügt werden kann, um diese Funktionalität bereitzustellen. Kopieren Sie den folgenden Code, fügen Sie ihn in eine Datei ein, die Sie beispielsweise wpmlpb-excerpts.php nennen, speichern Sie diese in Ihrem Verzeichnis wp-content/plugins/ und aktivieren Sie dann das Plugin.

<?php
/**
 * Plugin Name: WPML Page Builders - Proces Excerpts
 * Description: Parses shortcode strings in exceprts.
 * Version: 1.0
 */
namespace WPMLPB686;

( new Excerpts() )->add_hooks();

class Excerpts {

	const SEPARATOR_START = '<!--WPML_EXCERPT_START-->';
	const SEPARATOR_END   = '<!--WPML_EXCERPT_END-->';

	public function add_hooks() {
		add_filter( 'wpml_pb_shortcode_content_for_translation', [ $this, 'joinWithContent' ], 10, 2 );
		add_filter( 'wpml_tm_translation_job_data', [ $this, 'excludeFromJob' ], 10, 2 );
		add_action( 'wpml_pro_translation_completed', [ $this, 'splitFromContent' ], 999 );
	}

	public function joinWithContent( $content, $id ) {
		$post = get_post( $id );
		if ( $post && $post->post_excerpt ) {
			$content .= self::SEPARATOR_START . $post->post_excerpt . self::SEPARATOR_END;
		}

		return $content;
	}

	public function excludeFromJob( $package, $post ) {
		if ( preg_match( '/[[^]]+]/', $post->post_excerpt ) ) {
			$package['contents']['excerpt']['translate'] = 0;
			$package['contents']['excerpt']['data']      = '';
		}

		return $package;
	}

	public function splitFromContent( $post_id ) {
		$post = get_post( $post_id );
		if ( $post && false !== strpos( $post->post_content, self::SEPARATOR_START ) ) {
			$start_pos = strpos( $post->post_content, self::SEPARATOR_START );
			$end_pos   = strpos( $post->post_content, self::SEPARATOR_END, $start_pos );

			if ( false !== $end_pos ) {
				$content = substr( $post->post_content, 0, $start_pos );
				$excerpt = substr( $post->post_content, $start_pos + strlen( self::SEPARATOR_START ), $end_pos - $start_pos - strlen( self::SEPARATOR_START ) );

				if ( $excerpt ) {
					wp_update_post(
						[
							'ID'           => $post_id,
							'post_content' => $content,
							'post_excerpt' => $excerpt,
						]
					);
				}
			}
		}
	}
}

Alle bekannten Probleme →