提问者:小点点

将ACF Post对象字段添加到Wordpress管理列


我有一个用于书籍的自定义帖子类型,它有两个ACF字段,book\u titlebook\u author。我对书中的段落有一个单独的自定义post类型,它将一本书作为ACF post对象拉入到段落中两个字段中,并使用相同的字段名自定义post类型。

我希望能够显示book_titlebook_author字段作为段落自定义文章类型列表中的列。我目前能够拉入书名,但那只是因为我抓取的是文章的标题,而不是文章中实际的book_title字段。有没有办法从这样的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);

共2个答案

匿名用户

我对你的实际设置有点困惑,但总体思路应该适用于这里。使用ACF“关系型”时

只需执行以下操作:

$object = get_field( 'name_of_field', $post_id );

将让您访问任何您想要从该帖子/自定义帖子类型的数据:

$title = $object->post_title;
$author_id = $object->post_author;

所以,就像我提到的,我对你的实际字段名称和实际对象的存储位置有点困惑,但是我认为同一个文章对象存储在book_titlebook_author字段中?无论哪种方式,您只需要获取带有get_fieldWP_Post对象,然后您就可以访问与之相关的所有内容。然后您可以输出标题,并使用类似于get_the_author_meta()的东西来获取作者的显示/名/姓等。

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 postbook字段中获取Book post对象的ID后,可以使用ACF的get_field()从Book post本身获取title作者值,然后传递这些值进入柱子。

// 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;
    }
}