添加分类时生成随机插件

时间:2018-02-15 作者:Jared Wilcox

我创建了一个名为“报告”的自定义帖子类型,为向特定人员提供月度报告提供了一种简单的方法。我不希望用户必须登录才能查看报告,我也不希望任何用户找到其他用户的报告。

因此,我创建了一个自定义分类法,以便为每个用户创建一个术语。术语slug是一组随机的字母和数字。我可以手动创建一个“随机”slug,但我认为如果在添加术语时以编程方式创建slug会更好。在这种情况下,用户必须知道他们的随机词slug才能查看他们的报告,但他们永远无法猜测其他用户的slug。

例如:c8etv35n/john-doe-report-2018年1月/c8etv35n/john-doe-report-2018年2月/76w8o9ev/jane-doe-report-2018年1月

通过这种类型的安排,John Doe可以根据自己的随机片段查看分类法档案中的所有报告,但Jane Doe无法猜测如何以及在何处找到他的报告,反之亦然。

我在这方面到处寻找帮助,但我没有找到一个明确的解释。我已经研究了edit\\u terms挂钩和其他类似wp\\u update\\u term的工具。

我希望的是像save\\u post挂钩这样的东西,然后以某种方式影响slug。我可以处理随机字符串生成和其他一切。如果这一切都是可能的,那么我将在添加术语屏幕中隐藏“slug”字段,并让slug随机生成。

2 个回复
SO网友:sandrodz

您可以使用wp_insert_term_data:

add_filter( \'wp_insert_term_data\', function ( $data, $taxonomy, $args ) {
    $data[\'slug\'] = \'c8etv35n-c8etv35n-c8etv35n-c8etv35n\'; // generate slug however you wish.
    return $data;
});
我在wp_insert_term 作用here.

但您应该真正实现ACL,而不是依赖随机段塞来隐藏内容。

SO网友:Beee

我认为显示月度报告(据我所知,是个性化的)不应该公开显示,而应该始终在登录后显示。我认为这也显示了对阅读这些报告的人更专业一点,此外,当你可以将用户与某些操作“连接”起来时,你可以做得更多。

我理解我的建议可能不是你想要的确切答案,但在我看来,这是一种更好、更安全的方法。如果您的报告扩展了“敏感”信息,那么您仍然需要登录。

我会使用pre_get_posts 在“自定义分类法”页面上。首先检查用户ID及其匹配的术语(您可以在term meta). 像这样的(从我的头顶上看,虽然没有经过测试,但它给了你一个很好的主意)。

您确实需要(找到一种方法)在要查询的用户id中存储术语meta。

function wpse294132_override_tax_archive( $query ) {
    if ( ! is_admin() && $query->is_main_query() && is_tax( \'your_custom_taxonomy\' ) ) {
        $user_term_meta = get_user_meta( get_current_user_id(), \'custom_field_key\', true );

        $query->set( \'tax_query\', array(
            array(
                \'taxonomy\' => \'your_custom_taxonomy\',
                \'field\'    => \'term_id\',
                \'terms\'    => $user_term_meta,
                \'compare\'  => \'=\'
            ),
        ) );
    }
}
add_action( \'pre_get_posts\', \'wpse294132_override_tax_archive\' );

结束

相关推荐

在URL中使用Slug的自定义POST类型搜索

我有一个网站,有6个自定义的帖子类型,每一个都有一个搜索功能,只搜索特定的帖子类型。搜索按预期进行,并显示搜索结果。每个自定义帖子类型还具有一些自定义字母顺序分页,这些分页也显示在搜索结果页面上,这将查看自定义帖子类型存档,但当您从该存档中搜索时,搜索URL将恢复为根。例如:mydomain.com/?s=Walsall&post_type=clubs 但要使我的分页工作正常,搜索需要保留其CPT slug,如下所示:mydomain.com/clubs/?s=Walsall&p