Overview
  • Namespace
  • Class

Namespaces

  • WPGraphQL
    • Data
    • Type
      • Avatar
      • Comment
        • Connection
      • CommentAuthor
      • EditLock
      • Enum
      • MediaItem
        • Mutation
      • Plugin
        • Connection
      • PostObject
        • Connection
        • Mutation
      • PostType
      • Setting
      • Taxonomy
      • TermObject
        • Connection
        • Mutation
      • Theme
        • Connection
      • Union
      • User
        • Connection
        • Mutation
    • Utils

Classes

  • WPGraphQL\AppContext
  • WPGraphQL\Data\Config
  • WPGraphQL\Data\ConnectionResolver
  • WPGraphQL\Data\DataSource
  • WPGraphQL\Data\Loader
  • WPGraphQL\Router
  • WPGraphQL\Type\Avatar\AvatarType
  • WPGraphQL\Type\Comment\CommentQuery
  • WPGraphQL\Type\Comment\CommentType
  • WPGraphQL\Type\Comment\Connection\CommentConnectionArgs
  • WPGraphQL\Type\Comment\Connection\CommentConnectionDefinition
  • WPGraphQL\Type\Comment\Connection\CommentConnectionResolver
  • WPGraphQL\Type\CommentAuthor\CommentAuthorQuery
  • WPGraphQL\Type\CommentAuthor\CommentAuthorType
  • WPGraphQL\Type\EditLock\EditLockType
  • WPGraphQL\Type\Enum\MediaItemStatusEnumType
  • WPGraphQL\Type\Enum\MimeTypeEnumType
  • WPGraphQL\Type\Enum\PostObjectFieldFormatEnumType
  • WPGraphQL\Type\Enum\PostStatusEnumType
  • WPGraphQL\Type\Enum\PostTypeEnumType
  • WPGraphQL\Type\Enum\RelationEnumType
  • WPGraphQL\Type\Enum\TaxonomyEnumType
  • WPGraphQL\Type\MediaItem\MediaItemType
  • WPGraphQL\Type\MediaItem\Mutation\MediaItemCreate
  • WPGraphQL\Type\MediaItem\Mutation\MediaItemDelete
  • WPGraphQL\Type\MediaItem\Mutation\MediaItemMutation
  • WPGraphQL\Type\MediaItem\Mutation\MediaItemUpdate
  • WPGraphQL\Type\Plugin\Connection\PluginConnectionDefinition
  • WPGraphQL\Type\Plugin\Connection\PluginConnectionResolver
  • WPGraphQL\Type\Plugin\PluginQuery
  • WPGraphQL\Type\Plugin\PluginType
  • WPGraphQL\Type\PostObject\Connection\PostObjectConnectionArgs
  • WPGraphQL\Type\PostObject\Connection\PostObjectConnectionArgsDateQuery
  • WPGraphQL\Type\PostObject\Connection\PostObjectConnectionDefinition
  • WPGraphQL\Type\PostObject\Connection\PostObjectConnectionResolver
  • WPGraphQL\Type\PostObject\Mutation\PostObjectCreate
  • WPGraphQL\Type\PostObject\Mutation\PostObjectDelete
  • WPGraphQL\Type\PostObject\Mutation\PostObjectMutation
  • WPGraphQL\Type\PostObject\Mutation\PostObjectUpdate
  • WPGraphQL\Type\PostObject\Mutation\TermObjectDelete
  • WPGraphQL\Type\PostObject\PostObjectQuery
  • WPGraphQL\Type\PostObject\PostObjectType
  • WPGraphQL\Type\PostType\PostTypeType
  • WPGraphQL\Type\RootMutationType
  • WPGraphQL\Type\RootQueryType
  • WPGraphQL\Type\Setting\SettingQuery
  • WPGraphQL\Type\Setting\SettingType
  • WPGraphQL\Type\Taxonomy\TaxonomyType
  • WPGraphQL\Type\TermObject\Connection\TermObjectConnectionArgs
  • WPGraphQL\Type\TermObject\Connection\TermObjectConnectionDefinition
  • WPGraphQL\Type\TermObject\Connection\TermObjectConnectionResolver
  • WPGraphQL\Type\TermObject\Mutation\TermObjectCreate
  • WPGraphQL\Type\TermObject\Mutation\TermObjectMutation
  • WPGraphQL\Type\TermObject\Mutation\TermObjectUpdate
  • WPGraphQL\Type\TermObject\TermObjectQuery
  • WPGraphQL\Type\TermObject\TermObjectType
  • WPGraphQL\Type\Theme\Connection\ThemeConnectionDefinition
  • WPGraphQL\Type\Theme\Connection\ThemeConnectionResolver
  • WPGraphQL\Type\Theme\ThemeType
  • WPGraphQL\Type\Union\CommentAuthorUnionType
  • WPGraphQL\Type\Union\PostObjectUnionType
  • WPGraphQL\Type\Union\TermObjectUnionType
  • WPGraphQL\Type\User\Connection\UserConnectionArgs
  • WPGraphQL\Type\User\Connection\UserConnectionDefinition
  • WPGraphQL\Type\User\Connection\UserConnectionResolver
  • WPGraphQL\Type\User\Mutation\UserCreate
  • WPGraphQL\Type\User\Mutation\UserDelete
  • WPGraphQL\Type\User\Mutation\UserMutation
  • WPGraphQL\Type\User\Mutation\UserUpdate
  • WPGraphQL\Type\User\UserQuery
  • WPGraphQL\Type\User\UserType
  • WPGraphQL\Type\WPEnumType
  • WPGraphQL\Type\WPInputObjectType
  • WPGraphQL\Type\WPObjectType
  • WPGraphQL\Types
  • WPGraphQL\Utils\InstrumentSchema
  • WPGraphQL\WPSchema

