web-dev-qa-db-de.com

Nicht gesetzte Daten in WordPress-API für benutzerdefinierten Beitragstyp (wp-json)

Ich kann den von der WordPress-API zurückgegebenen json bereits deaktivieren (aus normalen Posts entfernen). Ich verwende aus diesem Beispiel tatsächlich Folgendes: https://css-tricks.com/using-the-wp-api-to-fetch-posts/

Ich habe Probleme damit und kann nicht herausfinden, wie ich dies ändern kann, damit die Daten aus einem benutzerdefinierten Beitragstyp gelöscht werden.

Gedanken?

function qod_remove_extra_data( $data, $post, $context ) {
  // We only want to modify the 'view' context, for reading posts
  if ( $context !== 'view' || is_wp_error( $data ) ) {
    return $data;
  }

  // Here, we unset any data we don't want to see on the front end:
  unset( $data['author'] );
  unset( $data['status'] );
  unset( $data['featured_image'] );
  //etc etc

  return $data;
}

add_filter( 'json_prepare_post', 'qod_remove_extra_data', 12, 3 );

neues Beispiel mit benutzerdefiniertem Beitragstyp **

function projectPost_remove_extra_data( $data, $post, $context ) {

  // We only want to modify the 'view' context, for reading posts
  if ( $context !== 'view' || is_wp_error( $data ) ) {
    return $data;
  }

  // Here, we unset any data we don't want to see on the front end:
  unset( $data['author'] );
  unset( $data['status'] );



  return $data;
}

add_filter( 'json_prepare_project', 'projectPost_remove_extra_data', 12, 3 );
2
RMH

Wenn möglich, sind nur die im Internet gezeigten Beispiele:

qod_remove_extra_data function ($ data, $ post, $ context) {
    // We only want to modify the 'view' context, for reading posts 
    if ($ context! == 'view' || is_wp_error ($ data)) {
        return $ data; 
    } 
    // Here, we unset any data we do not want to see on the front end: 
    unset ($data ['author']); 
    unset ($data ['status']); 
    // Continue unsetting whatever other fields you want return $ data;
}
add_filter ('json_prepare_post' 'qod remove extra_data', 12, 3);

und richtig ist:

qod_remove_extra_data function ($ data, $ post, $ context) {
    // We only want to modify the 'view' context, for reading posts 
    if ($ context! == 'view' || is_wp_error ($ data)) {
         unset ( $data->data ['excerpt']); //Example
         unset ($data->data ['content']); //Example
         unset ($data->data ['name field to remove']) 
         //or 
         unset ($data->data ['name field to remove'] ['name subfield if you only want to delete the sub-field of field' ]) 
         return $data; 
     }
}
add_filter ('rest_prepare_post', 'qod_remove_extra_data', 12, 3);

WICHTIG: Ist:

add_filter ('**rest_prepare_post**', 'qod_remove_extra_data', 12, 3);

Nicht:

add_filter ('**json_prepare_post**' 'qod remove extra_data', 12, 3); //WRONG (No underscores)

Wenn es sich um einen benutzerdefinierten Beitragstyp handelt:

add_filter ('**rest_prepare_{$post_type}**', 'qod_remove_extra_data', 12, 3);

BEISPIEL: Name Posttyp = Produkt;

 add_filter ('**rest_prepare_product**', 'qod_remove_extra_data', 12, 3);

