2011-10-04 7 views
5

मेरे पास एक WordPress साइट है जो साबुन सर्वर से जुड़ती है। समस्या हर बार जब मैं स्क्रिप्ट चलाता हूं तो "wp_insert_post" एक ही परिणाम का उपयोग कर रहा है। मैं यह जांचना चाहता हूं कि मौजूदा पोस्ट_टाइटल मूल्य से $ शीर्षक से मेल खाता है, यदि वे मेल खाते हैं, तो wp_insert_post को उसी मान का उपयोग करने से रोकें।"wp_insert_post" चलाने से पहले पोस्ट शीर्षक मौजूद है या नहीं, यह जांचकर डुप्लिकेट पोस्ट को कैसे रोकें?

कोड यह रहा:

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); 

किसी भी मदद के लिए धन्यवाद।

+2

आप इस कोड को प्रयास करना चाहिए। की आवश्यकता है (dirname (__ FILE__)। '/wp-load.php'); वैश्विक $ wpdb; echo $ count = $ wpdb-> get_var ("$ wpdb-> पोस्ट से COUNT (*) का चयन करें जहां 'post_title'' $ title 'की तरह"); – Robot

उत्तर

4

देर प्रतिक्रिया के लिए खेद है। मैंने रोबोट ने टिप्पणी में क्या कहा और मैंने अपनी समस्या हल की। धन्यवाद

$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

आप get_page_by_title() का उपयोग कर सकते हैं क्योंकि यह अब कस्टम पोस्ट प्रकारों का समर्थन करता है।

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; 

कोडेक्स जानकारी here

+2

मुझे सर्वोत्तम परिणामों के लिए अंतर्निहित कार्यों का लाभ उठाने के लिए इस विधि को पसंद है। मेरा मानना ​​है कि पहली पंक्ति होनी चाहिए: "अगर (! Get_page_by_title ($ शीर्षक, ऑब्जेक्ट, 'स्कार्बिपब्लिकेशन')):" – Jake

+0

आप बिल्कुल सही हैं, धन्यवाद! – CookiesForDevo

+0

'ऑब्जेक्ट' में apostrophes नहीं होना चाहिए, लेकिन अन्यथा यह विधि पूरी तरह से काम करती है और अभी भी वर्डप्रेस 4.7.3 के रूप में मान्य है। – Arinthros

4

आश्चर्य में post_exists समारोह का उल्लेख नहीं देखना WP-शामिल/post.php। entry on wpseek देखें। कोडेक्स में कोई प्रविष्टि नहीं है। यह सबसे आसान है यह get_page_by_title की तरह काम करता है लेकिन ऑब्जेक्ट (या शून्य) के बजाय एक पोस्ट आईडी (या 0 नहीं मिला) देता है।

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

वर्डप्रेस डेवलपर कोड संदर्भ में अब [पोस्ट_एक्सिस्ट्स पर प्रविष्टि] (https://developer.wordpress.org/reference/functions/post_exists/) है। – Jon

0

नमूना:

if(!get_page_by_path('mypageslug',OBJECT,'post')){ 
    //your codes 
} 
संबंधित मुद्दे