2016-10-06 8 views
0

私は顧客の一意の注文IDを生成するためにwordpressプラグインを作ろうとしています。私は以下のようにしていますが、それは価値を返すものではありません。私のコードは以下の通りです。phpクラスの他の関数に1つの関数varibaleを取得

class abc { 
    function __construct() { 

     add_action('publish_wpcf7s', array($this, 'send_mails_on_publish'), 10, 2); 

    } 
    function setID() { 

     global $id; 
     $a = md5(time()); 
     echo $id = substr($a,0,8); 

    } 


    function send_mails_on_publish($post) 
    { 
     global $post; 
     global $id; 

     $price = get_post_meta($post->ID, 'quote_price', true); 
     $to = get_post_meta($post->ID, 'email', true); 
     $subject ="Thank You! Please Pay $price Us For Order No. $id"; 

     $message ="message"; 

     $headers[] = "Disposition-Notification-To: $sender_email\n"; 
     $headers[] = 'Content-Type: text/html; charset=UTF-8'; 
     $headers[] = 'From: Example ' . "\r\n"; 
     wp_mail($to, $subject, $body, $headers); 


    }  

} 

答えて

1

ここではsetID()?とにかく、このコードは本当に臭いです。

チェックこの:

class abc { 

    private $id = 0; 
    private $post; 

    function __construct() { 
     add_action('publish_wpcf7s', array($this, 'send_mails_on_publish'), 10, 2); 
    } 

    function getId() { 
     return $this->id; 
    } 

    function getPost() { 
     return $this->post; 
    } 

    function setId() { 
     $a = md5(time()); 
     $this->id = substr($a, 0, 8); 
    } 

    function setPost($post) { 
     $this->post = $post; 
    } 


    function send_mails_on_publish() { 
     //do whatever you want. 
     $price = get_post_meta($this->post->ID, 'quote_price', true); 
     $to = get_post_meta($this->post->ID, 'email', true); 
     $subject = "Thank You! Please Pay $price Us For Order No. $this->id"; 
     //..... 
     // do whatever you want 
    } 

} 

とするとき、あなたはそれを使用したい:あなたのオブジェクトを構築するためのパラメータとして$postを渡した場合、

$Abc = new abc(); 
$Abc->setId(); 
$Abc->setPost($post); 

別の方法を、そしてそこ$this->postを設定。この場合、setPostメソッドは必要ありませんが、変更したい場合はそのまま使用できますが、それは良いデザインではありません。

3

$idプロパティを定義して初期化した後、あなたはidプロパティが自動的にあなただけのクラスのインスタンスを作成するたびに生成させたい場合は$this

class abc { 
    private $id; 

    function setID() { 
     $a = md5(time()); 
     $this->$id = substr($a,0,8); 
    } 

    function send_mails_on_publish($post) { 
     // use `$this->id` instead of `id` 
    } 
} 

であなたのクラスのメソッドのいずれかの内側にそれを使用します中に入れる__construct()方法

function __construct() { 
    $this->setID(); 
} 
+0

私はDevDonkeyの指示に従った。 2つの場所で異なる値を取得しています。申し訳ありませんが、私は私の質問で言及するのを忘れました。私は2つの場所で同じユニークIDを取得したい。データベースと他の電子メールのためにまず –

+0

私は言ったように '$ this-> setID();'を '__construct()'呼び出しの中に置き、あなたのクラスメソッドのどこにでも '$ this-> $ id'を使うと、 '$ this-> setID();'をもう一度呼び出さなければ変更されません。 –

+0

Ok。私の試してみましょう。 –

関連する問題