如何使用类别的自定义字段更改帖子特色图像?

时间:2020-07-18 作者:L. core

我为类别添加了一个图像自定义字段,在该字段中,我为每个类别指定了一个图像。类似这样:

enter image description here

我有一个自定义的帖子类型,对于我在这个帖子类型中发布的每一篇帖子,我都会指定一个类别。我需要我发布的每篇文章根据指定给它的类别,用已添加到自定义字段的图像更改其特征图像。

有什么帮助吗?

Edit:

我发现这个话题是关于同一个问题的:

https://support.advancedcustomfields.com/forums/topic/post-featured-image-from-category-custom-field-image/

有一个关于如何做的解释。希望有人能在代码方面帮助我,因为我没有足够的技能来完成它。

1 个回复
最合适的回答,由SO网友:joshmoto 整理而成

您可以过滤the_post_thumbnail() 函数,它将动态显示所有自定义帖子类型中指定的类别图像,而不是使用acf_save_post 将类别图像保存在post featured image meta字段中。

通过筛选the_post_thumbnail() 对于您的特定帖子类型,这意味着如果您将来更改类别上的图像,它将自动使用指定的类别更新所有自定义帖子类型的特色图像。

下面是一个粗略的示例,它可能会让您走上正确的轨道,请仔细阅读我在代码中的注释,以便您可以更新相关字段以适应您的环境。。。

/**
 * @param $html
 * @param $post_id
 * @param $post_thumbnail_id
 * @param $size
 * @param array $attr
 * @return string $html
 */
function modify_cars_featured_img_html($html, $post_id, $post_thumbnail_id, $size, $attr) {

    // if post type is not \'cars\' then return html now
    if(get_post_type($post_id) <> \'cars\') return $html;

    // get the categories from cars post
    $cat = get_the_terms($post_id,\'category\');

    // if categories var is array then return categories else false
    $cat = is_array($cat) ? $cat : false;

    // if categories is false then return html now
    if(!isset($cat[0])) return $html;

    // get categories image acf field using first existing category id in array objects
    $id = get_field(\'your_category_acf_img_field_name\',\'category_\'.$cat[0]->term_id);
    
    // get the attachment data based on passed size and category image id
    $src = wp_get_attachment_image_src($id, $size);

    // get the media item image title from category image id
    $alt = get_the_title($id); 

    // if class is passed in post thumbnail function in theme make sure we pass this to featured image html
    $class = isset($attr[\'class\']) ? $attr[\'class\'] : false;

    // the new post thumbnail featured image html
    $html = \'<img src="\' . $src[0] . \'" alt="\' . $alt . \'" \' . ( $class ? \'class="\' . $class . \'"\' : null ) . \' />\';
    
    // return the image html
    return $html;
}

// add the filter
add_filter(\'post_thumbnail_html\', \'modify_cars_featured_img_html\', 99, 5);
将所有这些更新的代码添加到functions.php.

更新以上代码以返回$html 在这个函数的早期两点,因为我最初只是返回,这会导致您的其他帖子缩略图断裂。

请确保您还将类别图像acf字段设置为返回图像ID,否则此惯用代码将不起作用。

enter image description here

如果这能解决问题,请告诉我。

相关推荐

如何让`wp-list-table`显示我在Custom-Post中的`Custom-Fields`

一切都好吗<我需要wp-list-table 也要显示custom-fields 在每个custom-post 我有,但我不知道如何做到这一点,在这幅图中,它显示了带有字段的表格:Title, Author and Publication Date: 我想要的是能够选择custom-fields 将出现,例如以下示例Title, Carta, Naipe, Author, and Date of Publication: