选择所有不在WordPress搜索筛选器中工作的内容

时间:2014-05-24 作者:damienoneill2001

我试图在WordPress中创建一个搜索过滤器,以过滤自定义帖子类型中的所有自定义分类。

我已经创建了一个生成下拉列表的函数,这样我就可以将每个选项值作为一个slug输出给我已经在工作的过滤器。我唯一的问题是“全选”选项不起作用。

选择“全部”时,返回的结果没有找到任何内容。过滤器可以是here.

我用来创建函数的代码是:

function adopt_custom_taxonomy_dropdown( $taxonomy, $orderby = \'date\', $order = \'DESC\', $limit = \'-1\', $name, $show_option_all = null, $show_option_none = null ) {
$args = array(
    \'orderby\' => $orderby,
    \'order\' => $order,
    \'number\' => $limit,

);
$terms = get_terms( $taxonomy, $args );
$name = ( $name ) ? $name : $taxonomy;
if ( $terms ) {
    printf( \'<select name="%s" class="postform">\', esc_attr( $name ) );
    if ( $show_option_all ) {
        printf( \'<option value="0">%s</option>\', esc_html( $show_option_all ) );
    }
    if ( $show_option_none ) {
        printf( \'<option value="-1">%s</option>\', esc_html( $show_option_none ) );
    }
    foreach ( $terms as $term ) {
        printf( \'<option value="%s">%s</option>\', esc_attr( $term->slug ), esc_html( $term->name ) );
    }
    print( \'</select>\' );
}
}
这就是结果被拉到。。。

<?php
        if (isset($_GET["farm-type"]) && empty($_GET["location-farms"])){

        $farm_type = $_GET["farm-type"];

        $myquery1[\'tax_query\'] = array(
            array(
                \'taxonomy\' => \'farm-type\',
                \'terms\' => array($farm_type),
                \'field\' => \'slug\',

            ),
        );
        query_posts($myquery1);

        }
        ?>

        <?php
        if (isset($_GET["farm-type"]) && isset($_GET["location-farms"])){

        $farm_type = $_GET["farm-type"];
        $farm_location = $_GET["location-farms"];

        $myquery2[\'tax_query\'] = array(
            array(
                \'taxonomy\' => \'farm-type\',
                \'terms\' => array($farm_type),
                \'field\' => \'slug\',
            ),
            array(
                \'taxonomy\' => \'location-farms\',
                \'terms\' => array($farm_location),
                \'field\' => \'slug\',
            ),
        );
        query_posts($myquery2);

        }
        ?>

1 个回复
SO网友:s_ha_dum

注意事项:

您的表单action 不正确:<form method="get" action="http://www.adoptapet.ie/archive-farm/">. 页面为<form method="get" action="http://www.adoptapet.ie/archive-farms/">adopt_custom_taxonomy_dropdown(). 如前所述,大多数参数都有默认值,并且在调用函数时可以省略,但作为书面参数,五没有默认值,因此实际上不能省略二、三和四。移动$name 在前面--更好的可用性。

adopt_custom_taxonomy_dropdown( $taxonomy, $name, $orderby = \'date\', $order = \'DESC\', $limit = \'-1\', $show_option_all = null, $show_option_none = null )
  • Don\'t use query_posts(), ever. It clobbers the main query and can cause numerous problems.$_GET 没有sanitizing it. $_GET$_POST are not safe.

    isset($_GET["farm-type"]) && isset($_GET["location-farms"])
    
    。。。。永远都是真的。$_GET["farm-type"]$_GET["location-farms"] 当您的表单提交时,即使它们是空的,也总是要设置。您应该使用!empty() 相反

    您可以大量清除此代码:

    if (!empty($_GET["farm-type"])){
      $farm_type = $_GET["farm-type"];
      $myquery[\'tax_query\'][] = 
        array(
          \'taxonomy\' => \'farm-type\',
          \'terms\' => array($farm_type),
          \'field\' => \'slug\',
        );
    }
    
    if (!empty($_GET["location-farms"])){
      $farm_location = $_GET["location-farms"];
      $myquery[\'tax_query\'][] = 
        array(
          \'taxonomy\' => \'location-farms\',
          \'terms\' => array($farm_location),
          \'field\' => \'slug\',
        );
    }
    
    if (!empty($myquery)) {
      $q = new WP_Query($myquery); // instead of wp_query()
      var_dump($q);
    }
    
    你可能想要一个AND 两个组件之间的关系。

    if (!empty($myquery)) {
      if (1 < count($myquery[\'tax_query\'])) {
        $myquery[\'tax_query\'][\'relation\'] = \'AND\';
      }
      $q = new WP_Query($myquery);
      var_dump($q->request); // debug
    }
    
    现在,如果您为“全选”选项传递一个空字符串,而不是一个数字,我相信您应该会得到您想要的结果。

  • 结束

    相关推荐

    PHP Header()提供已发送的标头

    我正在Wordpress中进行结账过程,如果客户单击结账按钮,他就会被重定向到支付提供商。Important to know:<我使用session 在此过程中</我使用PHPheader() 函数将客户发送到此位置My problem:现在,当您单击按钮时,没有重定向,而是出现错误。警告:无法修改标题信息-标题已由/var/www/vhosts/website.com/httpdocs/wp-content/themes/template/header.php:24)发送。com/httpd