存档筛选器是否在没有结果时消失?

时间:2015-01-30 作者:Kyuuji

我一直在研究这个示例:http://www.advancedcustomfields.com/resources/creating-wp-archive-custom-field-filter/

我的一位同事发现,它为Wordpress自定义帖子创建了一个简单的基于复选框的过滤器,该过滤器按自定义帖子类型进行过滤。

我已经做好了所有的准备,它似乎在这里工作-,如果你按“地点”过滤,那么“所有地点”的帖子就会像你预期的那样被删除。

但是,如果您选择了一个不存在的选项,则刷新时过滤器会消失,我不知道为什么。我的同事在另一个没有这个问题的网站上使用了这个代码,所以我很困惑。我尝试过重新排序模板中的元素,以防有什么东西影响它,但似乎什么都没有改变。

存档作业中的代码。php:

  <div class="filterOptions">

    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nisl odio, efficitur non lorem ut, volutpat egestas tellus. Vestibulum suscipit sem mi, nec mattis tortor convallis in. Integer in blandit turpis, consectetur tincidunt dolor.</p>

      <div id="search-location">
          <?php

          $field = get_field_object(\'location_choice\');
          $values = explode(\',\', $_GET[\'location_choice\']);

          ?>
          <ul>
              <?php foreach( $field[\'choices\'] as $choice_value => $choice_label ): ?>
                  <li>
                      <input type="checkbox" value="<?php echo $choice_value; ?>" <?php if( in_array($choice_value, $values) ): ?>checked="checked"<?php endif; ?> /> <?php echo $choice_label; ?></li>
                  </li>
              <?php endforeach; ?>
          </ul>
      </div>
      <script type="text/javascript">
      (function($) {

          $(\'#search-location\').on(\'change\', \'input[type="checkbox"]\', function(){

              // vars
              var $ul = $(this).closest(\'ul\'),
                  vals = [];

              $ul.find(\'input:checked\').each(function(){

                  vals.push( $(this).val() );

              });

              vals = vals.join(",");

              window.location.replace(\'<?php echo home_url(\'jobs\'); ?>?location_choice=\' + vals);

              console.log( vals );

          });

      })(jQuery);
      </script>
  </div>
来自函数的代码。php:

        add_action(\'pre_get_posts\', \'my_pre_get_posts\');

    function my_pre_get_posts( $query )
    {
        // validate
        if( is_admin() )
        {
            return;
        }

        if( !$query->is_main_query() )
        {
            return;
        }

        // get original meta query
        $meta_query = $query->get(\'meta_query\');

            // allow the url to alter the query
            // eg: http://www.website.com/events?location=melbourne
            // eg: http://www.website.com/events?location=sydney
            if( !empty($_GET[\'location_choice\']) )
            {
                $location_choice = explode(\',\', $_GET[\'location_choice\']);

                //Add our meta query to the original meta queries
                $meta_query[] = array(
                    \'key\'       => \'location_choice\',
                    \'value\'     => $location_choice,
                    \'compare\'   => \'IN\',
                );
            }

        // update the meta query args
        $query->set(\'meta_query\', $meta_query);

        // always return
        return;

    }
任何帮助都将不胜感激!

1 个回复
最合适的回答,由SO网友:Milo 整理而成

如果没有帖子,则没有帖子IDget_field_object 操作。如果你read the docs for that function, 您将看到:

$post_id 输入值的特定职位ID。默认为当前职位ID(不需要)。也可以是选项/分类法/用户等

结束

相关推荐

Filters on Login Page

我正在尝试使用修改登录页built in filters. add\\u操作按预期工作,但我无法使筛选器工作。这是我函数中的代码。php:add_filter( \'login_form_top\', \'filter_top_login\' ); function filter_top_login( $content ) { return \'This is what I want it to say!\'; } 但当我加载wp登录时,它似乎没有做任何

存档筛选器是否在没有结果时消失? - 小码农CODE - 行之有效找到问题解决它

存档筛选器是否在没有结果时消失?

时间:2015-01-30 作者:Kyuuji

我一直在研究这个示例:http://www.advancedcustomfields.com/resources/creating-wp-archive-custom-field-filter/

我的一位同事发现,它为Wordpress自定义帖子创建了一个简单的基于复选框的过滤器,该过滤器按自定义帖子类型进行过滤。

我已经做好了所有的准备,它似乎在这里工作-,如果你按“地点”过滤,那么“所有地点”的帖子就会像你预期的那样被删除。

但是,如果您选择了一个不存在的选项,则刷新时过滤器会消失,我不知道为什么。我的同事在另一个没有这个问题的网站上使用了这个代码,所以我很困惑。我尝试过重新排序模板中的元素,以防有什么东西影响它,但似乎什么都没有改变。

存档作业中的代码。php:

  <div class="filterOptions">

    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nisl odio, efficitur non lorem ut, volutpat egestas tellus. Vestibulum suscipit sem mi, nec mattis tortor convallis in. Integer in blandit turpis, consectetur tincidunt dolor.</p>

      <div id="search-location">
          <?php

          $field = get_field_object(\'location_choice\');
          $values = explode(\',\', $_GET[\'location_choice\']);

          ?>
          <ul>
              <?php foreach( $field[\'choices\'] as $choice_value => $choice_label ): ?>
                  <li>
                      <input type="checkbox" value="<?php echo $choice_value; ?>" <?php if( in_array($choice_value, $values) ): ?>checked="checked"<?php endif; ?> /> <?php echo $choice_label; ?></li>
                  </li>
              <?php endforeach; ?>
          </ul>
      </div>
      <script type="text/javascript">
      (function($) {

          $(\'#search-location\').on(\'change\', \'input[type="checkbox"]\', function(){

              // vars
              var $ul = $(this).closest(\'ul\'),
                  vals = [];

              $ul.find(\'input:checked\').each(function(){

                  vals.push( $(this).val() );

              });

              vals = vals.join(",");

              window.location.replace(\'<?php echo home_url(\'jobs\'); ?>?location_choice=\' + vals);

              console.log( vals );

          });

      })(jQuery);
      </script>
  </div>
来自函数的代码。php:

        add_action(\'pre_get_posts\', \'my_pre_get_posts\');

    function my_pre_get_posts( $query )
    {
        // validate
        if( is_admin() )
        {
            return;
        }

        if( !$query->is_main_query() )
        {
            return;
        }

        // get original meta query
        $meta_query = $query->get(\'meta_query\');

            // allow the url to alter the query
            // eg: http://www.website.com/events?location=melbourne
            // eg: http://www.website.com/events?location=sydney
            if( !empty($_GET[\'location_choice\']) )
            {
                $location_choice = explode(\',\', $_GET[\'location_choice\']);

                //Add our meta query to the original meta queries
                $meta_query[] = array(
                    \'key\'       => \'location_choice\',
                    \'value\'     => $location_choice,
                    \'compare\'   => \'IN\',
                );
            }

        // update the meta query args
        $query->set(\'meta_query\', $meta_query);

        // always return
        return;

    }
任何帮助都将不胜感激!

1 个回复
最合适的回答,由SO网友:Milo 整理而成

如果没有帖子,则没有帖子IDget_field_object 操作。如果你read the docs for that function, 您将看到:

$post_id 输入值的特定职位ID。默认为当前职位ID(不需要)。也可以是选项/分类法/用户等