首页 > 解决方案 > 在 Wordpress 中使用 ACF(高级自定义字段)显示自定义帖子标题的下拉菜单

问题描述

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

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

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')
         )
     );
}

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

每个房间的字段包括:

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

    字段名称:房间名称,

    字段类型:文本,

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

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

    字段名称:price_per_night,

    字段类型:数字,

    默认值:5

  3. 字段标签:发布对象,

    字段名称:post_object,

    字段类型:帖子对象,

    返回格式:发布对象

之后,我返回到自定义帖子类型(房间)并编辑每个房间(房间 01 等),因此 Post 对象指向适当的页面(在本例中为名为 Reservation 的页面及其自定义模板)。

完成后,我打开了自定义模板 PHP 文件(Reservation 正在使用该文件)并添加了我从ACF 文档中复制的代码。

<?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)。

现在,无论我尝试什么,我都无法显示标题下拉菜单......

我尝试过的几件事:

$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 语句,我会收到以下警告/通知:

注意:试图获取非对象的属性“post_title”

总而言之,我似乎无法让它发挥作用。任何帮助、指示、建议和解释都将受到欢迎。

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

标签: phpwordpressadvanced-custom-fields

解决方案


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

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


                    <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>

推荐阅读