在 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 将位置规则设置为指向适当的房间。
每个房间的字段包括:
字段标签:房间名称,
字段名: room_name,
字段类型:文本,
默认值:房间 01(每个房间都有不同的值,即房间 02、房间 03,...)
字段标签:每晚价格,
字段名称: price_per_night,
字段类型:数字,
默认值:5
字段标签: 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>
我想在 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 将位置规则设置为指向适当的房间。
每个房间的字段包括:
字段标签:房间名称,
字段名: room_name,
字段类型:文本,
默认值:房间 01(每个房间都有不同的值,即房间 02、房间 03,...)
字段标签:每晚价格,
字段名称: price_per_night,
字段类型:数字,
默认值:5
字段标签: 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>