wp_dropdown_pages(仅显示具有自定义分类法的页面)?

时间:2018-08-10 08:36:42

标签: php wordpress

我只想使用自定义分类法对页面进行回显,但是现在我将所有页面与我自定义帖子类型中的内容一并列出。

<?php                                                       
 $post_type_object = get_post_type_object('property');                     
     if ($post) {
$parent_properties_dropdown_args =  array(
    'post_type'        => 'property',
    'property_status'  => 'condominium-villas-project', // <<-- Here is the (property_status - is the custom taxonomy and condominium-villas-project is the custom taxonomy tag)
    'selected'         => $prop_data->post_parent,
    'name'             => 'parent_id',
    'show_option_none'  => __('Not selected'),
    'echo'             => 0,);                    

                    $parent_properties_dropdown = wp_dropdown_pages($parent_properties_dropdown_args);

if (! empty($parent_properties_dropdown)) {
    ?>
    <div class="form-option parent-field-wrapper">
        <label for=""></label>
        <?php echo $parent_properties_dropdown; ?>
    </div>
    <?php

} }

但是我还是以自定义帖子类型“属性”获取所有页面。我只需要显示分类的“属性”即可。

示例: 现在-> -属性1-'property_status''rent' -物业2-'property_status''sale' -物业3-'property_status''condominium-villas-project'

我只想得到 -物业3-'property_status''condominium-villas-project'

2 个答案:

答案 0 :(得分:0)

您无法使用自定义分类法过滤wp_dropdown_pages()。您可以使用如下所示的常规WordPress查询。

<?php
$the_query = new WP_Query( array(
    'post_type' => 'property',
    'tax_query' => array(
        array (
            'taxonomy' => 'property_status',
            'field' => 'slug',
            'terms' => 'condominium-villas-project',
        )
    ),
) );

if ( $the_query->have_posts() ) :
?>
<div class="form-option parent-field-wrapper">
    <label for=""></label>
    <select name='parent_id' id='parent_id'>
        <option value="">Not selected</option>
<?php
while ( $the_query->have_posts() ) :
    $the_query->the_post();
?>
        <option value="<?php the_ID(); ?>"><?php the_title(); ?></option>
<?php endwhile; ?>
    </select>
</div>
<?php
endif;
wp_reset_postdata();
?>

答案 1 :(得分:0)

使用我认为是您的准确代码(您对$prop_data的使用仍然感到困惑),您可以使用以下代码获取(我认为)< / em>您正在寻找。将代码添加到主题的function.php文件,其所需的.php文件或您可能实现的插件的.php文件之一中:

<?php

class wpse_51782342 {
    static function on_load() {
        add_filter( 'get_pages',  [ __CLASS__, '_get_pages' ], 10, 2 );
    }

    static function _get_pages( $pages, $args ) {
        if ( isset( $args[ 'property_status' ] ) ) {
            $pages = get_posts(array(
                'post_type'       => 'property',
                'posts_per_page'  => -1,
                'property_status' => $args[ 'property_status' ],
                'include'         => wp_list_pluck( $pages, 'ID' ),
            ));
        }
        return $pages;
    }
}
wpse_51782342::on_load();

'get_pages'过滤器挂钩在get_pages()调用的wp_dropdown_pages()的末尾运行。在该挂钩中,代码将查找您传递的名为'property_status'的参数,以确定是否应修改行为。 这是一项重要技术,因为它确保相同的参数将始终返回相同的结果,并且不依赖于诸如当前帖子ID或URL之类的内容。遵循此原则通常会减少您必须在项目中修复的错误的数量。

如果找到参数'property_status'的{​​{1}}数组,代码将使用其值来调用$args以返回已被赋值为get_posts()的帖子列表您传递给property_status的内容。

最后,代码将wp_dropdown_pages()的查询限制为get_posts()所查询的$post->ID中的$pages个。这将导致一个下拉列表仅显示您喜欢的页面。

当然,这里是供我参考的wp_dropdown_pages()中用于测试以上代码的代码,当然,在我输入了属性和属性状态的示例之后。

single.php

希望这有帮助吗?