如何使 Wordpress save_post_($post-type) 挂钩适用于多个自定义 Post 类型

How to make Wordpress save_post_($post-type) hook works with multiple Custom Post Types

我有一个与 save_post_($post-type) hook 和 ACF gallery 字段相关的问题。

我从某处得到了这个代码片段。让我解释一下:我创建了一个 ACF 画廊字段(acf-gallery 是字段名称)显示在 Custom Post Type(cpt1 是 slug)然后使用这个片段来设置第一张图片就像 Woocommerce 所做的那样,保存时将此图库作为特色图片。

但是如果我想让它与另一个自定义 Post 类型一起使用怎么办(假设 slug 是 cpt2)?我可以用 array( 'cpt1', 'cpt2' ) 代替 cpt1 吗?有没有办法包含多个自定义 post 类型?


/* Set the first image generated by ACF gallery field as featured image */

add_action( 'save_post_cpt1', 'set_featured_image_from_gallery' );

function set_featured_image_from_gallery() {

    global $post;
    $post_id = $post->ID;

    $images = get_field('acf_gallery', $post_id, false);
    $image_id = $images[0];

    if ( $image_id ) {
        set_post_thumbnail( $post_id, $image_id );
    }
}

我根据下面的评论使用 save-post 钩子编辑了这个片段。但我不知道它是否有效。有人可以帮忙吗?

/* Set the first image generated by ACF gallery field as featured image */

add_action( 'save_post', 'set_featured_image_from_gallery' );

function set_featured_image_from_gallery($post_id) {

    if (get_post_type($post_id) != array( 'cpt1', 'cpt2')) {
        return;
    }

    $has_thumbnail = get_the_post_thumbnail($post_id);

      if ( !$has_thumbnail ) {

        $images = get_field('acf_gallery', $post_id, false);
        $image_id = $images[0];

        if ( $image_id ) {
          set_post_thumbnail( $post_id, $image_id );
        }
      }
}

我通常使用 save_post 钩子,$post_id 变量,get_post_typein_array 函数。

function set_featured_image_from_gallery($post_id)
{
    $included_cpts = array('cpt1', 'cpt2', 'cpt3');

    if (in_array(get_post_type($post_id), $included_cpts)) {

        $has_thumbnail = get_the_post_thumbnail($post_id);

        if (!$has_thumbnail) {

            $images = get_field('acf_gallery', $post_id, false);

            $image_id = $images[0];

            if ($image_id) {

                set_post_thumbnail($post_id, $image_id);
                
            }
        }
    }
}

add_action('save_post', 'set_featured_image_from_gallery');