Php I';我已注册Wordpress附件的类别,但类别显示为空
我正在建立一个关于狗的网站,上面有很多图片。用户应该能够根据类别(例如狗的品种名称)查找图像。因此,我需要网站像对待普通博客帖子一样对待附件,并以帖子的形式将其按类别列出,如下所示: 为此,我使用functions.php中的以下代码注册了附件的类别和标记:Php I';我已注册Wordpress附件的类别,但类别显示为空,php,wordpress,Php,Wordpress,我正在建立一个关于狗的网站,上面有很多图片。用户应该能够根据类别(例如狗的品种名称)查找图像。因此,我需要网站像对待普通博客帖子一样对待附件,并以帖子的形式将其按类别列出,如下所示: 为此,我使用functions.php中的以下代码注册了附件的类别和标记: // add categories for attachments function add_categories_for_attachments() { register_taxonomy_for_object_type( 'cat
// add categories for attachments
function add_categories_for_attachments() {
register_taxonomy_for_object_type( 'category', 'attachment' );
}
add_action( 'init' , 'add_categories_for_attachments' );
// add tags for attachments
function add_tags_for_attachments() {
register_taxonomy_for_object_type( 'post_tag', 'attachment' );
}
add_action( 'init' , 'add_tags_for_attachments' );
现在,媒体确实显示了类别和标签,如下所示:
但是,类别页面不会检索任何内容。例如,尽管我在“小猎犬”类别下至少有三个图像/附件,但在尝试查看“小猎犬”类别时,不会显示任何内容。它被认为是一个空类别,尽管有三个附件有它
我想这是因为分类查询只在普通帖子中执行,不包括附件。我已经搜索了好几天了,但还没有找到如何在类别查询中包含附件,这样我的附件类别就不会显示为空。请帮忙P
分享我的发现,以防其他人需要同样的答案
这里实际上有两个问题:一个与“主查询”相关,另一个与“类别计数器”相关 1) 要在主查询中包含附件(从而在查看类别时与常规帖子一起检索附件),可以向functions.php添加以下过滤器:function my_custom_filter($query) {
if( !is_admin() && $query->is_main_query() ) {
if( $query->is_archive() ) {
$query->set('post_type', array( 'post', 'attachment' ) );
$query->set('post_status', array( 'publish', 'inherit' ) );
}
}
}
add_action('pre_get_posts','my_custom_filter');
2) 为了让附件填充类别,使它们不再显示为空,我创建了一个变通方法。我认为这不是最优雅和明智的解决方案,但它确实有效。在WordPress SQL数据库中执行以下mySQL查询:
UPDATE `wp_posts` SET `post_status`='publish' WHERE `post_type`='attachment' AND `post_status`='inherit' AND `post_mime_type`='image/jpeg'
附件通常不会显示在类别中,因为它们的默认post_状态为“继承”。此查询将其更改为“发布”,就像普通帖子一样
WordPress codex提到:
由于附件是post的一种类型,因此默认
_将使用update_post_term_count()(在register_taxonomy()函数中)。然而,这可能是不可取的,因为这只会
计算实际附加到其他帖子的附件(如
将图像插入帖子时)。这意味着附件
您只需使用媒体库上传到WordPress,但是
没有实际附加到另一个职位将不计算在内。(……)你
应通过设置强制使用_update_generic_term_count()
“\u update\u generic\u term\u count”作为update\u count\u回调的值。
另一个重要的考虑因素是_update_post_term_count()
统计发布的帖子。如果您使用的是自定义状态,或
要发布的自定义帖子类型不一定是
考虑被计算在计算中,那么你需要
提供不包含post_状态的您自己的回调
where子句的一部分
这肯定是解决反问题的正确方法,但我没有找到足够的信息来实施它。我无法弄清楚如何强制在类别上使用“\u update\u generic\u term\u count”,而不使用register\u taxonomy()的新调用覆盖类别,这将删除所有类别的当前配置。我发现绝对没有关于“提供我自己的不包括post_状态的回调”的信息。这个回调函数的正确语法是什么?我应该把它放在哪里?如果有人知道,请分享