设置Wordpress摘录和张贴缩略图基于自定义字段



如标题所述,我想根据ACF自定义字段自动保存/更新post_摘录和post_thumbnail的值(主要是出于与其他插件的兼容性原因)。现在,在尝试完成此任务时,我遇到了两个问题,首先是以下函数:

function test_FeaturedImageSetByACF() {
    $current_screen         = get_current_screen(); // Current admin screen needed to identify the current cpt
    $current_cpt_name       = $current_screen->post_type; // Current cpt name
    $current_cpt_support    = 'thumbnail'; // We want to check if the CPT supports this feature
    $post_id                = get_the_ID(); // Current post ID
    $post_image_field       = get_field('post_head_img'); // ACF field we want to sync
    $post_image_id          = $post_image_field['id']; // ACF image filed ID
    $post_image_url         = $post_image_field['url']; // ACF image filed URL
    // If current cpt supports thumbnails/featured images
    if ( post_type_supports( $current_cpt_name, $current_cpt_support ) ) {
        if ( ( $post_image_url ) AND ( ( $post_image_url ) != ( get_the_post_thumbnail() ) ) ) {
            delete_post_thumbnail( $post_id );
            set_post_thumbnail( $post_id, $post_image_id );
        }
    }
}
add_action('save_post', 'test_FeaturedImageSetByACF', 13, 2 );
add_action('publish_post', 'test_FeaturedImageSetByACF', 10, 2 );

它确实工作,但有时它似乎只有第二次保存时才更新值(这意味着我必须保存两次)。我知道我要么使用了错误的钩子,要么使用了错误的优先级或诸如此类的东西,但我不知道是哪一个。

我的第二个问题是,我想完成一些类似的后摘录。现在,函数看起来与前一个非常相似,但我不知道该更新哪个值。有人能给我指个方向吗?

Thanks in advance

您可以使用acf/save_post钩子。传递对象ID

add_action('acf/save_post', 'handle_acf', 20);
function handle_acf($object_id)
{
// Do your stuff
}

因为这更像是一个ACF特有的问题,而不是一个通用的问题,我决定在ACF的支持论坛上发布,以及用户John Huebner为我指出了正确的方向。对于任何感兴趣的人来说,这个主题可以在https://support.advancedcustomfields.com/forums/topic/set-wordpress-excerpt-and-post-thumbnail-based-on-custom-field/上找到,而(在帖子可能被删除或什么的情况下)这是我用于摘录部分和自定义帖子缩略图/特色图像的代码:

add_action('save_post', 'flex_CustomExcerptSetByACF', 50);
function flex_CustomExcerptSetByACF() {
    global $post;
    $post_id        = ( $post->ID ); // Current post ID
    $post_excerpt   = get_field( 'post_excerpt', $post_id ); // ACF field
    if ( ( $post_id ) AND ( $post_excerpt ) ) {
        $post_array     = array(
            'ID'            => $post_id,
            'post_excerpt'  => $post_excerpt
        );
        remove_action('save_post', 'flex_CustomExcerptSetByACF', 50); // Unhook this function so it doesn't loop infinitely
        wp_update_post( $post_array );
        add_action( 'save_post', 'flex_CustomExcerptSetByACF', 50); // Re-hook this function
    }
}
add_action('save_post', 'flex_FeaturedImageSetByACF', 50);
function flex_FeaturedImageSetByACF() {
    $current_screen         = get_current_screen(); // Current admin screen needed to identify the current cpt
    $current_cpt_name       = $current_screen->post_type; // Current cpt name
    $current_cpt_support    = 'thumbnail'; // We want to check if the CPT supports this feature
    global $post;
    $post_id                = ( $post->ID ); // Current post ID
    $post_image_field       = get_field('post_head_img', $post_id ); // ACF field
    if ( ( $post_id ) AND ( $post_image_field ) ) {
        $post_image_id          = $post_image_field['id']; // ACF image filed ID
        $post_image_url         = $post_image_field['url']; // ACF image filed URL
        // If current cpt supports thumbnails/featured images
        if ( post_type_supports( $current_cpt_name, $current_cpt_support ) ) {
            if ( ( $post_image_url ) AND ( ( $post_image_url ) != ( get_the_post_thumbnail() ) ) ) {
                update_post_meta($post_id, '_thumbnail_id', $post_image_id);
            }
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新