在管理区域中更改WordPress发布状态

时间:2016-09-21 作者:Gino

我想知道是否有可能将自定义帖子状态添加到其他页面?像Frontpage和博客

我指的是黑色文本:——Voorpagina(Frontpage)
Post State WordPresss

我在函数中尝试过这一点。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\'); 

    } 
} 
但是,原来的帖子状态(frontpage和博客)就消失了。

提前感谢,

基诺

3 个回复
SO网友:Andy Macaulay-Brook

函数不返回值,因此实际上是在擦除现有状态。

此外,这个钩子将当前的post作为对象传递给您,因此您可以使用它来代替全局$post。

另外get_page_templ‌​ate_slug 返回相对于主题根的路径,因此如果调用主题目录Lef-en-Liefde 位于该目录顶层的模板文件称为woningoverzicht.php, 那么你的情况\'/themes/Lef-en-Liefde/woningoverzicht.php\' == get_page_templ‌​ate_slug($post->ID) 不可能是真的。

因此,针对这些点进行纠正/更改时,应该可以:

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;
} 

SO网友:Roland Soós

WooCommerce是如何做到这一点的:

<?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;
}

SO网友:WebMat

如果在自定义插件中使用该过滤器,则需要使用函数;get\\u post\\u meta“获取”;因为函数;get\\u page\\u templ‌​ate\\U slug“;尚未加载

示例:

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

function wpse240081_custom_post_states( $states, $post ) {
    
    // if is list page and name template file php...
    if ( ( \'page\' == get_post_type( $post->ID ) ) && ( \'your-template-name.php\' == get_post_meta( $post->ID, \'_wp_page_template\', true ) ) ) {

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

    return $states;
}

相关推荐

WooCommerce:Pre_Get_Posts中的复杂查询

我想在获取产品时添加一个复杂的过滤。我有一些产品,其中一些链接到自定义帖子类型</此自定义帖子类型有一个转发器字段根据cookie的不同,我应该只获取在此转发器字段中具有该值的产品,我知道我可以使用:add_filter( \'pre_get_posts\', \'fwp_archive_per_page\' ); 我知道我可以像这样设置额外的元查询:$query->set( \'meta_query\', array( \'relation\' => \'