サポート » 使い方全般 » レビュー待ちの記事を公開した時に投稿者を変更したくない

  • 解決済 gogoweb

    (@gogoweb)


    現在寄稿者数人に記事を書いてもらいレビュー待ちで投稿

    編集者が確認後公開
    という形のサイトを構築しています。

    その際投稿者名は寄稿者の名前を使いたいのですが
    レビュー状態ではpost_authorの値が寄稿者のままですが公開状態にするときに編集者のになってしまいます。
    pending_to_publishにフックしてレビュー前の投稿者名に切り替えようかと思ったのですがどうもこのタイミングではすでに編集者の名前に切り替わっているようです。
    カスタムフィールドかなんかに一時的にユーザーIDを保存しておくのも考えましたがイマイチ無理矢理な感じがしました。

    何かスマートに改善する方法はないでしょうか?

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • kjmtsh

    (@kjmtsh)

    犯人は、wp_insert_post() です。投稿データの保存や変更は、最終的に、ここを通過するようになっていますが、冒頭で、

    $user_id = get_current_user_id();
    $defaults = array(...'post_author' => $user_id...);

    となります。pending_to_publish はデータベースに保存された後に実行されます。編集データが保存される前に使えるのは、wp_insert_post_data フィルタフックか、pre_post_update アクションフックのどちらかです。が、「変更しない」という動作をさせられないので、変更前のデータを得るために、どうしてもデータベースアクセスが発生してしまいます。前者は、全ての操作が対象で、その後にデータの整形が残っているので、後の方を使ってみました。

    add_action('pre_post_update', 'rewrite_author');
    function rewrite_author($post_ID, $data) {
        $previous_status = get_post_field('post_status', $post_ID);
        $previous_author = get_post_field('post_author', $post_ID);
        if ($previous_status == 'pending') {
            $data['post_author'] = $previous_author;
        }
    }

    うまくいく保証はありません。

    トピック投稿者 gogoweb

    (@gogoweb)

    ソースを追加したところ無事動作しました。ありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「レビュー待ちの記事を公開した時に投稿者を変更したくない」には新たに返信することはできません。