WP All Import Pro: Polylang-Kompatibilität

Lesezeit: 6 Minuten

Ich versuche, Daten aus einer Excel-Tabelle mit der Pro-Version von WP All Import in WordPress zu importieren. Wir verwenden Polylang für mehrsprachige Unterstützung. Ich frage mich, wie ich den Inhalt in die richtigen Sprachversionen importieren soll. Ich habe entdeckt, dass es eine versteckte Taxonomie “Sprache” gibt, die ich manuell auf “de” setzen kann, um die Sprache auf Deutsch einzustellen. Aber wie verlinke ich entsprechende Übersetzungen? Irgendwelche Ideen, wie man das lösen kann, vielleicht mit einigen benutzerdefinierten Funktionen? Vielen Dank im Voraus!

WP All Import Pro Polylang Kompatibilitat
Theofil

Ich habe eine bessere Lösung gefunden.

if ( !function_exists( 'pll_save_post_translations' ) ) {
require_once '/include/api.php'; }
$arr = array();
$result = pll_save_post_translations(['en' => 21398, 'ro'=>21396]); 

//wobei 21398 und 21396 die post_id und ‘en’ und ‘ro’ die netten Namen der Sprachen sind.

Fügen Sie diesen Code in Ihre functions.php ein und führen Sie ihn nur einmal aus (was bedeutet, dass Sie die Seite nur einmal als Administrator aktualisieren, nachdem Sie sie eingefügt haben). Löschen Sie dann den Code aus der functions.php. Es erzeugt nicht wirklich Fehler, riskieren Sie es einfach nicht, führen Sie es nicht zweimal aus.

Zuvor müssen Sie die Produkte in beiden (in meinem Fall) Sprachen importieren. Das heißt, Sie importieren sie in einer Sprache (Sie wählen eine Sprache aus der oberen Admin-Leiste aus) und importieren sie dann in einer anderen Sitzung in der anderen Sprache (Sie wählen die andere Sprache aus) und auch, wenn Sie in WP All „Private Taxonomien anzeigen“ sehen import, geben Sie dort einen Sprachcode ein. Eine für jede Sitzung. Nachdem die Produkte in beiden Sprachen importiert wurden, führen Sie den obigen Code aus, um WordPress mitzuteilen, dass „diese post_id die Übersetzung dieser post_id ist“. Ich hoffe, es hilft. Ah, und Sie erhalten die post_id in einer schönen Tabelle, die Sie in Excel bearbeiten können, indem Sie die Produkte mit WordPress Export exportieren (es ist vorinstalliert, wenn Sie WordPress installieren, glaube ich). Sie finden es im Dashboard unter Tools/Export.

Und setze $result = pll_save_post_translations([‘en’ => 56465, ‘ro’=>654864]); so oft wie du brauchst

$result = pll_save_post_translations([‘en’ => 9999, ‘ro’=>34654]); $result = pll_save_post_translations([‘en’ => 98641, ‘ro’=>98651]); .

für jede Korrelation. Sie können es einfacher in Excel machen, Sie haben die korrelierenden IDs in zwei separaten Spalten und setzen diese Formel dann in die nächste Zeile =concatenate(“$result = pll_save_post_translations([‘en’ =>”,CELL A1,”
‘ro’=>”,CELL B1,”]);”) Wenden Sie es nach unten an. Wählen Sie die Spalte aus, die Sie gerade verkettet haben. Fügen Sie sie unter dem Code in der functions.php ein. Speichern. Aktualisieren. Code aus der functions.php löschen. Aktualisieren. Booyah.

Bitte beachten Sie, dass ich derzeit sowohl Polylang- als auch Wp All Import/Export Pro-Versionen verwende.

Ebenfalls, Dies ist derzeit kein “veralteter” Code. Es stützt sich auf eine undokumentierte Funktion, die direkt vom wp all import-Team vorgeschlagen wurde. Ich spreche einfach von dem zusätzlichen Parameter $data an der vorbeigegangen pmxi_saved_post Aktion.

Allerdings weiß ich, dass Polylang-Entwickler derzeit an einem Addon für dieses spezielle Problem arbeiten. Jedenfalls habe ich es vorerst so hinbekommen:

1 -> Wenn Sie Daten exportieren, gibt es 2 Polylang-bezogene Felder: languages und post_translations. Exportiere sie auch.

2 -> Wenn Sie Ihre Daten importieren, erstellen Sie auf dem wpallimport-Bildschirm 2 weitere benutzerdefinierte Felder und speichern Sie die 2 oben. Siehe Anhang unten. Jetzt haben Sie die Übersetzungsdaten zu jedem Beitrag.

