Verfügt WordPress über eine integrierte Funktion zum Duplizieren von Beiträgen?

Lesezeit: 2 Minuten

Ich bin der Benutzeravatar der dümmsten Person
Ich bin der dümmste Mensch

Ich möchte einige Beiträge programmgesteuert ohne Kommentare duplizieren.

Verfügt WordPress über eine integrierte Funktion zum Duplizieren von Beiträgen?

  • Ich glaube nicht, dass WP standardmäßig über eine solche Funktion im Kern verfügt.

    – Nilambar Sharma

    4. Juni 2019 um 16:15 Uhr

Du kannst den … benutzen wp_insert_post() Funktion zum Duplizieren eines Beitrags.

Sie müssen lediglich die Beitrags-ID aus den Daten entfernen, die Sie an ihn übergeben, und WordPress erstellt einen neuen Beitrag, anstatt einen vorhandenen zu aktualisieren. Z.B

    $post_id = 1234;
    $post = (array) get_post( $post_id ); // Post to duplicate.
    unset($post['ID']); // Remove id, wp will create new post if not set.
    wp_insert_post($post);

Kommentare werden in einer anderen Tabelle gespeichert. Und sind durch die Beitrags-ID verlinkt. Da der doppelte Beitrag eine andere ID hat, werden ihm die Originalkommentare nicht zugeordnet.

  • Danke. Aber was passiert mit benutzerdefinierten Feldern und der benutzerdefinierten Taxonomie? Diese sollten auch dupliziert werden

    – Ich bin der dümmste Mensch

    4. Juni 2019 um 4:55


  • Meta und Bedingungen müssten separat kopiert werden.

    – Getriebe

    4. Juni 2019 um 5:59

Nein, im WordPress-Kern gibt es keine Funktionalität wie das Duplizieren von Beiträgen.

Um Ihre Anforderungen zu erfüllen, können Sie dieses Plugin verwenden: https://wordpress.org/plugins/post-duplicator/

Dieses Plugin dupliziert den Beitrag, aber nicht den Kommentar. Siehe dort Dokumentation

Wenn Sie nur den Beitrag kopieren müssen, können Sie die Lösung von @ngearing unter https://stackoverflow.com/a/56437515/3480821 verwenden

Wenn Sie den Beitrag auch mit Meta und Begriffen duplizieren möchten, können Sie die folgende Funktion verwenden:

<?php

/**
 * Duplicates a post & its meta and returns the new duplicated Post ID.
 *
 * @param int $post_id The Post ID you want to clone.
 * @return int The duplicated Post ID.
 */
function duplicate_post(int $post_id): int
{
    $old_post = get_post($post_id);
    if (!$old_post) {
        // Invalid post ID, return early.
        return 0;
    }

    $title = $old_post->post_title;

    // Create new post array.
    $new_post = [
        'post_title'  => $title,
        'post_name'   => sanitize_title($title),
        'post_status' => 'draft',
        'post_type'   => $old_post->post_type,
    ];

    // Insert new post.
    $new_post_id = wp_insert_post($new_post);

    // Copy post meta.
    $post_meta = get_post_custom($post_id);
    foreach ($post_meta as $key => $values) {
        foreach ($values as $value) {
            add_post_meta($new_post_id, $key, maybe_unserialize($value));
        }
    }

    // Copy post taxonomies.
    $taxonomies = get_post_taxonomies($post_id);
    foreach ($taxonomies as $taxonomy) {
        $term_ids = wp_get_object_terms($post_id, $taxonomy, ['fields' => 'ids']);
        wp_set_object_terms($new_post_id, $term_ids, $taxonomy);
    }

    // Return new post ID.
    return $new_post_id;
}

Ich habe diese Funktion auch in a verfügbar gemacht Github-Kern hier.

1450710cookie-checkVerfügt WordPress über eine integrierte Funktion zum Duplizieren von Beiträgen?

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

Privacy policy