2

新しい投稿が公開されたときにサブスクライバーにメールを送信するだけのプラグインを作成しています(保留中、更新中、下書き中などにメールを送信しないようにする必要があります)

プラグインの定義には次のものがあります。

add_action('plugins_loaded', 'setup_plugin_actions');

function setup_plugin_actions(){
  if(has_action('new_to_publish')){
    $simple_email_subscriber = new email_subscriber();

    add_action('new_to_publish', $simple_email_subscriber->email_subscribers());
  }
}

And in my email_subscribers method I have:

class email_subscriber(){
  function email_subscribers(){
    //get post information
    $post = get_post($post_id);

    $post = get_post( $post_id );
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return false;

    if(wp_is_post_revision($post->ID) || wp_is_post_autosave($post->ID)) return;

    //email code
    ......
  }
}

非常に単純なコードで、 publish_postメソッドにアクションリスナーを追加しようとしています。

ただし、publish_postは頻繁に発生するため、更新、新規公開を行うたびに、またはワードプレスページにとどまって自動更新を行う場合でも、8通のメールを受信して​​いました。

新しい投稿が本当に作成されたときにのみ発生するコールバックを見つけようとしていました:new_to_post

まったく動作しません。

誰かが私を助けることができますか?

乾杯フィル

4

1 に答える 1

1

非常に多くのメールを受信する理由は、以下で説明するアクションを適切に追加していないためです。現状では、関数をアクションにフックするのではなく、実際に関数を呼び出してメールを何度も送信し、関数の結果をアクションにフックしています (これは実際には何もしません)。

いくつadd_actionかの問題があります-メソッドをトランジションnew_to_publishアクションに追加しています(投稿ステータスが「新規」で「公開」に変更された場合にのみ起動します)。publish_postどのステータスから公開された投稿もキャッチしません。渡したメソッドが無効です - 最初の要素がオブジェクトで 2 番目の要素が関数であるオブジェクトのメソッドである場合、引数は関数または配列の文字列です。次のようになります。

add_action('publish_post', array($simple_email_subscriber, 'email_subscribers') );

あなたの関数も$post_id引数として取っていないので、どの投稿をロードするかわかりません。あなたの定義は次のとおりです。

function email_subscribers($post_id){ /* your code */ }

$post = get_post( $post_id );また、必要のない関数で 2 回呼び出していますが、この関数publishがどのように呼び出されても投稿のステータスがある場合にのみ実行されるようにしたい場合は、次を追加します。

$post = get_post( $post_id );
if ($post->post_status != "publish") return;
于 2012-10-31T16:32:31.630 に答える