Mit diesem Code können Sie die Felder entfernen, die Sie für den JSON benötigen. Indem Sie rest_prepare} _ {$ post_type verwenden, entscheiden Sie, dass Sie alle Felder für post_type entfernt haben, sodass nur der gewünschte post_type und nicht alle Felder betroffen sind.

Schauen Sie sich den wp-api-Code für Seiten an (die benutzerdefinierte Beitragstypen sind).

Sie können den Code ändern und die Seiten so ändern, wie es für Ihren Beitragstyp gilt (achten Sie beim Suchen und Ersetzen aller "Seiten" darauf, da einige davon WordPress-Funktionsaufrufe oder -Filter sind).

<?php
/**
 * Page post type handlers
 *
 * @package WordPress
 * @subpackage JSON API
 */

/**
 * Page post type handlers
 *
 * This class serves as a small addition on top of the basic post handlers to
 * add small functionality on top of the existing API.
 *
 * In addition, this class serves as a sample implementation of building on top
 * of the existing APIs for custom post types.
 *
 * @package WordPress
 * @subpackage JSON API
 */
class WP_JSON_Pages extends WP_JSON_CustomPostType {
    /**
     * Base route
     *
     * @var string
     */
    protected $base = '/pages';

    /**
     * Post type
     *
     * @var string
     */
    protected $type = 'page';

    /**
     * Register the page-related routes
     *
     * @param array $routes Existing routes
     * @return array Modified routes
     */
    public function register_routes( $routes ) {
        $routes = parent::register_routes( $routes );
        $routes = parent::register_revision_routes( $routes );
        $routes = parent::register_comment_routes( $routes );

        // Add post-by-path routes
        $routes[ $this->base . '/(?P<path>.+)'] = array(
            array( array( $this, 'get_post_by_path' ),    WP_JSON_Server::READABLE ),
            array( array( $this, 'edit_post_by_path' ),   WP_JSON_Server::EDITABLE | WP_JSON_Server::ACCEPT_JSON ),
            array( array( $this, 'delete_post_by_path' ), WP_JSON_Server::DELETABLE ),
        );

        return $routes;
    }

    /**
     * Retrieve a page by path name
     *
     * @param string $path
     * @param string $context
     *
     * @return array|WP_Error
     */
    public function get_post_by_path( $path, $context = 'view' ) {
        $post = get_page_by_path( $path, ARRAY_A );

        if ( empty( $post ) ) {
            return new WP_Error( 'json_post_invalid_id', __( 'Invalid post ID.' ), array( 'status' => 404 ) );
        }

        return $this->get_post( $post['ID'], $context );
    }

    /**
     * Edit a page by path name
     *
     * @param $path
     * @param $data
     * @param array $_headers
     *
     * @return true|WP_Error
     */
    public function edit_post_by_path( $path, $data, $_headers = array() ) {
        $post = get_page_by_path( $path, ARRAY_A );

        if ( empty( $post ) ) {
            return new WP_Error( 'json_post_invalid_id', __( 'Invalid post ID.' ), array( 'status' => 404 ) );
        }

        return $this->edit_post( $post['ID'], $data, $_headers );
    }

    /**
     * Delete a page by path name
     *
     * @param $path
     * @param bool $force
     *
     * @return true|WP_Error
     */
    public function delete_post_by_path( $path, $force = false ) {
        $post = get_page_by_path( $path, ARRAY_A );

        if ( empty( $post ) ) {
            return new WP_Error( 'json_post_invalid_id', __( 'Invalid post ID.' ), array( 'status' => 404 ) );
        }

        return $this->delete_post( $post['ID'], $force );
    }

    /**
     * Prepare post data
     *
     * @param array $post The unprepared post data
     * @param string $context The context for the prepared post. (view|view-revision|edit|embed|single-parent)
     * @return array The prepared post data
     */
    protected function prepare_post( $post, $context = 'view' ) {
        $_post = parent::prepare_post( $post, $context );

        // Override entity meta keys with the correct links
        $_post['meta']['links']['self'] = json_url( $this->base . '/' . get_page_uri( $post['ID'] ) );

        if ( ! empty( $post['post_parent'] ) ) {
            $_post['meta']['links']['up'] = json_url( $this->base . '/' . get_page_uri( (int) $post['post_parent'] ) );
        }

        return apply_filters( 'json_prepare_page', $_post, $post, $context );
    }
}

Geben Sie Ihren benutzerdefinierten Code in "Bearbeiten" oder "Filtern" usw. ein und los geht's!

ps - vergiss nicht, es in ein richtiges Plugin zu verwandeln! Sie können es als neues Plugin hinzufügen und auf diese Weise besser verwalten:

<?php
/**
 * Plugin Name: My JSON App API
 * Description: My Route and Endpoint handler for the JSON API
 * Dependency:  This plugin requires JSON BasicKey Authentication Plugin!!!! 
 * Author: Blah Blah Blah, plus much original code from the WordPress API Team
 * Author URI: https://www.example.com
 * Version: 1.2
 * Plugin URI: https://www.example.com
 */

if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
if (!defined("MY_JSON_API_VERSION")) {
    define ("MY_JSON_API_VERSION",  "1.2") ;
}

function my_json_api_init() {
    global $my_json_api_mobile_users;
    $my_json_api_mobile_users = new my_JSON_API_MobileUsers();
    add_filter( 'json_endpoints', array( $my_json_api_mobile_users, 'register_routes' ) );
}
add_action( 'wp_json_server_before_serve', 'my_json_api_init' );
0
brianlmerritt