【问题标题】:Wordpress admin filter by meta, filter options disappear after searchWordpress 管理员按元过滤,搜索后过滤选项消失
【发布时间】:2017-01-11 18:34:06
【问题描述】:

我编写这些函数是为了根据元数据过滤帖子。上下文是一个房地产网站,其属性是 CPT。在这些功能中,我通过销售它们的代理在管理端过滤属性。该功能适用​​于任何新尝试。如果选择了代理,过滤器将仅显示该代理出售的房产。

在初始过滤后,我遇到的问题仍然存在。代理列表就消失了。我感觉我为创建列表而运行的循环由于某种原因而被停止。

为了直观地说明,这里是过滤器列表在搜索之前的样子。

这是使用过滤器后的样子

显然,如果 ADMIN_FILTER_FIELD_VALUE=(id number here) 出现在带有任何设置值的 url 中,则循环不会运行。

这是所有这些的代码。

add_filter( 'parse_query', 'agents_posts_filter' );
function agents_posts_filter( $query ){
    global $pagenow;
    $type = 'post';
    if (isset($_GET['post_type'])) {
        $type = $_GET['post_type'];
    }
    if ( 'properties' == $type && is_admin() && $pagenow=='edit.php' && isset($_GET['ADMIN_FILTER_FIELD_VALUE']) && $_GET['ADMIN_FILTER_FIELD_VALUE'] != '') {
        $query->query_vars['meta_key'] = 'select-agent-value';
        $query->query_vars['meta_value'] = $_GET['ADMIN_FILTER_FIELD_VALUE'];
    }
}

add_action('restrict_manage_posts', 'filter_post_type_by_agent');
function filter_post_type_by_agent(){
    global $pagenow;
    $type = 'post';
    if (isset($_GET['post_type'])) {
        $type = $_GET['post_type'];
    }

    if ('properties' == $type && is_admin() && $pagenow=='edit.php') {
        ?>
        <select name="ADMIN_FILTER_FIELD_VALUE">
        <option value=""><?php _e('Filter By Agent'); ?></option>
        <?php
            $args = array(
                'post_type' => 'agents',
                'posts_per_page' => -1                      
            );

            $posts = new WP_Query($args);

            if( $posts->have_posts() ): while( $posts->have_posts() ) : $posts->the_post(); ?>

                <option value="<?php the_ID(); ?>"> <?php the_title(); ?> </option>

            <?php

            endwhile; 

            endif; 
        ?>
        </select>
        <?php
    }
}

我在这里有什么明显的遗漏吗?感谢任何人都可以提供的任何帮助。

【问题讨论】:

    标签: php wordpress filtering admin custom-fields


    【解决方案1】:

    我认为 query_vars(元键和元值)也添加到下面的查询 WP_Query 帖子类型代理中。 (转储 $posts 以检查 meta_query) 尝试用 get_posts 替换 WP_Query。 也许有帮助! ^^

    编辑:

    上面的查询也添加到下面的查询中。所以我尝试在下面修复它。

    add_action( 'pre_get_posts', 'agents_posts_filter' );
    function agents_posts_filter( $query ){
        global $pagenow;
        $type = 'post';
        if (isset($_GET['post_type'])) {
            $type = $_GET['post_type'];
        }
        if ( 'post' == $type && is_admin() && $pagenow=='edit.php' && isset($_GET['abc']) && $_GET['abc'] != '' && $query->is_main_query()) {
            $query->set('meta_key', 'select-agent-value');
            $query->set('meta_value', $_GET['abc']);
        }
    }
    

    【讨论】:

    • 玩弄这个解决方案。如果我让它工作,我会告诉你的:O
    • 使用 get_posts 从完全不同的自定义帖子类型而不是代理 cpt 运行同一帖子的循环:/
    • 感谢您的帮助! :D 添加 is_main_query() 是为了防止列表不发布。我永远不会猜到问题出在 agent_posts_filter 函数上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多