如何在WordPress中基于帖子类别设置回退特色图像
您是否正在寻找一种为特定WordPress类别设置默认帖子缩略图的方法?
如果您有没有特色图像的文章,或者如果您希望一个类别中的所有帖子都有类似的缩略图,那么您可以为每个类别设置一个回退图像,这样就不会遗漏任何博客文章。
在本文中,我们将向您展示如何在WordPress中为特定类别设置默认的回退特色图像。
为什么要为帖子类别添加回退特色图像?
假设你有一个WordPress博客,你为每个帖子分配一个类别。如果出于某种原因没有特色图像,您可以分配该类别中的所有帖子以显示相同的回退图像。
为帖子类别添加回退图像的另一个好处是,如果您的类别存档页面获得大量搜索流量,那么它们会更吸引人,更具吸引力。
也就是说,让我们看看如何使用WordPress插件和自定义代码根据帖子类别添加回退图像。
使用插件在WordPress中设置回退特色图像
默认情况下,WordPress不提供将图像添加到帖子类别页面的选项。但是,您可以使用WordPress插件轻松为帖子类别设置回退图像。
首先,您需要安装并激活类别和分类图像插件。有关更多详细信息,请参阅我们关于如何安装WordPress插件的指南。
激活后,您可以从WordPress管理面板前往设置»分类图像。接下来,您可以单击“类别”复选框,将分类图像包含在您的帖子类别中作为回退。
完成后,不要忘记单击“保存更改”按钮。
之后,您可以从WordPress仪表板转到帖子?类别。当添加新类别或编辑现有类别时,您将看到一个“图像”字段。
只需输入要添加到WordPress类别的图像URL。有关更多详细信息,请参阅我们的指南,了解如何获取您在WordPress中上传的图像的URL。
现在,当您发布没有分配特色图像的博客文章时,WordPress将使用您刚刚为类别设置的图片。
这是我们在您的演示网站上使用的图像的预览。
仅此而已!您现在已根据帖子类别成功添加了回退图像。
在没有插件的情况下在WordPress中设置回退特色图像
您还可以在不使用WordPress插件的情况下为帖子类别配置回退图像。然而,这种方法不建议初学者使用,因为它涉及代码片段。
您需要做的第一件事是为您的WordPress类别创建图像。使用类别slug作为图像文件名,并将它们全部保存为相同的格式,如JPG或PNG。
接下来,您可以从Media?Add New将类别图像上传到WordPress网站。
WordPress将在上传期间存储您的类别图像,并创建由您的主题定义的图像大小。
上传类别图像后,您需要将它们移动到不同的目录。只需使用FTP客户端连接到您的网站,然后转到/wp-content/uploads/
文件夹。
您上传的类别图像将存储在月份文件夹中,如/uploads/2022/08/
。
继续打开本月的文件夹。
有关更多信息,请参阅我们关于WordPress在您的网站上存储图像的指南。
接下来,在计算机桌面上创建一个文件夹,并将其命名为类别图像。现在将您的所有类别图像和WordPress为它们制作的所有尺寸下载到桌面上的这个新文件夹中。
下载完成后,您需要将类别图像文件夹上传到/wp-content/uploads目录。这样做将允许您将所有类别图像大小放在一个单独的文件夹中,该文件夹很容易调用您的主题。
有关更多详细信息,请参阅我们关于如何使用FTP将文件上传到WordPress的指南。
将类别图像显示为默认回退特色图像
接下来,当类别中的帖子没有一组时,我们将向您展示如何将其中一个图像显示为回退特色图像。
这种方法确实涉及复制和粘贴代码,我们通常不建议用户编辑他们的主题文件。小错误可能会在您的网站上犯大错误。
向网站添加代码的一个更简单的方法是使用WPCode。这是最好的WordPress代码片段插件,允许您管理网站上的自定义代码。
首先,您需要安装并激活免费的WPCode插件。有关更多详细信息,请参阅我们关于如何安装WordPress插件的指南。
接下来,您可以转到代码片段?+在WordPress管理面板中添加片段以添加新片段。然后只需单击“添加新”按钮。
之后,您可以添加自定义代码或使用WPCode库中的片段。
为此,您将使用自己的自定义代码,因此将鼠标悬停在“添加自定义代码(新片段)”选项上,然后单击“使用片段”选项。
现在为您的片段添加一个名称,并在“代码预览”部分输入代码。
由于代码有PHP,请确保选择“代码类型”作为PHP片段。
只需复制以下代码片段并将其粘贴到“代码预览”字段中。
/** * Plugin Name: Category Thumbnail Fallback * Description: Use the category image as fallback when the post does not have a featured image */ class WPBCategoryThumbnailFallback { protected static $taxonomies = ['category']; protected $nonceId = 'wpb_category_thumb_fallback_none'; protected $fieldId = 'wpb_category_fallback_post_image'; public $taxonomy; protected function __construct($taxonomy) { $this->taxonomy = $taxonomy; } public static function init() { foreach (static::$taxonomies as $taxonomy) { $_self = new self($taxonomy); add_action('admin_enqueue_scripts', [$_self, 'scripts']); add_action("{$taxonomy}_add_form_fields", [$_self, 'add']); add_action("{$taxonomy}_edit_form_fields", [$_self, 'edit'], 99, 2); add_action("created_{$taxonomy}", [$_self, 'saveTerm'], 10, 2); add_action("edited_{$taxonomy}", [$_self, 'editTerm'], 10, 2); add_filter("get_post_metadata", [$_self, 'fallback'], 99, 5); } } public function scripts($hook_suffix) { if (in_array($hook_suffix, ['term.php', 'edit-tags.php'])) { $screen = get_current_screen(); if (is_object($screen) && "edit-{$this->taxonomy}" == $screen->id) { wp_enqueue_media(); wp_add_inline_script('media-editor', $this->inlineScript()); } } } public function add() { ?> <div class="form-field upload_image-wrap"> <label for="upload_image">Image</label> <input id="upload_image" type="hidden" size="36" name="<?php echo esc_attr($this->fieldId) ?>" value=""/> <div id="wpb-category-image-preview" style="max-width: 150px; max-height: 150px;"></div> <input id="upload_image_button" class="button" type="button" value="Upload Image"/> <p>Enter a URL or upload an image</p> </div> <?php wp_nonce_field($this->nonceId, $this->nonceId); } public function edit($term, $taxonomy) { $value = get_term_meta($term->term_id, $this->fieldId, true); $image = wp_get_attachment_image((int)$value); ?> <tr class="form-field upload_image-wrap"> <th scope="row"><label for="name">Image</label></th> <td> <label for="upload_image"> <input id="upload_image" type="hidden" size="36" name="<?php echo esc_attr($this->fieldId) ?>" value="<?php echo esc_attr($value) ?>"/> <div id="wpb-category-image-preview" style="max-width: 150px; max-height: 150px;"><?php echo $image; ?></div> <input id="upload_image_button" class="button" type="button" value="Upload Image"/> </label> <p class="description">Enter a URL or upload an image</p> </td> </tr> <?php wp_nonce_field($this->nonceId, $this->nonceId); } public function saveTerm($term_id, $tt_id) { $data = array_filter(wp_unslash($_POST), function ($value, $key) { return in_array($key, [$this->nonceId, $this->fieldId]); }, ARRAY_FILTER_USE_BOTH); if ( empty($data) || empty($data[$this->nonceId]) || ! wp_verify_nonce($data[$this->nonceId], $this->nonceId) || ! current_user_can('manage_categories') ) { return null; } if (empty($data[$this->fieldId]) || empty(absint($data[$this->fieldId]))) { return delete_term_meta($term_id, $this->fieldId); } $value = absint($data[$this->fieldId]); return update_term_meta($term_id, $this->fieldId, $value); } public function editTerm($term_id, $tt_id) { $this->saveTerm($term_id, $tt_id); } public function fallback($null, $object_id, $meta_key, $single, $meta_type) { if ( $null === null && $meta_key === '_thumbnail_id' ) { $meta_cache = wp_cache_get($object_id, $meta_type . '_meta'); if ( ! $meta_cache) { $meta_cache = update_meta_cache($meta_type, [$object_id]); $meta_cache = $meta_cache[$object_id] ?? null; } $val = null; if (isset($meta_cache[$meta_key])) { if ($single) { $val = maybe_unserialize($meta_cache[$meta_key][0]); } else { $val = array_map('maybe_unserialize', $meta_cache[$meta_key]); } } if (empty($val)) { $fallbackImageId = $this->getPostFallbackImageId($object_id, $single); if ( ! empty($fallbackImageId)) { return $fallbackImageId; } } return $val; } return $null; } public function getPostFallbackImageId($postId, $single) { $terms = get_the_terms($postId, $this->taxonomy); if (empty($terms) || is_wp_error($terms)) { return null; } foreach ($terms as $term) { $fallbackIdFromCategoryId = get_term_meta($term->term_id, $this->fieldId, $single); if ( ! empty($fallbackIdFromCategoryId)) { return $fallbackIdFromCategoryId; } } return null; } public function inlineScript() { return "jQuery(document).ready(function ($) { var custom_uploader; $('#upload_image_button').click(function (e) { e.preventDefault(); //If the uploader object has already been created, reopen the dialog if (custom_uploader) { custom_uploader.open(); return; } //Extend the wp.media object custom_uploader = wp.media.frames.file_frame = wp.media({ title: 'Choose Image', button: { text: 'Choose Image' }, multiple: true }); //When a file is selected, grab the URL and set it as the text field's value custom_uploader.on('select', function () { console.log(custom_uploader.state().get('selection').toJSON()); attachment = custom_uploader.state().get('selection').first().toJSON(); var thumbUrl = attachment && attachment.sizes && attachment.sizes.thumbnail && attachment.sizes.thumbnail.url ? attachment.sizes.thumbnail.url : attachment.url; $('#wpb-category-image-preview').html('<img src=\"'+ thumbUrl +'\">'); $('#upload_image').val(attachment.id); }); //Open the uploader dialog custom_uploader.open(); }); });"; } }
接下来,您可以向下滚动到“插入”部分,然后选择“自动插入”,让插件为您处理放置。
然后在“位置”下拉菜单的“页面、帖子、自定义帖子类型”部分下选择“在内容之前插入”选项。
然后,您可以返回页面顶部,并将切换从“不活跃”切换到“活动”。
一旦您单击顶部的“保存片段”按钮,您的回退图像将就位。
您可能还想查看我们关于如何在WordPress中添加自定义代码片段的指南。
注意:此代码片段仅适用于“类别”分类法。但是,您可以通过在代码中将其名称添加到以下类的列表中,并将括号内的术语更改为“标签”或“帖子”来添加更多分类。
完成后,只需访问您的网站即可查看回退图像。
评论被关闭。