基于所选类别的其他表单选项不起作用

时间:2012-08-28 作者:webtesa

我有一个条件语句,根据所选的类别显示某些要从中选择的图像(单选按钮),但是当选择类别时,单选按钮不显示?我做错了什么?

    <fieldset class="category"> 
                            <label for="cat">Post Category:</label> 
                            <?php wp_dropdown_categories( \'tab_index=3&taxonomy=category&hide_empty=0\' ); ?> 
                </fieldset>
<?php $categoryId = $_POST[\'cat\']; ?>
    <?php if ($categoryId == \'3\') { ?>
                    <fieldset class="cat1"> 
                        <label for="cat1">Please choose from 1 of the images below for your Post: </label><br>
    <input type="radio" name="hate" value="<?php bloginfo(\'url\'); ?>/wp-content/uploads/2012/08/hate1.jpg" id="hate1" /> <img src="<?php bloginfo(\'url\'); ?>/wp-content/uploads/2012/08/hate1.jpg" alt="" height="167" /><br />
    <input type="radio" name="hate" value="<?php bloginfo(\'url\'); ?>/wp-content/uploads/2012/08/hate2.jpg" id="hate2" /> 
    <img src="<?php bloginfo(\'url\'); ?>/wp-content/uploads/2012/08/hate2.jpg" alt="" height="167" />
                    </fieldset>

    <?php } elseif ($categoryId == \'4\') { ?>
                    <fieldset class="cat2"> 
                        <label for="cat2">Please choose from 1 of the images below for your Post: </label><br>
    <input type="radio" name="love" value="<?php bloginfo(\'url\'); ?>/wp-content/uploads/2012/08/love1.jpg" id="love1" /> <img src="<?php bloginfo(\'url\'); ?>/wp-content/uploads/2012/08/love1.jpg" alt="" height="167" /><br />
    <input type="radio" name="love" value="<?php bloginfo(\'url\'); ?>/wp-content/uploads/2012/08/love2.jpg" id="love2" /> <img src="<?php bloginfo(\'url\'); ?>/wp-content/uploads/2012/08/love2.jpg" alt="" height="167" /> 
                    </fieldset> 

    <?php } else echo \'Damnit!\'; ?>

1 个回复
SO网友:Chip Bennett

要想做你想做的事,你需要使用add_query_arg()get_query_var(), 然后使用查询参数/值修改查询。

我将举一个例子,说明如何在一个自定义主题中创建类似的“过滤器”;您需要稍微修改它以符合表单字段标记,而不是像我一样只使用锚。

首先,需要添加查询参数,如下所示:

<a href="<?php echo add_query_arg( array( \'cat_filter\' => \'some-cat\' ) ); ?>">Some Cat</a>
此链接实际上会重新加载当前页面,其中cat_filter=some-cat 附加到URL查询字符串。

其次,您需要确定是否已设置查询参数:

global $wp_query;
$cat_filter = ( isset( $wp_query->query_vars[\'cat_filter\'] ) ? $wp_query->query_vars[\'cat_filter\'] : false );
(注意:为了数据安全,您需要在此处进行一些清理。)

如果使用自定义查询,请通过WP_Query, 您可以直接在模板中执行此检查,然后将结果添加到自定义查询参数数组中。但是,如果使用的是主循环查询,则需要将其包装在回调中以进行筛选pre_get_posts:

function wpse63374_filter_pre_get_posts( $query ) {
    if ( ! is_main_query() ) {
        return $query;
    } else {
        if ( isset( $query->query_vars[\'cat_filter\'] )  ) {
            // Don\'t forget to add sanitization!
            $query->set( \'category_name\', $query->query_vars[\'cat_filter\'] );
        }
        return $query;
    }
}
add_filter( \'pre_get_posts\', \'wpse63374_filter_pre_get_posts\' );
如果要清除过滤器,可以使用remove_query_arg().

结束

相关推荐

将筛选器添加到wp_Dropdown_Pages()或wp_Dropdown_Categories()-没有选择容器?

我在和wp_dropdown_pages() 和wp_dropdown_categories() 并且两者都始终输出<select>-盒子及其<option>s作为项目。有没有可能在这个函数中添加一个过滤器/挂钩,这样我就可以得到<option>s而不被包裹在<select>我这样问的原因是我想将页面和类别合并到一个下拉列表中。我找不到参数来设置这个!有什么想法吗?