【问题标题】:Query author meta for all posts on archive page查询存档页面上所有帖子的作者元数据
【发布时间】:2021-10-27 12:15:59
【问题描述】:

当用户在我的 Wordress 网站上注册时,会自动创建一个自定义帖子(运动员),并将该用户指定为作者。自定义帖子本质上充当个人资料页面。

在他们的个人资料页面上,用户填写一堆或信息,total_score 被计算并保存为用户元数据。如果他们没有填写所有表格 - 他们将没有 total_score,因为它是在提交时计算的。

我为帖子(运动员)创建了一个自定义存档页面,并使用设置>阅读>帖子页面将其设置为默认帖子存档。

在帖子预览模板(使用 Ele Custom Skins 和 Elementor 创建和循环)上,我添加了一个名为 #total_score_circle 的元素 - 如下图所示。

如果该帖子的作者元数据中没有total_score,我想在帖子预览布局中隐藏#total_score_circle

以下代码当前在所有帖子预览中隐藏了#total_score_circle,而不仅仅是作者元中不存在total_score 的代码。所以我的查询显然是关闭的。

任何帮助将不胜感激。

function total_score_display(){
        
    if (is_home()){
        
        global $post;
        $author_id=$post->post_author;
        
        $total_score = get_the_author_meta('total_score', $author_id);
        
        if(empty($total_score)) : ?>
            <style type="text/css">
                        #total_score_circle   {
                            display: none !important;
                        }
                    </style>
            <?php endif; 
        }
    }
        add_action( 'wp_head', 'total_score_display', 10, 1 );

前端是使用 Elementor Pro 创建的,我使用 Elementor 自定义皮肤创建了显示搜索结果的循环。

【问题讨论】:

  • 1- 当您检查is_home 时,get_queried_object_id 将返回主页的 ID 而不是用户 ID! 2- 不清楚total_score 是如何创建的以及由谁创建的?每个用户都是作者吗?你为什么使用get_the_author_meta? 3- 这可以在您的模板文件中轻松完成,在循环部分,您为什么要尝试通过wp_head 操作挂钩来完成? 请编辑您的问题并在模板中包含所有详细信息和循环结构/php-html 标记!
  • 嗨鲁维。谢谢您的帮助!我已更新问题并将代码更改为我使用的先前版本,因为它似乎更相关(我误解了 get_queried_object_id() 的功能)。我对存档页面不太了解,这就是我在这里的原因。
  • 没关系!我明白,我只是想在我的最后“复制”它以便我可以帮助你,然后我看到了一些差异!再次没关系。唯一重要的是一个清晰且解释清楚的问题,以便人们可以帮助您调试代码。
  • 我完成了你的任务,遇到了更多问题。因此,您有一个从数据库中查询的自定义帖子列表。对?使用该查询,您填充了您的 html template,它们是带有 total score 的卡片。对?您能否包含用于这些卡片的 HTML 模板?并且还包括您用来获取这些卡片数据的QUERY
  • 如果帖子的作者没有设置分数,那么卡片上不应有任何空的绿色圆圈。是对的吗?如果是这样,那么您尝试使用您提供的代码解决它的方式是不正确的。我们需要通过“您的自定义模板和查询”NOT 通过“wp_head 和 css”来完成。

标签: php wordpress metadata elementor usermetadata


【解决方案1】:

感谢 Ruvee 的指导,我设法通过使用 Elementor 和以下 PHP 在实际自定义皮肤页面上实现短代码来解决我的问题。

基本上我创建了一个短代码,它使用自定义 CSS 类 .total_score_circle 显示值,然后使用另一个短代码运行 if/else 语句。

如果total_score 存在,则返回do_shortcode(),如果不存在,则返回一个单独的、不相关的CSS 类。

我确信这不是一种优雅的方式,但与 Elementor 一起工作是一种享受。

    // Create shortcode to show total_score
    
    add_shortcode('total_score_sc', 'total_score_sc');
    function total_score_sc ($atts) {

    $total_score = get_the_author_meta( 'total_score');
    
    $total_score_class =  '<div class="total_score_circle" >';
    $total_score_class .= $total_score;
    $total_score_class .= '</div>'; 
    return $total_score_class;
    }
    
    // Create shortcode to replace above shortcode if total_score not present
    
    add_shortcode('final_total_score_sc', 'final_total_score_sc');

    function final_total_score_sc() { 
    global $post;
    
    $author_id = get_post_meta( get_queried_object_id(), 'author_id' );
    $total_score = get_the_author_meta( 'total_score', $author_id );

    $sR =  '<div class="total_score_circle_empty" >';
    $sR .= '</div>'; 

    if(empty($total_score))
        return $sR;
    else
        return do_shortcode( '[total_score_sc]' );
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多