【问题标题】:Filter with Advanced Custom Field in WordPress在 WordPress 中使用高级自定义字段进行过滤
【发布时间】:2018-01-21 06:08:34
【问题描述】:

我正在尝试根据我的 WordPress 网站中的高级自定义字段设置过滤器。基本上,我名为“ispremium”的高级自定义字段有两个值,即“是”和“否”,在下拉过滤器中,我将两个选项设置为“仅限高级”和“所有程序”。

I need to do when 'Premium Only' dropdown option is selected it will list all the post having value 'ispremium'='yes' and when all program is selected it will list both 'ispremium=yes' and 'ispremium= '不'。我有以下代码,但它总是列出带有“ispremium=yes”的帖子。我的代码有什么问题?

<select name="order" onchange="this.form.submit();">
    <?php
        $order_options = array(
            'yes' => 'Premium Only',
            'no' => 'All Programs',
        );

        $result = query_posts( array(
        'post_type' => 'post',
        'meta_query' => array(
        array(
        'key' => 'ispremium',
        'value' => 'yes',          
        ),
        ) ) );

        $result = query_posts( array(
        'post_type' => 'post',
        'meta_query' => array(
        array(
        'key' => 'ispremium',
        'value' => 'yes','no'          
        ),
        ) ) );


        foreach( $order_options as $result => $label ) {
            echo "<option ".selected( $_GET['value'], $value )." value='$value'>$label</option>";
        }
    ?>
</select>

【问题讨论】:

    标签: wordpress filter advanced-custom-fields


    【解决方案1】:

    首先,尝试使用WP_Query 而不是query_posts()。您还有一些语法错误,例如'value' =&gt; 'yes','no'

    仅限高级版:

    $args = array(
        'post_type'     => 'post',
        'meta_query'    => array(
            array(
                'key'       => 'ispremium',
                'value'     => 'yes',
                'compare'   => '='
            )
        )
    );
    
    $the_query = new WP_Query( $args );
    

    所有程序

    $args = array(
        'post_type'     => 'post',
        'meta_query'    => array(
            'relation'      => 'OR',
            array(
                'key'       => 'ispremium',
                'value'     => 'yes',
                'compare'   => '='
            ),
            array(
                'key'       => 'ispremium',
                'value'     => 'no',
                'compare'   => '='
            )
        )
    );
    
    $the_query = new WP_Query( $args );
    

    查看ACF documentation 了解更多信息。另外,我建议您使用 Ajax 执行此操作,因为如果您将此代码放在您的 select 元素中,可用选项将来自最后一次查询,并且不会在字段更改时动态变化。

    但我并不完全明白你想要做什么;您可能希望在另一个下拉列表中显示可用程序,或者您可以简单地重定向到另一个存档页面,该页面根据所选选项列出相应的程序。

    【讨论】:

    • 嗨,感谢您的帮助。实际上我只是想在同一页面中更新程序列表。您是否知道如何在过滤后始终将粘性和高级帖子保持在顶部
    • 在这种情况下,您需要隔离查询。这意味着您使用上述示例创建的查询将更新&lt;div class="dynamic-posts"&gt;&lt;/div&gt; 中的帖子(例如),而&lt;div class="sticky-posts"&gt;&lt;/div&gt; 的帖子将作为premium only 查询。如果您不使用 Ajax,则需要查询变量来获取查询 $args 中的值。
    猜你喜欢
    • 2018-09-02
    • 2016-06-30
    • 2016-12-18
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2018-08-12
    • 2017-08-28
    相关资源
    最近更新 更多