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)
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_template_slug( $post->ID ) ) ) {
$states[] = __('Custom state');
}
}
But then the original post states (frontpage and blog) are gone.
Thanks in advance,
Gino
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_template_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_template_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_template_slug( $post->ID ) ) ) {
$states[] = __('Custom state');
}
return $states;
}
Answered by Andy Macaulay-Brook on January 16, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP