ACF 値などの登録まとめ

情報を追記している場合はありますが、古い情報を訂正はしていませんので、公開年月日を参照してください。プラグイン・タグ、いずれもワードプレス・PHPのバージョン等によって動作しない場合もあります。

Advanced Custom Fields の値をタイトルや別フィールドに登録する覚書まとめ

投稿タイトル
function my_post_title_updater( $post_id ) {
    $my_post = array();
    $my_post['ID'] = $post_id;
    if ( get_post_type() == 'posttype' ) {
      $my_post['post_title'] = get_field('title');
    } 
    wp_update_post( $my_post );
  }
  add_action('acf/save_post', 'my_post_title_updater', 20);
投稿スラッグ
function custom_post_title( $value, $post_id, $field  )
{
$type = get_post_type($post->ID);
if ( 'posttype' == $type) {
		if(isset($value) && $value != '') {
			 $args = array(
				 'ID'           => $post_id,
				 'post_name' => sanitize_title($value)
			 );
			 wp_update_post( $args );
		}
    return $value;
} }
add_filter('acf/update_value/name=slug', 'custom_post_title', 10, 3);
アイキャッチ
function acf_set_featured_image( $value, $post_id, $field ){
	$type = get_post_type($post->ID);
 if($value != '' && 'posttype' == $type){
 add_post_meta($post_id, '_thumbnail_id', $value);
 }
 return $value;
}
add_filter('acf/update_value/name=eyecatch', 'acf_set_featured_image', 10, 3);
リピーターの数
本文用のセットで見出しが2つ以上あれば目次を表示、などの分岐用に別のフィールドに保存しておくと便利

function my_acf_update_value( $value, $post_id, $field ) {
    if(get_post_type( $post_id ) == 'xxx' && have_rows('xxx')) { $count=0; while (have_rows('xxx')) : the_row();
        if (get_sub_field('title')) { $count++; }
    endwhile; } 
    $value = $count;
    return $value;
}
add_filter('acf/update_value/name=count', 'my_acf_update_value', 10, 3);
パスワード
パスワード保護を必須にしたい場合に

function my_post_password_updater( $post_id ) {
    $my_post = array();
    $my_post['ID'] = $post_id;
    if ( get_post_type() == 'posttype' ) {
      $my_post['post_password'] = get_field('password');
    } 
    wp_update_post( $my_post );
  }
  add_action('acf/save_post', 'my_post_password_updater', 20);
ターム名
メールフォーム でターム名を利用するため

function my_acf_update_term( $value, $post_id, $field ) {
	if(get_post_type( $post_id ) == 'entry' ) {
        $terms = get_the_terms($post->ID, 'taxonomy-name'); if ($terms && ! is_wp_error($terms)) { foreach($terms as $term) { $value = $term->name; break; }; } } 
    return $value;
}
add_filter('acf/update_value/name=field-name', 'my_acf_update_term', 10, 3);

その他のAdvanced Custom Fields に関する記事一覧

Advanced Custom Fields に関する記事一覧ページへ