如何有条件地更改分类元框的标题?

时间:2016-09-07 作者:gillespieza

我正在使用Toolset Types插件创建各种自定义帖子和自定义分类法。

我有两种自定义帖子类型(学校和产品),它们共享一个共同的分类法(学校主题)。然而,在学校编辑页面上,我希望分类法元框的标题显示为“主题愿望列表”,同时在产品编辑页面上保留默认标题。因此,我不能将分类法作为一个整体重命名,因为这会在任何地方改变它。

有什么想法吗?我已经考虑了其他各种答案,包括移除和重新添加代谢箱(例如this answer). 但我担心这可能行不通,因为工具集类型插件会动态生成这些元盒(我想?)。。。

2 个回复
最合适的回答,由SO网友:Dave Romsey 整理而成

有一个名为register_taxonomy_args 在WP v4中。这是一个很大的帮助。此测试和工作示例假定post类型schoolsproductions 已创建。

/**
 * Filter the arguments for registering a taxonomy.
 *
 * @since 4.4.0
 *
 * @param array  $args        Array of arguments for registering a taxonomy.
 * @param string $taxonomy    Taxonomy key.
 * @param array  $object_type Array of names of object types for the taxonomy.
 */
add_filter( \'register_taxonomy_args\', \'wpse238461_taxonomy_school_subjects_title_changer\', 10, 3 );
function wpse238461_taxonomy_school_subjects_title_changer( $args, $taxonomy, $object_type ) {

    // We\'ll need to figure out what kind of post type we\'re looking at, and it\'s too early for other methods.
    if ( ! isset( $_GET[\'post_type\'] ) || ! $_GET[\'post_type\'] ) {
        return $args;
    }
    $post_type = $_GET[\'post_type\'];

    /*
    // Bonus code for anyone trying to do this on regular post or page edit screens,
    // $_GET[\'post_type\'] is not set, so do something like this instead of/in addition to the above check

    // We\'ll need to figure out what kind of post type we\'re looking at, and it\'s too early for other methods.
    if ( ! isset( $_GET[\'post\'] ) || ! $_GET[\'post\'] ) {
        return $args;
    }

    // Get the post type (post or page), bail if we can\'t. 
    $post_type = get_post_type( $_GET[\'post\'] );
    if ( ! $post_type ) {
        return $args;
    }   
    */

    // Make sure we\'re looking at the right taxonomy since this filter runs for all of them.
    if ( \'school_subjects\' !== $taxonomy ) {
        return $args;
    }

    // Check if we\'re viewing the appropriate post type, and modify the label.
    if ( \'schools\' === $post_type ) {
        $args[\'labels\'][\'name\']              = _x( \'Subject Wishlists\', \'taxonomy general name\', \'textdomain\' );

        // Alternate example for when taxonomy is using the label argument instead of the entire labels argument:
        // $args[\'label\'] = \'Subject Wishlist\';
    }

    return $args;
}

// Taxonomy registration code
add_action( \'init\', \'create_taxonomy_school_subjects\' );
function create_taxonomy_school_subjects() {
    register_taxonomy(
        \'school_subjects\',
        array( \'schools\', \'productions\' ),
        array(
            //\'label\' => __( \'School Subjects\' ),
            \'labels\' => array(
                \'name\'              => _x( \'School Subjects\', \'taxonomy general name\', \'textdomain\' ),
                \'singular_name\'     => _x( \'School Subject\', \'taxonomy singular name\', \'textdomain\' ),
                \'search_items\'      => __( \'Search School Subjects\', \'textdomain\' ),
                \'all_items\'         => __( \'All School Subjects\', \'textdomain\' ),
                \'parent_item\'       => __( \'Parent School Subject\', \'textdomain\' ),
                \'parent_item_colon\' => __( \'Parent School Subject:\', \'textdomain\' ),
                \'edit_item\'         => __( \'Edit School Subject\', \'textdomain\' ),
                \'update_item\'       => __( \'Update School Subject\', \'textdomain\' ),
                \'add_new_item\'      => __( \'Add New School Subject\', \'textdomain\' ),
                \'new_item_name\'     => __( \'New School Subject Name\', \'textdomain\' ),
                \'menu_name\'         => __( \'School Subjects\', \'textdomain\' ),
            ),
            \'rewrite\' => array( \'slug\' => \'school_subjects\' ),
            \'hierarchical\' => true,
        )
    );
}
学校-主题愿望列表

School - Subject Wishlists

制作-学校科目

Production - School Subjects

SO网友:Mark Kaplun

应该没有理由在元框中使用插件:(。使用它们意味着你放弃了一部分按照自己的方式定制东西的能力。

尽管如此,可以安全地假设ID不太可能更改,即使它们是动态生成的,所以只需删除并重新添加,或者使用一些JS代码来定位标签,就可以安全了。

但是对我来说,当我听到“这是一样的,除了那微小的差别,所以让我们在那个特定的点上更改标签”时,所有的警钟都会响起。在许多情况下,这只是第一个表明它根本不一样的迹象,而您所要做的只是一条捷径,找到一个更完整的解决方案。在进行任何编码之前,您应该问问自己,为什么您想要混淆管理员,因为当相同的信息在菜单中时,以及当它在表单中时,它们的名称不同?这听起来至少是一个糟糕的用户体验。

相关推荐

如何在WordPress开发中添加带有ACF自定义字段ID的自定义metabox字段

我是wordpress开发的新手,我在我的项目中安装了高级自定义字段插件,并创建了两个文本字段名称&;我还创建了一个插件,可以在帖子中创建一个带有文本框的元框。现在在帖子中,我将获得自定义字段名称(&A);电子邮件和我的自定义元框旁边将出现,但我必须将我的元框附加到名称字段旁边,即在名称字段和电子邮件字段之间。我的metabox代码如下。请任何人帮帮我//Creating the custom meta box function my_notice_meta_box() {