2011-10-04 3 views
5

J'ai un site wordpress qui se connecte à un serveur de savon. Le problème est que chaque fois que je lance le script, "wp_insert_post" utilise à nouveau le même résultat. Je voudrais vérifier si post_title existant correspond à la valeur de $ title, puis si elles correspondent, empêcher wp_insert_post d'utiliser à nouveau la même valeur.Comment éviter la publication en double en vérifiant si le titre de publication existe avant d'exécuter "wp_insert_post"?

Voici le code:

try { 
    $client = new SoapClient($wsdl, array('login' => $username, 'password' => $password)); 
    } catch(Exception $e) { 
     die('Couldn\'t establish connection to weblink service.'); 
    } 
$publications = $client->GetPublicationSummaries(); 
foreach ($publications->GetPublicationSummariesResult->PublicationSummaries->PublicationSummary as $publication_summary) { 

    // get the complete publication from the webservice 
    $publication = $client->getPublication(array('PublicationId' => $publication_summary->ID))->GetPublicationResult->Publication; 

    // get all properties and put them in an array 
    $properties = array(); 
    foreach ($publication->Property as $attribute => $value) { 
     $properties[$attribute] = $value; 
    } 

    // Assemble basic title from properties 
    $title = $properties['Address']->Street . ' ' . $properties['Address']->HouseNumber . $properties['Address']->HouseNumberExtension . ', ' . $properties['Address']->City->_; 
} 

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

Merci pour toute aide.

+2

vous devriez essayer ce code. Require (dirname (__ FILE__). '/wp-load.php') global $ wpdb; echo $ count = $ wpdb-> get_var ("sélectionnez COUNT (*) from $ wpdb-> messages où' post_title' comme '$ title' "); – Robot

Répondre

4

Désolé pour la réponse tardive. J'ai utilisé ce que Robot dit dans le commentaire et cela a résolu mon problème. Merci

$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 
} 
13

Vous pouvez utiliser get_page_by_title() car il prend en charge les types de publications personnalisés maintenant.

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

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

endif; 

informations Codex here

+2

J'aime cette méthode pour tirer parti des fonctions intégrées pour de meilleurs résultats. Je crois que la première ligne devrait être: "if (! Get_page_by_title ($ title, OBJECT, 'skarabeepublication')):" – Jake

+0

Vous avez absolument raison, merci! – CookiesForDevo

+0

'OBJECT' ne devrait pas avoir d'apostrophes, mais sinon cette méthode fonctionne parfaitement et est toujours valide à partir de WordPress 4.7.3. – Arinthros

4

Surpris de ne pas voir mention post_exists fonction dans wp-includes/post.php. Voir entry on wpseek. Il n'y a pas d'entrée dans le codex. À son plus simple cela fonctionne comme get_page_by_title mais renvoie un id de poste (ou 0 si non trouvé) au lieu de l'objet (ou null).

$post_id = post_exists($my_title); 
if (!$post_id) { 
    // code here 
} 
+0

Il existe maintenant une [entrée sur post_exists] (https://developer.wordpress.org/reference/functions/post_exists/) dans le document Wordpress Developer Code Reference. – Jon

0
sampler

:

if(!get_page_by_path('mypageslug',OBJECT,'post')){ 
    //your codes 
} 
Questions connexes