通过自定义帖子类型中的字段分配模板的过滤器或操作挂钩

Posted

技术标签:

【中文标题】通过自定义帖子类型中的字段分配模板的过滤器或操作挂钩【英文标题】:Filter or action hook to assign a template by a field in custom post type 【发布时间】:2021-12-22 20:09:05 【问题描述】:

我有一个名为“project”的自定义帖子类型,并为其使用了模板“single-project.php” 这工作正常。

现在我想进行一些区分,如果“项目”帖子类型中的自定义值是移动的,我需要分配模板“single-project.php”,如果该自定义是“project-website.php”模板元值等于网站。

表示,需要代码根据自定义元值动态更改模板。

谢谢

【问题讨论】:

【参考方案1】:

如果自定义元值等于“website”,最简单的方法是从“single-project.php”文件中调用“project-website.php”文件。

编辑你的“single-project.php”文件:

<?php
    $custom_field_value = get_post_meta($post_id,'your-custom-meta-key',true);

    if($custom_field_value == 'website')
        echo get_template_part('single-project');
     else 
        *** ENTER YOUR CURRENT CODE FOR SINGLE-PROJECT.PHP HERE ***
    
?>

【讨论】:

【参考方案2】:

@Jeremy 好点,我已经知道了,但我是这样做的,谢谢,


function get_custom_post_type_template($single_template)

    global $post;
    $object = get_queried_object();
    $id = $object->ID;
    $post_type = $object->post_type;
    $is_mobile = get_field('is_mobile_app', $id);


    if ($is_mobile !== true && $post_type == 'project') 
       return $single_template = dirname(__FILE__) . '/single-project-website.php';
     else  
        return $single_template;
    

//    return $single_template;
```

【讨论】:

以上是关于通过自定义帖子类型中的字段分配模板的过滤器或操作挂钩的主要内容,如果未能解决你的问题,请参考以下文章

按自定义字段过滤帖子 - url 正确更新但过滤不起作用

按关系字段 (ACF) 的 Elementor 帖子的自定义查询过滤器

通过存档页面上的自定义字段查询自定义帖子类型

如何在页面模板中将ACF关系帖子显示为循环

在最近的订单模板和管理订单上显示产品帖子类型高级自定义字段(woocommerce)

如何在wordpress rest api中过滤自定义帖子类型的自定义字段?