サポート » 使い方全般 » テスト投稿

  • お世話になります。
    アドレスの生成について質問させて下さい。

    「記事投稿時」にアドレス(スラッグ?パーマリンク?)を自動的にランダムにしたいと思い、次のコードをfunction.phpというファイルの一番下に記載いたしました。

    function my_post( $data , $postarr ) {
      // POSTタイプがkitchenだったら・ここから
      if ($data['post_type'] == 'kitchen') {
        $str = array_merge(range('a', 'z'), range('0', '9'), range('A', 'Z"'));
        $r_str = null;
        for ($i = 0; $i < 12; $i++) {
          $r_str .= $str[rand(0, count($str))];
        }
        if ( ! in_array( $data['post_status'], array( 'trash', 'auto-draft' ) ) ) {
          $data['post_status'] = 'publish';
          $data['post_name'] = $r_str;
        }
      }
      // POSTタイプがkitchenだったら・ここまで
    return $data;
    }
    add_action( 'wp_insert_post_data', 'my_post', 99, 2 );

    実際にこのコードでランダムにはできたのですが、「記事投稿時」だけでなく「記事編集時」にまで、再度別のランダムになってしまうという問題が発生してしまいました。

    そこで質問ですが、どのようにしたら一度投稿した記事のアドレスは変更されないようにできるかについて、ご教授願えませんでしょうか。

    WordPres初心者で言葉などにおかしな部分があるかと思いますがご容赦下さいませ。

    何卒宜しくお願い致します。

    • このトピックは ashitatenkiが3 週間、 2 日前に変更しました。
6件の返信を表示中 - 1 - 6件目 (全6件中)
  • モデレーター Okamoto Hidetaka

    (@hideokamoto)

    原因としては、wp_insert_post_dataというフックは記事の更新時にも実行されるからですね。

    この記事などは参考になりませんか?
    https://2inc.org/blog/2013/01/21/2526/

    ご回答どうもありがとうございます。

    そちらのサイトを拝見しますと、次のようにありました。

    >従って、例えば「新規公開時に限って処理を実行したい」という場合は、{$old_status}_to_publishの形式で全てのフックを指定すれば良い。

    あとは仰る点と併せて鑑みるに、おそらく私のコードにある「wp_insert_post_data」を削除して、「{$old_status}_to_publishの形式で全てのフックを指定すれば良い」ということになるのだと思いますけれど、

    それが一体何を意味し、結果としてどのようなコードになるべきか、残念ながら今一つイメージがつかめませんでした。

    CG

    (@du-bist-der-lenz)

    イメージとしては、wp_insert_to_publishという感じでしょうか。そんなことは、承知できているって、ことでしたら構わないで下さい。

    ashitatenki

    (@ashitatenki)

    ご回答どうもありがとうございます。

    私のコードの最後の部分を
    add_action( ‘wp_insert_post_data’, ‘my_post’, 99, 2 );

    次のようにする…ということでしょうか?
    add_action( ‘wp_insert_to_publish’, ‘my_post’, 99, 2 );

    しかしこれでは新規投稿時のランダム機能が働きませんでした。

    モデレーター Okamoto Hidetaka

    (@hideokamoto)

    元記事にサンプルコード載っていますね。

    
    // 例)下書き状態から公開状態になったとき
    add_action( 'draft_to_publish', 'my_function' );
    

    「draft (下書き)から publish(公開)になったときにmy_function()を実行する」です。

    ステータスのリストなども記事内にありますので、テスト環境などを使ってまずはコードを動かしてみてください。

    add_action( ‘raft_to_publish’, ‘my_post’, 99, 2 );
    という「’下書き→to_publish’」でできず、

    add_action( ‘new_to_publish’, ‘my_post’, 99, 2 );や
    add_action( ‘auto-draft_to_publish’, ‘my_post’, 99, 2 );
    などにも挑戦してみたものの、効果はありませんでした。

    「’未公開→to_publish’」はどう書くのですか?

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • このトピックに返信するにはログインが必要です。