7 Stimmen

Wordpress wie man das doppelte Posten verhindert, indem man überprüft, ob der Post-Titel existiert, bevor "wp_insert_post" ausgeführt wird?

Ich habe eine Wordpress-Seite, die mit einem Soap-Server verbunden ist. Das Problem ist, dass jedes Mal, wenn ich das Skript ausführe, wp_insert_post das gleiche Ergebnis erneut verwendet.

Ich möchte überprüfen, ob der vorhandene post_title mit dem Wert von $title übereinstimmt, und wenn sie übereinstimmen, verhindern, dass wp_insert_post den gleichen Wert erneut verwendet.

Hier ist der Code:

try {
    $client = new SoapClient($wsdl, array('login' => $benutzername, 'password' => $passwort));
    } catch(Exception $e) {
      die('Konnte keine Verbindung zum Weblink-Dienst herstellen.');
    }
$veröffentlichungen = $client->GetPublicationSummaries();
foreach ($veröffentlichungen->GetPublicationSummariesResult->PublicationSummaries->PublicationSummary as $publikationszusammenfassung) {

    // die vollständige Veröffentlichung vom Webservice abrufen
    $veröffentlichung = $client->getPublication(array('PublicationId' => $publikationszusammenfassung->ID))->GetPublicationResult->Publication;

    // alle Eigenschaften abrufen und in ein Array einfügen
    $eigenschaften = array();
    foreach ($veröffentlichung->Property as $attribut => $wert) {
        $eigenschaften[$attribut] = $wert;
    }

    // Grundlegenden Titel aus Eigenschaften zusammenstellen
    $titel = $eigenschaften['Adresse']->Straße . ' ' . $eigenschaften['Adresse']->Hausnummer . $eigenschaften['Adresse']->Hausnummererweiterung . ', ' . $eigenschaften['Adresse']->Stadt->_;
}

$mein_beitrag = array(
    'post_title'=>$titel,
    'post_content'=>'mein Inhalt',
    'post_status'=>'Entwurf',
    'post_type'=>'skarabeeveröffentlichung',
    'post_author'=>1,
);
wp_insert_post($mein_beitrag);

Vielen Dank für jede Hilfe.

2 Stimmen

Du solltest diesen Code ausprobieren. require( dirname(DATEI) . '/wp-load.php' ); global $wpdb; echo $count = $wpdb->get_var("select COUNT(*) from $wpdb->posts where post_title like '$title' ");

16voto

CookiesForDevo Punkte 712

Sie können get_page_by_title() verwenden, da es jetzt benutzerdefinierte Beitragstypen unterstützt.

if (!get_page_by_title($title, OBJECT, 'skarabeepublication')) :

    $my_post = array(
        'post_title'=>$title,
        'post_content'=>'meine Inhalte',
        'post_status'=>'draft',
        'post_type'=>'skarabeepublication',
        'post_author'=>1,
    );
    wp_insert_post($my_post);

endif;

Codex-Informationen hier

2 Stimmen

Ich mag diese Methode, um die eingebauten Funktionen optimal zu nutzen. Ich glaube, die erste Zeile sollte lauten: "if (! get_page_by_title($title, OBJECT, 'skarabeepublication') ) :"

0 Stimmen

OBJECT sollte keine Apostrophe haben, aber ansonsten funktioniert diese Methode perfekt und ist immer noch gültig ab WordPress 4.7.3.

0 Stimmen

Es wird auch die Entwürfe und den Papierkorb zurückgeben.

7voto

Jon Punkte 81

Überrascht, dass die Funktion post_exists in wp-includes/post.php nicht erwähnt wird. Siehe Eintrag auf wpseek. Im Codex gibt es keinen Eintrag. Im einfachsten Fall funktioniert es wie get_page_by_title, gibt aber eine Beitrag-ID zurück (oder 0, wenn nicht gefunden) anstelle des Objekts (oder null).

$post_id = post_exists( $my_title );
if (!$post_id) {
    // Code hier
}

0 Stimmen

Es gibt jetzt einen Eintrag zu post_exists im Wordpress Developer Code Reference.

4voto

Jay Bryan Cañas Punkte 225

Entschuldigen Sie die späte Antwort. Ich habe verwendet, was Robot im Kommentar sagt, und das hat mein Problem gelöst. Vielen Dank

$post_if = $wpdb->get_var("SELECT count(post_title) FROM $wpdb->posts WHERE post_title like '$title_from_soap'");
if($post_if < 1){
    //code here
}

0voto

T.Todua Punkte 48569

Beispiel:

if( !get_page_by_path('meineseitenslug',OBJECT,'post') ){
  //deine Codes
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X