TransWikia.com

Change WordPress post-state in Admin Area

WordPress Development Asked by Gino on January 16, 2021

Im wondering if it’s possible to add custom post state’s to other pages?
Like Frontpage and Blog

I mean the black text: –Voorpagina (Frontpage)

Post State WordPresss

I have tried this in functions.php.

add_filter('display_post_states', 'wpsites_custom_post_states');

function wpsites_custom_post_states($states) { 
    global $post; 
    if( ('page' == get_post_type($post->ID) ) 
        && ( '/themes/Lef-en-Liefde/woningoverzicht.php' == get_page_templ‌​ate_slug( $post->ID ) ) ) {

            $states[] = __('Custom state'); 

    } 
} 

But then the original post states (frontpage and blog) are gone.

Thanks in advance,

Gino

2 Answers

Here is how WooCommerce does it:

<?php
add_filter( 'display_post_states', 'add_display_post_states', 10, 2 );

/**
 * Add a post display state for special WC pages in the page list table.
 *
 * @param array   $post_states An array of post display states.
 * @param WP_Post $post        The current post object.
 */
function add_display_post_states( $post_states, $post ) {
    if ( wc_get_page_id( 'shop' ) === $post->ID ) {
        $post_states['wc_page_for_shop'] = __( 'Shop Page', 'woocommerce' );
    }

    if ( wc_get_page_id( 'cart' ) === $post->ID ) {
        $post_states['wc_page_for_cart'] = __( 'Cart Page', 'woocommerce' );
    }

    if ( wc_get_page_id( 'checkout' ) === $post->ID ) {
        $post_states['wc_page_for_checkout'] = __( 'Checkout Page', 'woocommerce' );
    }

    if ( wc_get_page_id( 'myaccount' ) === $post->ID ) {
        $post_states['wc_page_for_myaccount'] = __( 'My Account Page', 'woocommerce' );
    }

    if ( wc_get_page_id( 'terms' ) === $post->ID ) {
        $post_states['wc_page_for_terms'] = __( 'Terms and Conditions Page', 'woocommerce' );
    }

    return $post_states;
}

Answered by Roland Soós on January 16, 2021

Your function doesn't return a value, so you are effectively wiping the existing states.

Also, this hook passes you the current post as an object, so you can use that instead of the global $post.

Additionally get_page_templ‌​ate_slug returns a path that is relative to your theme's root, so if your theme directory is called Lef-en-Liefde and the template file placed at the top level of that directory is called woningoverzicht.php, then your condition '/themes/Lef-en-Liefde/woningoverzicht.php' == get_page_templ‌​ate_slug($post->ID) can never be true.

So, correcting/changing for those points, this should work:

add_filter('display_post_states', 'wpse240081_custom_post_states',10,2);

function wpse240081_custom_post_states( $states, $post ) { 
    
    if ( ( 'page' == get_post_type( $post->ID ) ) 
        && ( 'woningoverzicht.php' == get_page_templ‌​ate_slug( $post->ID ) ) ) {

            $states[] = __('Custom state'); 

    } 

    return $states;
} 

Answered by Andy Macaulay-Brook on January 16, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP