> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wp-content.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Initialize a new theme

> wpc theme init

Create a folder named after the theme slug, with a minimal `style.css` carrying the theme headers. On a terminal, anything you leave out is asked for by a short wizard; with `--no-interaction` (`-n`), nothing is asked.

## Usage

```bash theme={null}
wpc theme init [options] [--] [<name> [<slug>]]
```

## Arguments

<ParamField body="name" type="string">
  Name of the theme. Asked for when it is missing; with `--no-interaction`, a missing name fails with exit code `2`.
</ParamField>

<ParamField body="slug" type="string">
  Folder name and slug of the theme. Always normalized to a slug (`my_theme` becomes `my-theme`); when omitted, it is derived from the name.
</ParamField>

## Options

The options allow you to set the information in your theme’s header ([see the WordPress documentation](https://developer.wordpress.org/themes/basics/main-stylesheet-style-css/)).

<ParamField body="--theme-version" type="string" default="1.0.0">
  Version theme header
</ParamField>

<ParamField body="--author" type="string">
  Author theme header
</ParamField>

<ParamField body="--author-uri" type="string">
  Author URI theme header
</ParamField>

<ParamField body="--theme-uri" type="string">
  Theme URI theme header
</ParamField>

<ParamField body="--description" type="string">
  Description theme header
</ParamField>

<ParamField body="--requires-at-least" type="string">
  Requires at least theme header
</ParamField>

<ParamField body="--requires-php" type="string">
  Requires PHP theme header
</ParamField>

<ParamField body="--license" type="string">
  License theme header
</ParamField>

<ParamField body="--license-uri" type="string">
  License URI theme header
</ParamField>

<ParamField body="--text-domain" type="string">
  Text Domain theme header
</ParamField>

<ParamField body="--domain-path" type="string">
  Domain Path theme header
</ParamField>

<ParamField body="--tags" type="string">
  Tags theme header
</ParamField>

## Interactive mode

On a terminal, `wpc theme init` opens a wizard:

1. **Theme name**, unless you passed it.
2. **Headers to edit**: a checklist of the optional headers. The ones that already have a value are ticked: the options you passed, `Version` (`1.0.0`) and the author details known to your organization (`Author`, `Author URI`).
3. One question per ticked header, pre-filled with its current value.

Press <kbd>esc</kbd> at any step to abandon: nothing is written.

<Note>
  The registry refuses to publish a theme without an `Author` header. If your
  organization has no author details, or `wpc` has no API key to look them up,
  pass `--author` yourself.
</Note>

Options passed on the command line are never overwritten by these defaults. With `--no-interaction`, the same defaults fill in the headers you did not pass, without asking.

Outside a terminal (piped input, CI), or with `--output=plain` or `WPC_NO_TUI=1`, the same questions are asked line by line instead, after a `Would you like to define theme additional headers ? [N/y]` confirmation.

## Examples

<Tabs>
  <Tab title="Create a theme without any interaction">
    <CodeGroup>
      ```bash Input theme={null}
      $ cd /Users/me/Wordpress/wp-content/themes/

      $ wpc theme init --author="Acme" --author-uri="https://example.com" --no-interaction "Dummy Theme" dummy
      ┌──────┬─────────────────────────────────────────────┐
      │ path │ /Users/me/Wordpress/wp-content/themes/dummy │
      └──────┴─────────────────────────────────────────────┘
      ```

      ```css Output file: dummy/style.css theme={null}
      /**
       * Theme Name: Dummy Theme
       * Description:
       * Version: 1.0.0
       * Author: Acme
       * Author URI: https://example.com
       * Update URI: https://registry.wp-content.io
       *
       * Generated by WPC-CLI Generator (https://wp-content.io).
       */
      ```

      ```json Output with --output=json theme={null}
      {"path":"/Users/me/Wordpress/wp-content/themes/dummy"}
      ```
    </CodeGroup>
  </Tab>

  <Tab title="Answer the questions line by line">
    <CodeGroup>
      ```bash Input theme={null}
      $ wpc theme init --output=plain
      Theme name: <Dummy Theme>
      Would you like to define theme additional headers ? [N/y] <y>
      Version (1.0.0): <1.0.1>
      Author (Acme): <>
      Author URI (https://example.com): <>
      Theme URI: <>
      Description: <Lorem ipsum dolor sit amet>
      Requires at least: <6.4>
      Requires PHP: <8.2>
      License: <>
      License URI: <>
      Text Domain: <dummy>
      Domain Path: <>
      Tags: <>
      ┌──────┬─────────────────────────────────────────────┐
      │ path │ /Users/me/Wordpress/wp-content/themes/dummy │
      └──────┴─────────────────────────────────────────────┘
      ```

      ```css Output file: dummy/style.css theme={null}
      /**
       * Theme Name: Dummy Theme
       * Description: Lorem ipsum dolor sit amet
       * Version: 1.0.1
       * Author: Acme
       * Author URI: https://example.com
       * Requires at least: 6.4
       * Requires PHP: 8.2
       * Text Domain: dummy
       * Update URI: https://registry.wp-content.io
       *
       * Generated by WPC-CLI Generator (https://wp-content.io).
       */
      ```
    </CodeGroup>
  </Tab>
</Tabs>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.