web-dev-qa-db-ja.com

カスタム投稿タイプのタイトルを投稿の日付に設定

'status'というカスタム投稿タイプがあり、投稿タイプで 'title'を無効にしています。現在、すべての投稿に「自動ドラフト」というタイトルを付けています。タイトルを投稿の日付に設定する方法を設定したいです。私は 'wp_insert_post_data "を使用すべきだと思います。現在、私は以下のコードを使用していますが、うまくいきません。

function status_title_filter( $data , $postarr )
{

if ($postarr['post_type'] == 'status'){
    $date = $data['post_date'];
    $data['post_title'] = $date;
}
return $data;
}

add_filter( 'wp_insert_post_data' , 'status_title_filter' , '99' );

私の単純な問題を解決してくれてありがとう。このようなことに関しては、私は一種の初心者です。

3
Zack Austin

コーデックスが言っていることにもかかわらず、$ postarrは常に渡されるわけではないので、あなたは単に$ dataを使うべきです。 $ dataは意味のある変数名ではありませんが、$ cleanPostをお勧めします。通常は必要ないので、フィルタの優先順位も削除してみます。タイトルに加えてスラッグ(post_name)を設定し、自動ドラフトやゴミ箱へのゴミ箱の操作でコードを実行しないようにすることもお勧めです。これが代わりに動作するかどうかを確認してください。

function status_title_filter( $cleanPost )
{
    if( $cleanPost['post_type'] == 'status' && $cleanPost['post_status'] != 'auto-draft' && $_GET['action'] != 'trash' && $_GET['action'] != 'untrash' )
        $cleanPost['post_title'] = $cleanPost['post_name'] = $cleanPost['post_date'];

    return $cleanPost;
}

add_filter( 'wp_insert_post_data', 'status_title_filter' );

更新:$ postarrが表示されないのは、デフォルトではアクションコールバックが1つのパラメータしか受け付けないためです。もっと欲しいなら、add_action( 'wp_insert_post_data', 'my_callback_function', 10, 2)のようにフックでそれを指定しなければなりません。これは優先順位を10に、引数の数を2に設定します。

4
Ian Dunn

それを行うプラグインがあります - datetitle 。たぶん、あなたはそこのコードを見てそれをどうやってやるかというアイデアを得ることができます。

0
Lea Cohen

私はそれが遅れていることを知っています、しかしあなたがあなたが投稿を作成する直前に投稿日付にタイトルを設定することができます。

$postarr['title'] = current_time('mysql');
$postarr['post_type'] = 'myposttype';
wp_insert_post($postarr);

HTH

0
rexposadas