您可以过滤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,否则此惯用代码将不起作用。
如果这能解决问题,请告诉我。