programing

Wordpress pods io - 사용자 지정 게시물 유형에 대한 필드 정보 가져오기 위한 Rest API

cafebook 2023. 10. 10. 20:57
반응형

Wordpress pods io - 사용자 지정 게시물 유형에 대한 필드 정보 가져오기 위한 Rest API

안녕하세요 저는 podsio를 사용하여 커스텀 포스트 타입을 만들었습니다.사용자 지정 게시물 유형의 나머지 API를 누를 때마다 해당 게시물 유형을 사용하여 생성된 모든 게시물에 대한 데이터가 표시됩니다.하지만 제가 rest API에서 필요한 것은 그 포스트 타입의 구성입니다.

즉, 해당 게시물 유형에 대한 레이블 및 필드 유형(설명 텍스트, 파일/비디오/이미지, wyswyg)을 가져와야 합니다.

위 그림과 같이 특정 사용자 지정 게시물 유형에 대한 모든 필드 정보를 가져와야 합니다.

Rest API를 이용한 워드프레스로 가능한가요?아니면 그렇게 하는 플러그인이 있습니까?

제 요구사항은 다른 유형의 필드를 구성하고 해당 페이지에 대한 필드 정보를 가져오는 것입니다.그렇게 하는 모든 플러그인이 도움이 될 것입니다.

를 사용하여 포드 필드의 세부 정보(예: 레이블 및 유형)를 얻을 수 있습니다.예를 들어,

$pod = pods( 'apc_information' );

// Get all fields.
$fields = $pod->fields();
foreach ( $fields as $field ) {
    echo $field['label'] . ' (' . $field['type'] . ')<br>';
}

// Get a specific field.
$field = $pod->fields( 'apc_title' );
echo $field['label'];

이제 WordPress REST API를 사용하여 필드 세부 정보를 가져오려면 사용자 지정 REST API 경로를 만들 수 있습니다.

아래는 여기에 있는 예를 기반으로 한 작동 예입니다.

  • 제가 이용한 커스텀 루트는/my-plugin/v1/fields/<pod>그리고 하나가 있습니다.GET끝점:prefix_get_pods_fields()포드의 필드 세부 정보를 얻기 위한 콜백입니다.

  • 포드의 모든 필드에 대한 세부 정보를 얻으려면 다음으로 요청합니다./wp-json/my-plugin/v1/fields/<pod>어디에<pod>는 포드 이름/slug입니다(예:apc_information당신의 경우).

  • 특정 필드의 세부 정보만 가져오려면 다음으로 요청합니다./wp-json/my-plugin/v1/fields/<pod>?field=<name>어디에<name>는 필드 이름/slug입니다(예:apc_title("Title" 필드).

    // The endpoint callback.
    function prefix_get_pods_fields( WP_REST_Request $request ) {
        // Get the pod.
        $pod = pods( $request['pod'], null, true );
    
        // Check if the pod exists and valid.
        if ( empty( $pod ) || ! $pod->valid() ) {
            return new WP_Error( 'rest_pods_invalid', 'The pod does not exist.', array( 'status' => 404 ) );
        }
    
        // Now return the fields array/data.
        $field = isset( $request['field'] ) ? $request['field'] : null;
        return rest_ensure_response( $pod->fields( $field ) );
    }
    
    // Callback for validating a parameter value.
    function prefix_data_arg_validate_callback( $value, WP_REST_Request $request, $param ) {
        if ( 'field' === $param && ! preg_match( '/^[a-z0-9\-_]+$/', $value ) ) {
            return new WP_Error( 'rest_invalid_param', 'Invalid field name.', array( 'status' => 400 ) );
        }
        return true;
    }
    
    // Callback for sanitizing a parameter value.
    function prefix_data_arg_sanitize_callback( $value, WP_REST_Request $request, $param ) {
        if ( 'field' === $param ) {
            return sanitize_text_field( $value );
        }
        return $value; // .. please make your own logic for sanitizing other fields, if any.
    }
    
    // Parameters for the /fields endpoint.
    function prefix_get_data_arguments() {
        $args = array();
    
        $args['field'] = array(
            'description'       => 'Field name.',
            'type'              => 'string',
            'validate_callback' => 'prefix_data_arg_validate_callback',
            'sanitize_callback' => 'prefix_data_arg_sanitize_callback',
        );
    
        return $args;
    }
    
    // Register our routes.
    function prefix_register_routes() {
        register_rest_route( 'my-plugin/v1', '/fields/(?P<pod>[a-z0-9\-_]+)', array(
            'method'   => WP_REST_Server::READABLE,
            'callback' => 'prefix_get_pods_fields',
            'args'     => prefix_get_data_arguments(),
        ) );
    }
    add_action( 'rest_api_init', 'prefix_register_routes' );
    

위 코드의 어떤 부분에 대한 설명이 필요하시면 말씀해주세요.하지만 기본적으로 접두사를 변경하고 싶을 것입니다.prefix_(또는 전체 함수 이름) 및 경로 네임스페이스 (my-plugin/v1좀 더 의미있는 일로..

언급URL : https://stackoverflow.com/questions/44796839/wordpress-pods-io-rest-api-for-fetching-fields-information-for-custom-post-typ

반응형