Bird
Raised Fist0
Wordpressframework~8 mins

Custom post type arguments in Wordpress - Performance & Optimization

Choose your learning style10 modes available
Performance: Custom post type arguments
MEDIUM IMPACT
This affects page load speed and rendering by controlling how WordPress registers and displays custom content types, impacting query complexity and asset loading.
Registering a custom post type with many unnecessary features enabled
Wordpress
register_post_type('book', array('public' => true, 'has_archive' => true, 'supports' => array('title', 'editor'), 'show_in_rest' => false));
Limiting supported features and disabling REST API reduces queries and asset loading, speeding up rendering.
📈 Performance GainReduces database queries and asset size, improving LCP and overall page speed.
Registering a custom post type with many unnecessary features enabled
Wordpress
register_post_type('book', array('public' => true, 'has_archive' => true, 'supports' => array('title', 'editor', 'thumbnail', 'comments', 'revisions', 'author', 'excerpt', 'custom-fields'), 'show_in_rest' => true));
Enabling many features increases database queries and asset loading, slowing page load and rendering.
📉 Performance CostIncreases query complexity and asset size, blocking rendering longer and increasing LCP.
Performance Comparison
PatternQuery ComplexityAsset LoadRendering ImpactVerdict
Many supports enabledHigh - multiple joins and meta queriesHigh - loads extra scripts/stylesSlower LCP due to heavy queries and assets[X] Bad
Minimal supports and no extra taxonomiesLow - simple queriesLow - fewer scripts/stylesFaster LCP with leaner page load[OK] Good
Rendering Pipeline
Custom post type arguments influence how WordPress queries and prepares content, affecting server response time and the browser's ability to render the page quickly.
→Server Query
→HTML Generation
→Network Transfer
→Browser Rendering
⚠️ BottleneckServer Query stage due to complex or heavy queries from excessive features
Core Web Vital Affected
LCP
This affects page load speed and rendering by controlling how WordPress registers and displays custom content types, impacting query complexity and asset loading.
Optimization Tips
1Limit 'supports' to only needed features to reduce database queries.
2Disable 'show_in_rest' if REST API access is not required to reduce asset loading.
3Avoid registering unnecessary taxonomies to keep queries simple and fast.
Performance Quiz - 3 Questions
Test your performance knowledge
Which custom post type argument setting can increase page load time the most?
AEnabling many supports like comments, revisions, and custom fields
BSetting 'public' to false
CDisabling 'has_archive'
DNot registering the post type
DevTools: Network
How to check: Open DevTools, go to Network tab, reload page, filter by XHR and document requests to see query response times and asset sizes.
What to look for: Look for long server response times or large asset files indicating heavy queries or unnecessary scripts/styles.

Practice

(1/5)
1. Which argument in register_post_type controls whether the custom post type appears in the WordPress admin menu?
easy
A. public
B. menu_position
C. supports
D. rewrite

Solution

  1. Step 1: Understand the role of menu_position

    The menu_position argument sets the location of the custom post type in the WordPress admin menu.
  2. Step 2: Compare with other arguments

    public controls visibility on front-end, supports defines features, rewrite controls URL structure.
  3. Final Answer:

    menu_position -> Option B
  4. Quick Check:

    Admin menu location = menu_position [OK]
Hint: Menu location is set by menu_position argument [OK]
Common Mistakes:
  • Confusing public with menu visibility
  • Thinking supports controls menu
  • Assuming rewrite affects admin menu
2. Which of the following is the correct way to set a custom post type to be publicly queryable in register_post_type arguments?
easy
A. "public_queryable" => true
B. "publiclyqueryable" => true
C. "public_queryable" => "true"
D. "publicly_queryable" => true

Solution

  1. Step 1: Recall the exact argument name

    The correct argument is publicly_queryable with an 'ly' and underscore.
  2. Step 2: Check value type and spelling

    The value must be boolean true, not string, and spelling must be exact.
  3. Final Answer:

    "publicly_queryable" => true -> Option D
  4. Quick Check:

    Correct spelling and boolean value = publicly_queryable true [OK]
