Добавить поле «Опубликовать объект ACF» в колонку администратора Wordpress - PullRequest
2 голосов
/ 20 февраля 2020

У меня есть пользовательский тип записи для книг с двумя полями ACF, book_title и book_author. У меня есть отдельный настраиваемый тип записей для отрывков из книги, который помещает книгу как объект записи ACF в два поля в пользовательском типе записей переходов с одинаковыми именами полей.

Я хотел бы уметь отображать поля book_title и book_author в виде столбцов в списке пользовательских типов сообщений. В настоящее время я могу выбрать название книги, но это только потому, что я беру название поста, а не фактическое поле book_title из поста. Есть ли способ получить поля из почтового объекта, подобного этому, и установить их в виде столбцов?

Вот мой текущий код из файла пользовательских типов сообщений из моих переходов:

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 ]

1 голос
/ 20 февраля 2020

Я немного запутался в вашей фактической настройке, но общая идея должна применяться здесь. При использовании поля ACF "Relational> Post Object" сохраняется фактический относительный объект WP_Post. Это позволяет вам ссылаться на все, что вы хотите, без необходимости вызывать что-то особенное.

Просто сделайте следующее:

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

Даст вам доступ к любым данным из этого поста, которые вы хотите / пользовательский тип записи:

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

Итак, как я уже упоминал, я немного запутался в фактических именах полей и в том, где хранится фактический объект, но я думаю, что один и тот же объект записи хранится в обоих book_title и book_author поля? В любом случае, вам просто нужно получить объект WP_Post с get_field, и тогда у вас будет доступ ко всему, что с ним связано. Затем вы можете вывести заголовок и использовать что-то вроде get_the_author_meta(), чтобы получить отображение / имя / фамилию автора и т. Д. c.

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;
    }
}
0 голосов
/ 21 февраля 2020

Я решил это, изменив ответ Xhynk.

После того, как вы захватите идентификатор объекта Post в поле Passages post book, вы можете использовать get_field () * ACF , чтобы получить значения title и author из Книга публикует саму себя, а затем передает эти значения в столбцы.

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