在 Wordpress 中使用 ACF(高级自定义字段)显示自定义 post 标题的下拉菜单

Displaying a dropdown menu of custom post titles with ACF (Advanced Custom Fields) in Wordpress

我想在 Advanced Custom Fields 的帮助下显示自定义 post 标题的列表。

首先,我创建了一个自定义 post 类型。

function create_posttype() {
     register_post_type(
         'room',
         array(
             'labels' => array(
                 'name' => __('Conference rooms'),
                 'singular_name' => __('Conference room')
             ),
             'menu_icon' => 'dashicons-building',
             'menu_position' => 5,
             'public' => true,
             'has_archive' => false,
             'publicly_queryable' => false,
             'show_ui' => true,
             'show_in_menu' => true,
             'query_var' => true,
             'rewrite' => false,
             'capability_type' => 'post',
             'supports' => array('title')
         )
     );
}

然后我在这个自定义 post 类型中创建了一些“posts”,即。 01号房、02号房等 接下来,我为每个房间创建了一个新的自定义字段,并使用 ACF 将位置规则设置为指向适当的房间。

每个房间的字段包括:

  1. 字段标签:房间名称,

    字段名: room_name,

    字段类型:文本,

    默认值:房间 01(每个房间都有不同的值,即房间 02、房间 03,...)

  2. 字段标签:每晚价格,

    字段名称: price_per_night,

    字段类型:数字,

    默认值:5

  3. 字段标签: Post object,

    字段名称: post_object,

    字段类型: Post Object,

    Return 格式: Post Object

在此之后,我返回自定义 post 类型(房间)并编辑每个房间(01 号房间等),因此 Post object 指向适当的页面(在这种情况下,名为 Reservation 的页面及其自定义模板)。

完成后,我打开了自定义模板 PHP 文件(Reservation 正在使用)并添加了我从 ACF documentation.

复制的代码
<?php
$featured_post = get_field('featured_post');
if( $featured_post ): ?>
    <h3><?php echo esc_html( $featured_post->post_title ); ?></h3>
<?php endif; ?>

不知道我必须在 get_field 部分调用什么,我在我的 WP 中搜索了一个房间,它指向 ?room=room-01。查找 get_field() 我假设我必须指向我想要显示的字段(参数 1)和字段所在的位置(参数 2)。

现在,无论我尝试什么,我都无法让标题 drop-down 菜单出现...

我试过的一些东西:

$featured_post = get_field('room', 'room=room-01');
$featured_post = get_field('room_name', 'room=room-01');
$featured_post = get_field('room_name', 'room');

如果我省略 if 语句,我会得到这个 warning/notice:

注意:正在尝试获取 属性 'post_title' of non-object

总而言之,我似乎无法让它工作。非常欢迎任何帮助、指点、建议和解释。

如果我可以提供任何其他信息,请随时询问。

经过大量搜索,我发现了一些相关问题,经过一些工作,我想到了这个...

这不是我想要的,但它确实有效...


                    <form>
                        <label for ="room">Select a room:</label>
                        <select name="room" id="room">
                    <?php
                    $args = array(
                        'post_type' => 'room',
                        'posts_per_page' => -1,
                        'orderby' => 'title',
                        'order' => 'ASC'
                    );
                    $the_query = new WP_Query($args);
                    $sobe = get_posts($args);
                    foreach ($sobe as $post){
                        setup_postdata($post);
                        $room_title = get_field('room_name');
                        
                        ?>
                        <option value=" <?php echo $room_title ?> " > <?php echo $room_title ?> </option>
                        
                        <?php
                        
                        
                    }
                    wp_reset_postdata();
                            
                    ?>
                    </select>
                    </br>
                    </br>
                    </form>