添加 ACF Post Object 字段到 Wordpress 管理栏
Add ACF Post Object field to Wordpress admin column
我有一个自定义 post 书籍类型,它有两个 ACF 字段,book_title
和 book_author
。我有一个单独的自定义 post 类型用于书中的段落,它将一本书作为 ACF post object 拉入段落自定义 post 类型中的两个字段具有相同的字段名称。
我希望能够将 book_title
和 book_author
字段显示为段落自定义 post 类型列表中的列。我目前能够提取书名,但这只是因为我提取的是 post 的标题,而不是 post 中的实际 book_title
字段。有没有办法像这样从 post object 中获取字段并将它们设置为列?
这是我的段落自定义 post 类型文件中的当前代码:
function add_acf_columns($columns)
{
return array_merge($columns, array(
'book_title' => __('Book Title') ,
'book_author' => __('Book Author')
));
}
add_filter('manage_passages_posts_columns', 'add_acf_columns');
function passages_custom_column($column, $post_id)
{
switch ($column)
{
case 'book_title':
echo get_the_title(get_field('book_title', $post_id));
break;
case 'book_author':
echo get_post_meta($post_id, 'book_author', true);
break;
}
}
add_action('manage_passages_posts_custom_column', 'passages_custom_column', 10, 2);
我对您的实际设置有点困惑,但总体思路应该适用于此。当使用 ACF "Relational > Post Object" field, it stores the actual relative WP_Post
object 时。这使您可以从中引用任何您想要的内容,而无需调用任何特殊内容。
只需执行以下操作:
$object = get_field( 'name_of_field', $post_id );
将使您能够从 post/custom post 类型中访问您想要的任何数据:
$title = $object->post_title;
$author_id = $object->post_author;
所以,就像我提到的,我对您的实际字段名称和实际 object 的存储位置有些困惑,但我认为 post object 是相同的存储在 book_title
和 book_author
字段中?无论哪种方式,您只需要使用 get_field
获取 WP_Post
object,然后您就可以访问与之相关的所有内容。然后你可以输出标题,并使用类似 get_the_author_meta()
的东西来获取作者的 display/first/last 名称等
add_action('manage_passages_posts_custom_column', 'passages_custom_column', 10, 2);
function passages_custom_column($column, $post_id) {
switch( $column ){
case 'book_title':
$book_object = get_field( 'book_title', $post_id );
echo ($book_object) ? $book_object->post_title : '';
break;
case 'book_author':
$book_object = get_field( 'book_author', $post_id );
if( $book_object ){
echo get_the_author_meta( 'display_name', $book_object->post_author );
}
break;
}
}
我通过修改 Xhynk 的答案解决了这个问题。
在 Passages post book
字段中抓取 Book post 对象的 ID 后,您可以使用 ACF's get_field() 抓取 title
和 author
本书 post 本身的值,然后将这些值传递到列中。
// add columns to passages list
add_filter('manage_passages_posts_columns', 'add_acf_columns');
function add_acf_columns($columns)
{
return array_merge($columns, array(
'book_title' => __('Book Title') ,
'book_author' => __('Book Author')
));
}
// add title and author to passages list columns
add_action('manage_passages_posts_custom_column', 'passages_custom_column', 10, 2);
function passages_custom_column($column, $post_id) {
switch( $column ){
case 'book_title':
$book_object = get_field( 'book', $post_id );
$book_title = get_field('title', $book_object->ID);
echo ($book_title) ? $book_title : '';
break;
case 'book_author':
$book_object = get_field( 'book', $post_id );
$book_author = get_field('author', $book_object->ID);
echo ($book_author) ? $book_author : '';
break;
}
}
我有一个自定义 post 书籍类型,它有两个 ACF 字段,book_title
和 book_author
。我有一个单独的自定义 post 类型用于书中的段落,它将一本书作为 ACF post object 拉入段落自定义 post 类型中的两个字段具有相同的字段名称。
我希望能够将 book_title
和 book_author
字段显示为段落自定义 post 类型列表中的列。我目前能够提取书名,但这只是因为我提取的是 post 的标题,而不是 post 中的实际 book_title
字段。有没有办法像这样从 post object 中获取字段并将它们设置为列?
这是我的段落自定义 post 类型文件中的当前代码:
function add_acf_columns($columns)
{
return array_merge($columns, array(
'book_title' => __('Book Title') ,
'book_author' => __('Book Author')
));
}
add_filter('manage_passages_posts_columns', 'add_acf_columns');
function passages_custom_column($column, $post_id)
{
switch ($column)
{
case 'book_title':
echo get_the_title(get_field('book_title', $post_id));
break;
case 'book_author':
echo get_post_meta($post_id, 'book_author', true);
break;
}
}
add_action('manage_passages_posts_custom_column', 'passages_custom_column', 10, 2);
我对您的实际设置有点困惑,但总体思路应该适用于此。当使用 ACF "Relational > Post Object" field, it stores the actual relative WP_Post
object 时。这使您可以从中引用任何您想要的内容,而无需调用任何特殊内容。
只需执行以下操作:
$object = get_field( 'name_of_field', $post_id );
将使您能够从 post/custom post 类型中访问您想要的任何数据:
$title = $object->post_title;
$author_id = $object->post_author;
所以,就像我提到的,我对您的实际字段名称和实际 object 的存储位置有些困惑,但我认为 post object 是相同的存储在 book_title
和 book_author
字段中?无论哪种方式,您只需要使用 get_field
获取 WP_Post
object,然后您就可以访问与之相关的所有内容。然后你可以输出标题,并使用类似 get_the_author_meta()
的东西来获取作者的 display/first/last 名称等
add_action('manage_passages_posts_custom_column', 'passages_custom_column', 10, 2);
function passages_custom_column($column, $post_id) {
switch( $column ){
case 'book_title':
$book_object = get_field( 'book_title', $post_id );
echo ($book_object) ? $book_object->post_title : '';
break;
case 'book_author':
$book_object = get_field( 'book_author', $post_id );
if( $book_object ){
echo get_the_author_meta( 'display_name', $book_object->post_author );
}
break;
}
}
我通过修改 Xhynk 的答案解决了这个问题。
在 Passages post book
字段中抓取 Book post 对象的 ID 后,您可以使用 ACF's get_field() 抓取 title
和 author
本书 post 本身的值,然后将这些值传递到列中。
// add columns to passages list
add_filter('manage_passages_posts_columns', 'add_acf_columns');
function add_acf_columns($columns)
{
return array_merge($columns, array(
'book_title' => __('Book Title') ,
'book_author' => __('Book Author')
));
}
// add title and author to passages list columns
add_action('manage_passages_posts_custom_column', 'passages_custom_column', 10, 2);
function passages_custom_column($column, $post_id) {
switch( $column ){
case 'book_title':
$book_object = get_field( 'book', $post_id );
$book_title = get_field('title', $book_object->ID);
echo ($book_title) ? $book_title : '';
break;
case 'book_author':
$book_object = get_field( 'book', $post_id );
$book_author = get_field('author', $book_object->ID);
echo ($book_author) ? $book_author : '';
break;
}
}