Interfaces

  • WPGraphQL\Data\ConnectionResolverInterface
  1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 
<?php

namespace WPGraphQL\Type\TermObject\Mutation;

use GraphQL\Error\UserError;
use GraphQLRelay\Relay;
use WPGraphQL\Types;

class TermObjectMutation {

    /**
     * Holds the input_fields configuration
     *
     * @var array
     */
    private static $input_fields;

    /**
     * @param \WP_Taxonomy $taxonomy
     *
     * @return mixed|null
     */
    public static function input_fields( \WP_Taxonomy $taxonomy ) {

        if ( ! empty( $taxonomy->name ) && empty( self::$input_fields[ $taxonomy->name ] ) ) {

            $input_fields = [
                'name' => [
                    'type'        => Types::string(),
                    // Translators: The placeholder is the name of the taxonomy for the object being mutated
                    'description' => sprintf( __( 'The name of the %1$s object to mutate', 'wp-graphql' ), $taxonomy->name ),
                ],
                'aliasOf'     => [
                    'type'        => Types::string(),
                    // Translators: The placeholder is the name of the taxonomy for the object being mutated
                    'description' => sprintf( __( 'The slug that the %1$s will be an alias of', 'wp-graphql' ), $taxonomy->name ),
                ],
                'description' => [
                    'type'        => Types::string(),
                    // Translators: The placeholder is the name of the taxonomy for the object being mutated
                    'description' => sprintf( __( 'The description of the %1$s object', 'wp-graphql' ), $taxonomy->name ),
                ],
                'slug'        => [
                    'type'        => Types::string(),
                    'description' => __( 'If this argument exists then the slug will be checked to see if it is not an existing valid term. If that check succeeds (it is not a valid term), then it is added and the term id is given. If it fails, then a check is made to whether the taxonomy is hierarchical and the parent argument is not empty. If the second check succeeds, the term will be inserted and the term id will be given. If the slug argument is empty, then it will be calculated from the term name.' ),
                ],
            ];

            /**
             * Add a parentId field to hierarchical taxonomies to allow parents to be set
             */
            if ( true === $taxonomy->hierarchical ) {
                $input_fields['parentId'] = [
                    'type'        => Types::id(),
                    // Translators: The placeholder is the name of the taxonomy for the object being mutated
                    'description' => sprintf( __( 'The ID of the %1$s that should be set as the parent', 'wp-graphql' ), $taxonomy->name ),
                ];
            }

            /**
             * Filter the mutation input fields for the object type
             *
             * @param array        $input_fields The array of input fields
             * @param \WP_Taxonomy The           taxonomy of the Term object being mutated
             */
            self::$input_fields[ $taxonomy->name ] = apply_filters( 'graphql_term_object_mutation_input_fields', $input_fields, $taxonomy );

        } // End if().

        return ! empty( self::$input_fields[ $taxonomy->name ] ) ? self::$input_fields[ $taxonomy->name ] : null;

    }

