私はhousesという名前のカスタム投稿タイプがあります。カスタム投稿タイプの中には、ACFを使用して作成したカスタムフィールドがいくつかあります。
私がしなければならないのは、私が新しい投稿を作成するときにパーマリンクを変更することです。
パーマリンクをカスタマイズするためにコードとtitleフィールドを使いたいのですが。 :
//code + post title
4563312-house-example-1
私はすべてを制御するプラグインを開発しています。
パーマリンクを更新するために投稿の作成を仲介する方法はありますか?
ありがとう。
Cedonが私にくれた例、私は私が必要とするものに達することができました、いくつかの変更で。
Wp_insert_post_dataを使用しても、カスタム・フィールド値を取得できませんでした。そのためには、代わりにsave_postを使用する必要がありました。
function rci_custom_permalink($post_id) {
$post = get_post($post_id);
if($post->post_type !== 'houses') return;
$code = get_field('code', $post_id);
$post_name = sanitize_title($post->post_title);
$permalink = $code . '-' . $post_name;
// remove the action to not enter in a loop
remove_action('save_post', 'rci_custom_permalink');
// perform the update
wp_update_post(array('ID' => $post_id, 'post_name' => $permalink));
// add the action again
add_action('save_post', 'rci_custom_permalink');
}
add_action('save_post', 'rci_custom_permalink');
シモンズ:これらのフィールドはすべて必須なので、空かどうかを確認する必要はありませんでした。
Save_postアクションについては、 プラグインAPI /アクションリファレンス/ save post を参照してください。
これはwp_insert_post_data
フックを使って行うことができます。
function house_post_slug( $data ) {
if ( $data['post_type'] == 'houses' ) {
$permalink = '';
if ( isset ( $_POST['ACF Code Field'] ) ) {
$permalink = $_POST['ACF Code Field'];
}
if ( isset ( $_POST['post_title'] ) ) {
$permalink .= '-' . $_POST['post_title'];
}
$data['post_name'] = sanitize_title( $permalink )
}
error_log( '=== Filter $data ===');
error_log( print_r($data, true) );
return $data;
}
add_filter( 'wp_insert_post_data', 'house_post_slug' );
そのため、このフィルタが行うことはWordPressからの$data
をインターセプトすることです。post_type
フィールドがあなたのカスタム投稿タイプのものであるかどうかを確認して、その特定のCPTに対してのみ起動されるようにしてください。
その後、ACFコードフィールドが設定されているかどうかを確認します。そしてもしそうなら、それは `$ permalinkをその値に設定します。
私はACFを使ったことがないので、それらがどのような構造を使っているのかよくわかりません。あなたはこれを追加することによってダンプを見ることができます:
error_log( print_r ( $_POST, true ) );
次に、post_title
キーが設定されているかどうかを確認します。もしそうなら、それは-
とpost_title
の値が何であれ何でも追加します。
最後に、post_name
の$data
キーを$permalink
のサニタイズされたバージョンに設定し、それを返します。
診断目的で$data
のダンプを見ることができるように、2つのerror_log()
ステートメントを入れました。