WordPress Получить типы сообщений, только пользовательские типы сообщений - PullRequest
0 голосов
/ 02 июля 2019

Используя пользовательский плагин пользовательского типа сообщений, я хочу перенести любые пользовательские типы сообщений в поле ACF, которое используется страницей сообщений (чтобы пользователь мог выбрать, какой тип сообщения отображать).Теперь я заставляю его работать с приведенным ниже кодом, однако вместе с ним поставляется куча других «мусоров».Любая идея, как избавиться от этого и просто добавить оригинальный «пост» и любые «пользовательские типы постов»?

functions.php

function acf_load_post_type_choices( $field ) {

    $post_types = get_post_types();
    if($post_types) {

    // reset choices
    $field['choices'] = array();

    // get the textarea value from options page without any formatting    

         if ( is_array( $post_types[0] ) ) {
            $getTypeSlugs =  $post_types[0];
            $getTypeNames =  $post_types[0];
            // Array( supported_format_1, supported_format_2 ... )
        } else {

        }

        array_unshift($getTypeSlugs,'all','standard');
        array_unshift($getTypeNames,'all','standard');
        //create a string from formatSlug
        $values = implode("\n", $post_types );
        //create a string from category Name
        $labels = implode("\n",  $post_types);
        //Add an "all"-options

        //devide the strings into seperate objects
        $values = explode("\n", $values);
        $labels = explode("\n", $labels);
        $labels = array_map('ucfirst', $labels);

        // loop through array and add to field 'choices'

           foreach( array_combine($values, $labels ) as $value => $label ) {
                $field['choices'][ $value ] = $label;       
           }

        // return the field
        return $field;
    }

}
add_filter('acf/load_field/name=posts_by_type', 'acf_load_post_type_choices', 1);

Результат: enter image description here

Что я хочу: enter image description here

Мои пользовательские страницы: enter image description here

1 Ответ

0 голосов
/ 02 июля 2019

Это кажется немного сложнее, чем нужно, почему бы просто не добавить их вручную в поле, если это будут те 3 типа записей или, может быть, просто изменить:

$post_types = get_post_types();

до

$post_types = [
    'post' => 'post',
    'page' => 'page',
    'people' => 'people'
];

Вся функция get_post_types () делает это для получения имен типов записей?

Хорошо, возможное решение, которое может работать для вас, в зависимости от того, насколько динамичным вы хотите, чтобы это было.

Если вы возвращаете объекты из функции get_post_types ()

$all_post_types = get_post_types($args, 'objects');

И дайте вашим типам постов описание, чтобы различать их, например. include_in_select, затем вы можете перебрать те, которые соответствуют этому описанию, и поместить их в массив, а затем использовать этот массив в вашей исходной функции.

$post_types_no_junk = [];
foreach($all_post_types as $post_type){
    if($post_type->description === 'include_in_select'){
        $post_types_no_junk[] = $post_type;
    }
}

Не идеально, но может быть достаточно для достижения того, что вы ищете.

...