    /**
     * This prepares the object to be mutated – ensures data is safe to be saved,
     * and mapped from input args to WordPress $args
     *
     * @param array        $input         The input from the GraphQL Request
     * @param \WP_Taxonomy $taxonomy      The Taxonomy object for the type of term being mutated
     * @param string       $mutation_name The name of the mutation (create, update, etc)
     *
     * @throws \Exception
     *
     * @return mixed
     */
    public static function prepare_object( $input, \WP_Taxonomy $taxonomy, $mutation_name ) {

        /**
         * Set the taxonomy for insert
         */
        $insert_args['taxonomy'] = $taxonomy->name;

        /**
         * Prepare the data for inserting the term
         */
        if ( ! empty( $input['aliasOf'] ) ) {
            $insert_args['alias_of'] = $input['aliasOf'];
        }

        if ( ! empty( $input['name'] ) ) {
            $insert_args['name'] = esc_sql( $input['name'] );
        }

        if ( ! empty( $input['description'] ) ) {
            $insert_args['description'] = esc_sql( $input['description'] );
        }

        if ( ! empty( $input['slug'] ) ) {
            $insert_args['slug'] = esc_sql( $input['slug'] );
        }

        /**
         * If the parentId argument was entered, we need to validate that it's actually a legit term that can
         * be set as a parent
         */
        if ( ! empty( $input['parentId'] ) ) {

            /**
             * Convert parent ID to WordPress ID
             */
            $parent_id_parts = ! empty( $input['parentId'] ) ? Relay::fromGlobalId( $input['parentId'] ) : null;

            /**
             * Ensure that the ID passed in is a valid GlobalID
             */
            if ( is_array( $parent_id_parts ) && ! empty( $parent_id_parts['id'] ) ) {

                /**
                 * Get the Term ID from the global ID
                 */
                $parent_id = $parent_id_parts['id'];

                /**
                 * Ensure there's actually a parent term to be associated with
                 */
                $parent_term = get_term( absint( $parent_id ), $taxonomy->name );

                if ( ! $parent_term || is_wp_error( $parent_term ) ) {
                    throw new UserError( __( 'The parent does not exist', 'wp-graphql' ) );
                }

                // Otherwise set the parent as the parent term's ID
                $insert_args['parent'] = $parent_term->term_id;

            } else {
                throw new UserError( __( 'The parent ID is not a valid ID', 'wp-graphql' ) );
            } // End if().
        }

        /**
         * Filter the $insert_args
         *
         * @param array $insert_args The array of input args that will be passed to the functions that insert terms
         * @param array $input The data that was entered as input for the mutation
         * @param \WP_Taxonomy $taxonomy The taxonomy object of the term being mutated
         * @param string $mutation_name The name of the mutation being performed (create, edit, etc)
         */
        $insert_args = apply_filters( 'graphql_term_object_insert_term_args', $insert_args, $input, $taxonomy, $mutation_name );

        /**
         * Return the $args
         */
        return $insert_args;

    }

}
API documentation generated by ApiGen