根据管理中心另一个选择框中的选择,预先填充并禁用选择选项


Pre-populate and disable select option based on choice in another select box in Admin centre

我正在为我正在进行的项目开发一个事件管理插件,我遇到了一个我真的不知道从哪里开始的问题!

基本上,我有两个选项选择下拉元字段,其中一个查找Events的CPT,并使用以下代码用该类型的帖子填充列表;

<select name="photo_event" id="photo_event"/>
        <option value="none">--- Select Event ---</option>
        <?php
            global $post;
            $args = array( 'post_type' => 'event' );
            $posts = get_posts( $args );
            foreach($posts as $post) : setup_postdata($post); ?>
            <option value="<?php echo $post->ID; ?>"> <?php the_title(); ?> </option>
            <?php endforeach; ?>
        </select>

另一个查找场馆类别,并使用以下内容用子类别(实际场馆)填充列表;

<select name="photo_venue" id="photo_venue"/>
        <option value="none">--- Select Venue ---</option>
        <?php 
            $params = array(
            'type'           => 'post', 
            'child_of'   => 3,
            'hide_empty'     => 0
            );
            $categories=  get_categories($params); 
            foreach ($categories as $category) {
            $option = '<option value="'.$category->category_nicename.'">';
            $option .= $category->cat_name;
            $option .= '</option>';
            echo $option; }
        ?>  
        </select>

这些元字段所附加的CPT是发布与eventvenue相关的实体(如照片、宣传材料、录制的混音等)。

现在,问题是:用户可能希望将实体附加到一个场所,在这种情况下,他们不会选择事件,而是将其保留在默认的"---选择事件--",该字段在字段photo_event中返回值none。这个,很好。

然而,由于每个活动只在一个场地举行,如果用户从活动帖子列表中选择一个活动,我想这样做,Venue选项选择框将默认为该活动的举办地点(通过查找该活动的帖子信息,并从event_venue中为该特定帖子保存的值中选择适当的地点)(event_venue的元字段也查找与photo_venue相同的类别和子类别,以便全面保持连续性[这样venue的筛选就不会出现错误]),并删除所有其他选项(这样用户就不能选择与活动举行地点不同的地点),或者完全禁用该框,在保存之前只在photo_venue中填充正确的地点。

如何解决这个问题?

这被称为链式选择,您需要Ajax和jQuery才能使其工作。

使用jQuery,您将"监听"照片事件下拉列表中的更改。每次更改都会分派一个Ajax调用,该调用为Photo Venue执行PHP get_categories命令,响应由jQuery处理,为Venue呈现一个新的下拉列表。

我建议制作一个新的插件来让这部分工作,并在它完成后将其与主插件合并。以这个答案为起点。

您可以在WordPress Answers上找到此搜索查询中的其他资源。