Hint: Remember 'publicly_queryable' with 'ly' and boolean true [OK]
Common Mistakes:
  • Misspelling argument name
  • Using string "true" instead of boolean true
  • Omitting underscore
3. Given this code snippet, what will be the value of $args['has_archive'] after registration?
$args = [
  'public' => true,
  'has_archive' => false,
  'rewrite' => ['slug' => 'books']
];
register_post_type('book', $args);
medium
A. true
B. null
C. false
D. array with slug 'books'

Solution

  1. Step 1: Check the has_archive argument value

    It is explicitly set to false in the array.
  2. Step 2: Understand effect of rewrite on has_archive

    The rewrite argument does not override has_archive setting.
  3. Final Answer:

    false -> Option C
  4. Quick Check:

    Explicit has_archive false remains false [OK]
Hint: Explicit has_archive false stays false despite rewrite [OK]
Common Mistakes:
  • Assuming rewrite slug enables archive
  • Confusing has_archive with rewrite
  • Thinking default true overrides false
4. Identify the error in this register_post_type argument array:
$args = [
  'public' => 'yes',
  'supports' => 'title,editor',
  'menu_icon' => 'dashicons-book'
];
register_post_type('book', $args);
medium
A. 'supports' should be an array, not a comma-separated string
B. 'public' should be boolean true, not string 'yes'
C. 'menu_icon' value is invalid, should be a URL
D. No errors, code is correct

Solution

  1. Step 1: Check the supports argument type

    supports must be an array of features, not a string.
  2. Step 2: Verify other arguments

    public accepts boolean or string 'true'/'false', 'yes' is invalid but PHP may coerce; menu_icon accepts dashicons slug.
  3. Final Answer:

    'supports' should be an array, not a comma-separated string -> Option A
  4. Quick Check:

    Supports must be array, not string [OK]
Hint: Supports argument must be an array, not a string [OK]
Common Mistakes:
  • Passing supports as string instead of array
  • Using invalid string for public
  • Thinking menu_icon needs URL
5. You want to create a custom post type 'movie' that is public, supports title and editor, has an archive page at '/films', and appears below Posts in the admin menu. Which $args array is correct?
hard
A. { 'public' => true, 'supports' => ['title', 'editor'], 'has_archive' => true, 'rewrite' => ['slug' => 'films'], 'menu_position' => 5 }
B. { 'public' => true, 'supports' => ['title', 'editor'], 'has_archive' => 'films', 'rewrite' => true, 'menu_position' => 20 }
C. { 'public' => true, 'supports' => 'title,editor', 'has_archive' => true, 'rewrite' => ['slug' => 'movies'], 'menu_position' => 5 }
D. { 'public' => false, 'supports' => ['title', 'editor'], 'has_archive' => true, 'rewrite' => ['slug' => 'films'], 'menu_position' => 5 }

Solution

  1. Step 1: Check public visibility and supports

    { 'public' => true, 'supports' => ['title', 'editor'], 'has_archive' => true, 'rewrite' => ['slug' => 'films'], 'menu_position' => 5 } sets public to true and supports as an array with 'title' and 'editor', which is correct.
  2. Step 2: Verify archive and rewrite slug

    has_archive is true and rewrite slug is 'films' to get archive at '/films'.
  3. Step 3: Confirm menu position

    menu_position 5 places it below Posts in admin menu.
  4. Final Answer:

    Option A matches all requirements correctly -> Option A
  5. Quick Check:

    Public, supports array, archive slug, menu position 5 = { 'public' => true, 'supports' => ['title', 'editor'], 'has_archive' => true, 'rewrite' => ['slug' => 'films'], 'menu_position' => 5 } [OK]
Hint: Use array for supports, boolean for public, correct slug in rewrite [OK]
Common Mistakes:
  • Passing supports as string instead of array
  • Setting public false when it should be true
  • Incorrect has_archive or rewrite values
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard