WordPress中有没有使用CPT以外的数据结构的子系统,而这些数据结构是`get_posts‘无法捕获的?

时间:2018-09-02 作者:coolpasta

我正在构建功能来删除具有特定键/值术语对的帖子。很好,我可以运行这样的查询:

    $posts = get_posts([
        \'post_type\' => \'any\',
        \'posts_per_page\' => -1,
        \'meta_key\' => \'my_key\',
        \'meta_value\' => \'my_value\',
    ]);
但我在想。是any 真正地any 在任何情况下?我的意思是,是否有任何插件选择以CPT以外的任何其他方式来表达复杂的数据结构/集合?

WooCoomer的产品是CPT。简单的数字下载是CPT。旋转滑块滑块是CPT(与短代码组合)。WordPress生态系统中的任何东西都是CPT,这似乎是表达的目标。

但是,当这种情况不发生并且它是一种流行的插件时,是否存在边缘情况?

我的问题是,我的查询是否有可能失败。

1 个回复
SO网友:Levi Dulstein

实际上,如果你仔细看一下法典,你可以看到这个设置\'post_type\' 参数到any 默认情况下,将从查询中删除某些帖子类型:https://codex.wordpress.org/Class_Reference/WP_Query#Type_Parameters

“any”-检索除“exclude\\u from\\u search”设置为true的修订和类型之外的任何类型。

因此,您可以注册一个post类型并将其设置为非公共类型,正如您可能知道的那样,这里有很多参数,因此您可以使用这些参数:

$args = array(
    \'public\'                => false,
    \'show_ui\'               => false,
    \'show_in_menu\'          => false,
    \'show_in_admin_bar\'     => false,
    \'show_in_nav_menus\'     => false,
    \'show_in_rest\'          => false,
    \'can_export\'            => false,
    \'has_archive\'           => false,       
    \'exclude_from_search\'   => true, // this one is important!
    \'publicly_queryable\'    => false,
);
register_post_type( \'hidden_post_type\', $args );
考虑到这一点,我要说的是,大多数时候使用CPT是正确的方式,许多流行的插件都在这样做,使用非公开的帖子。

您总是可以寻找一种极端的解决方案,比如在数据库中为插件构建额外的表,但在我看来,这不是WordPress的方式。通过使用CPT,您可以获得许多现成的东西,例如缓存,您不必担心将来的兼容性。

结束

相关推荐