WordPress Customizer-将设置值传递到另一个控件以实时更新下拉选项

时间:2020-08-24 作者:730wavy

在WordPress customizer脚本中,我试图将值从选择控件传递到显示与所选值关联的分类法的自定义控件(第一个控件)。

$wp_customize->add_control( new Tax_Dropdown_Control( $wp_customize, \'select_tax\', array(
    \'section\'       => \'section_1\',
    \'label\'         => __( \'Select Post Taxonomy\', \'textdomain\' ),
    \'description\'   => __( \'Select a taxonomy based on post type selected.\', \'textdomain\' ),
    \'dropdown_args\' => array(
        \'post_type\' => $wp_customize->get_setting("select_post_type"), // here I need to pass the first setting\'s value
    ),
) ) );

// custom controls related snippet
class Tax_Dropdown_Control extends WP_Customize_Control {
    .....    
    $dropdown_args = wp_parse_args( $this->dropdown_args, array(
        \'post_type\' => \'post\',
    ) );
        
    $dropdown_args[\'echo\'] = false;
                
    $taxonomies = get_object_taxonomies($dropdown_args);
                
    if  ($taxonomies) {
        echo \'<select>\';
        foreach ($taxonomies  as $taxonomy ) {
            echo \'<option>\'. $taxonomy. \'</option>\';
        }
        echo \'</select>\';
    } 
    ....
}
更改select post类型时,需要更新选项live。我不确定active_callback 是否可以使用更新的变量调用函数?

2 个回复
SO网友:giorgos

您可能会使用一些JavaScript来捕获所选选项,然后对REST API 获取相应的帖子并更新第二个字段。

SO网友:cjbj

定制器在客户端执行所有操作,因此检索新的分类列表将涉及对rest api的ajax调用。这是可行的,但相当复杂。一个更简单但更丑陋的解决方案是简单地包含所有下拉列表并切换它们的显示。因此,您可以在一个循环中通过所有可想到的下拉列表:

foreach [ thinkable dropdown ] {
....
if  ($taxonomies) {
    echo \'<select id="\' . $taxonomies . \'">\';
    foreach ($taxonomies  as $taxonomy ) {
        echo \'<option>\'. $taxonomy. \'</option>\';
        }
    echo \'</select>\';
    } 
}
这将导致html 像这样:

<select id="tax1">
 <option>...</option>
 <option>...</option>
</select>
...
<select id="tax5">
 <option>...</option>
 <option>...</option>
</select>
接下来,您可以使用id 在…上select 应用css切换显示。很明显你不想要这个丑陋的html 在您的live站点上,因此您必须使用is_customize_preview 以确保仅在自定义程序处于活动状态时生成。

相关推荐

Dynamic CPT / Taxonomy

我在我的网站上使用了多个CPT/分类法/术语。目前,为了定制和使用好的WP模板,我做了一个taxonomy-$taxonomy.php 每个CPT的文件。但事实上,在我的模板中,只有CPT和分类词是不同的。是否存在使其动态化的解决方案?UPDATED QUESTION我所说的动态是指:只能使用taxonomy.php 模板而不是taxonomy-$taxonomy.php 模板,并具有\'post_type => \'$post_type\' 和\'taxonomy\' => \'$taxon