根据用户选择的分类法显示帖子

Show Post based on taxonomies choosen by the user

提问人:Vera Poerschke 提问时间:11/16/2023 更新时间:11/16/2023 访问量:29

问:

我有一个网站,其分类名为“db_themen”,具有不同的值。来自我的网站的帖子被分配给“db_themen”中的这些分类值。

在我的网站上,用户可以在他的前端用户配置文件中选择他感兴趣的“db_themen”并保存此输入。这通过类型为“Taxonomy”(字段名称:“meine_themen”)的 ACF 字段工作,该字段链接到分类“db_themen”。

根据他的输入,只有分配给相同分类法的帖子才应该显示在该用户的前端存档(Elementor 存档循环网格)上。

我试图在我的函数 .php 中编写一些东西,但我是一个完全的初学者。此代码唯一要做的就是隐藏后端中的所有帖子条目:

function abfrage_meine_themen($query) {
    if ($query->is_main_query() && is_user_logged_in()) {
    $ausgewaehlte_themen = get_field('meine_themen', 'user_' . get_current_user_id());
        if ($ausgewaehlte_themen) {         
            $tax_query = array(
                array(
                    'taxonomy' => 'db_themen',
                    'field'    => 'slug',
                    'terms'    => $ausgewaehlte_themen,
                ),
            );
            $query->set('tax_query', $tax_query);
        }
    }
}
add_action('pre_get_posts', 'abfrage_meine_themen');

有人可以告诉我我的错误在哪里吗?我敢肯定有几个 🙂

PHP WordPress 用户输入 分类 webarchive

评论

0赞 lvil 11/16/2023
在变量名称中使用除英语以外的任何语言都是一种非常糟糕的做法

答:

0赞 Druvi Shah 11/16/2023 #1
function abfrage_meine_themen($query) {
    // Check if this is the main query and the user is logged in
    if ($query->is_main_query() && is_user_logged_in()) {
        
        // Get the selected topics for the current user
        $ausgewaehlte_themen = get_field('meine_themen', 'user_' . get_current_user_id());
        
        // Check if topics are selected
        if ($ausgewaehlte_themen) {
            // Convert the selected topics into an array
            $ausgewaehlte_themen = explode(',', $ausgewaehlte_themen);

            // Setup the tax query
            $tax_query = array(
                array(
                    'taxonomy' => 'db_themen',
                    'field'    => 'slug',
                    'terms'    => $ausgewaehlte_themen,
                ),
            );

            // Set the tax query to the main query
            $query->set('tax_query', $tax_query);
        }
    }
}

// Hook the function into pre_get_posts
add_action('pre_get_posts', 'abfrage_meine_themen');

评论

0赞 Druvi Shah 11/16/2023
ACF 字段可以将所选主题存储为逗号分隔的字符串。我们使用 explode 将这个字符串转换为数组。在应用税务查询之前,最好先检查是否有任何选定的主题。仅当存在选定的主题时,才会设置税务查询。这样可以防止在未选择主题时修改查询,这可能会导致问题。请确保将 ACF 字段meine_themen设置为返回术语的 slug,并且它包含有效的分类术语。
0赞 Druvi Shah 11/16/2023
我可以更新答案的详细信息