如果另一个字段值为“Female”,WP管理员将显示自定义字段

时间:2015-07-11 作者:Tayssir Ch

我有3个自定义字段:性别、合作伙伴名称和合作伙伴姓氏。

我需要一个js或CSS函数。如果我从中选择“女性”ecpt_gender 选择框,通过CSS更改显示属性显示2个自定义字段display:nonedisplay:block.

1 个回复
最合适的回答,由SO网友:Mayeenul Islam 整理而成

实际上,您的问题在这里是离题的,因为它是特定于javascripts的,而不是特定于WordPress的。但我正在回答这个问题,并让它更以WordPress为中心,以便其他人也能得到帮助。

以下函数将使a排队custom.js 主题文件夹中的文件/js 仅管理面板的子文件夹(将其放入functions.php 主题):

function my_admin_scripts() {
    wp_enqueue_script( \'custom-js\', get_template_directory_uri() .\'/js/custom.js\', array(\'jquery\'), \'\', true );
}
add_action( \'admin_enqueue_scripts\', \'my_admin_scripts\' );
现在在custom.js 文件写下以下代码:

jQuery(document).ready(function($) {

    var field_one = $(\'#field_one\');
    var field_two = $(\'#field_two\');

    //hiding the field first
    field_one.hide();
    field_two.hide();

    //on value change
    $(\'[name="ecpt_gender"]\').on(\'change\', function(){
       //we\'re checking what the value we\'ve got
       if( $(this).val() === \'Female\' ) {
          field_one.show(); //you can use slideDown() instead of show() for some animation
          field_two.show();
       } else {
          field_one.hide();
          field_two.hide();
       }
    });
});
如果只想将脚本加载到特定页面,请使用$current_screen 函数内部全局:

function my_admin_scripts() {
    global $current_screen;
    //var_dump( $current_screen ); //check what you\'ve got using this variable
    if( \'post.php\' === $current_screen || \'post-new.php\' === $current_screen )
         wp_enqueue_script( \'custom-js\', get_template_directory_uri() .\'/js/custom.js\', array(\'jquery\'), \'\', true );
}
add_action( \'admin_enqueue_scripts\', \'my_admin_scripts\' );
始终要注意基于JS的显示/隐藏字段,因为它们在插入数据时很好,但在更新/编辑数据时可能不起作用。因此,应采取以下预防措施:

在metabox字段中使用get_post_meta() 并相应显示字段:

$ecpt_gender_db_val = get_post_meta( $post_id, \'field_name\', true ); //fetching single value

if( $ecpt_gender_db_val && $ecpt_gender_db_val === \'Female\' ) {
    //show the fields associated with \'Female\' value
}
但在我看来,如果只针对新的帖子页面,那么更安全的做法是让JS更具体:

var field_one = $(\'body.post-new-php #field_one\');
这样做将使项目选择只针对添加新页面,而不适用于编辑页面。我正在使用动态<body> 类以指定页面特定项的目标。

结束

相关推荐

JQuery UI可排序不能与Metabox一起使用

我在这方面遇到了很多麻烦-我的ul-li不会去任何地方。我已经看过了这本书的大部分“副本”,但我一辈子都无法让它发挥作用。而且我的代码可能不是最好的,所以请随意评论/回答(只要答案也是实际的答案)更好的做事方式。脚本注册:function add_admin_scripts( $hook ) { global $post; wp_register_script( \'sectioned_page_script\', get_stylesheet_directory_uri