3 -> setze diesen Filter:

global $language_codes;

$language_codes = array( // sample lang data
  'italiano' => 'it'
  ,'english' => 'en'
  ,'espanol' => 'es'
  ,'francais' => 'fr'
  ,'deutsch' => 'de'
);

add_action('pmxi_saved_post', 'set_imports_lang', 10, 2);

// using undocumented param $data
// action firm is the following (in fact, it passes 3 params): do_action( 'pmxi_saved_post', $pid, $rootNodes[$i], $is_update );
function set_imports_lang($post_id, $data){
  global $language_codes;
  // 'lingue' is italian, I guess it will be 'languages' in english: it's one of the 2 fields we saved before
  pll_set_post_language($post_id, $language_codes[sanitize_title($data->lingue)]);
}

An dieser Stelle haben Sie nur die Originalsprache jedes Beitrags eingestellt, mehr nicht. Jetzt müssen wir Übersetzungen miteinander verknüpfen. Wir tun dies mit einer Funktion, die wir NUR 1 MAL ausführen müssen. Es wird ausgeführt, indem einfach ein beliebiger WP-Bildschirm / eine beliebige Seite neu geladen wird.

function set_imports_translations(){
  global $wpdb;
  global $language_codes;

  // substitute 'enews' with your own post type
  $list = $wpdb->get_results("
    SELECT
      m.post_id, m.meta_value pll, group_concat(concat_ws(':', m2.meta_value, m.post_id)) ids
    FROM
      $wpdb->posts p
      INNER JOIN $wpdb->postmeta m ON p.ID = m.post_id
      INNER JOIN $wpdb->postmeta m2 ON m.post_id = m2.post_id AND m2.meta_key = '_import_language_name'
    WHERE
      p.post_type="enews" AND m.meta_key = '_import_translations_id'
    GROUP BY pll
  ");

  // query results are something like this:
  // 10258 pll_57e92254c445f 10258:Italiano,10259:English,10260:Español,10261:Français,10262:Deutsch
  // 10263 pll_57e922552b8c6 10263:Italiano,10264:English,10265:Español,10266:Deutsch
  // 10267 pll_57e9225587124 10267:Italiano


  // extract data from the third column string
  foreach($list as $item){
    $ids = explode(',',$item->ids);
    $list = array();

    foreach($ids as $id){
      $data = explode(':',$id);
      $list[$language_codes[sanitize_title($data[0])]] = intval($data[1]);
    }

    //set the translations
    pll_save_post_translations($list);
  }
}

set_imports_translations();

Das ist alles. 🙂 Ah, der oben erwähnte Anhang:

Geben Sie hier die Bildbeschreibung ein

  • Molto grazie! Die Funktion set_imports_translations hat unzählige Stunden gespart. Hinweis: Das Exportieren und anschließende Importieren von „Sprachen“ als benutzerdefiniertes Feld funktionierte mit Polyang einwandfrei, ohne dass die Funktion set_imports_lang erforderlich war.

    – seitliches Design

    12. April 2019 um 10:57 Uhr

  • Hallo Luca, kannst du näher erläutern, was “Zu diesem Zeitpunkt hast du nur die Originalsprache jedes Beitrags eingestellt, mehr nicht” bedeutet? Ich bin verwirrt, was das bedeutet und wann Sie das tun. Machst du das nach dem Exportieren und vor dem Importieren? Ist dies alles der letzte Schritt, um “set_imports_transaltions” auszuführen?

    – Nik

    26. September 2019 um 16:59 Uhr

  • @Nick, das wird während des Imports mit dem Filter pmxi_saved_post gemacht. Vielleicht ist es auch in wp all import pro docs dokumentiert. Denken Sie jedoch daran, dass Sie polylang pro-Entwickler (per E-Mail) bitten können, Ihnen Zugriff auf ihr Plugin für den Import von wp all zu gewähren. Sie werden und es funktioniert ziemlich gut, auch wenn es in der Beta ist. Es ist nicht sehr intuitiv (ich schlage vor, dass Sie mehrere Konfigurationstests mit wenigen Datensätzen durchführen, bis Sie den perfekten erreicht haben), aber es ist in Ordnung, auch wenn es sich um eine Beta handelt.

    – Luca Reghellin

    28. September 2019 um 9:31 Uhr

1003110cookie-checkWP All Import Pro: Polylang-Kompatibilität

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy