【问题标题】:Query posts by category AND meta value按类别和元值查询帖子
【发布时间】:2014-09-22 19:08:13
【问题描述】:

好的,我正在努力解决这个问题。我的问题归结为按元值和类别查询帖子,我似乎无法让它输出任何内容。

我已经完成了WP_Query(); 路由,并转储了我的变量,并且表单返回了这些变量中应该返回的所有内容,但它没有从数据库中提取任何帖子。我没有得到任何结果。代码如下。

<h1>Product Selector</h1>
        <?php 
        if ( !$_POST['submit'] ) : ?>
            <form method="post">
                <br><strong>Category:</strong><br>
                <?php wp_dropdown_categories(array(
                    'show_option_all' => 'Please Choose',
                )); ?>
                <br><br><strong>Adhesion:</strong><br>
                    <select id="adhesion" name="adhesion">
                        <option></option>
                    </select>
                <!--<br><br><strong>Substrate:</strong><br>
                    <select id="substrate" name="substrate">
                        <option></option>
                    </select>-->
                <br><br>

                    <input type="submit" name="submit" value="submit">
            </form>
        <?php 
        else : 
            $ca = $_POST['cat'];
            $ad =  array( 'key' => 'adhesion_box', 'value' => $_POST['adhesion'] );
            $su = array( 'key' => 'substrate_box', 'value' => $_POST['substrate'] );

            $args = array(
                'post_type' => 'post',
                'meta_query' => array($ad),
                'cat' => $ca,
            );

            var_dump($args);

        $myQuery = new WP_Query( $args ); ?>

            <?php 
            if ( $myQuery->have_posts() ) :
                echo "<ul>";
                while ($myQuery->have_posts()) : 
                $myQuery->the_post(); ?>
                    <li><a href="<?php the_permalink(); ?>">
                        <?php the_title(); ?></a>
                    </li>
                <?php endwhile;
                echo "</ul>";

            else : ?>
                <h3>Sorry, no products matched the details you entered.</h3>
                <form method="post">
                    <br><br><strong>Category:</strong><br>
                    <?php wp_dropdown_categories(array(
                        'show_option_all' => 'Please Choose',
                    )); ?>
                <br><br><strong>Adhesion:</strong><br>
                    <select id="adhesion" name="adhesion">
                        <option></option>
                    </select>
                <!--<br><br><strong>Substrate:</strong><br>
                    <select id="substrate" name="substrate">
                        <option></option>
                    </select>
                <br><br>-->


                    <br><br>
                        <input type="submit" name="submit" value="submit">
                </form>
            <?php 
            endif;

        endif; ?>

不,它不需要类别模板或类似的东西,因为我没有在循环中包含该调用,并且 WordPress 仅在您这样做时才调用模板文件。击掌。

我在像这样的其他页面上使用自定义循环,但出于某种原因,这个只是没有返回任何帖子,我无法弄清楚。

进入产品,找到一个特定的产品,任何你想要的,然后在表格中输入它的规格(这样你就知道你有一个应该返回的特定产品),然后看着......什么都没有发生...... ..

我的查询有什么问题?我想不通。

相关链接

http://carotape.bigwolfdesigns.com/product-selector/

【问题讨论】:

  • 你如何在服务器端访问这些值?尝试打印 $_REQUEST 并检查
  • @Remy Sheppard 你能告诉粘附是序列化对象还是整数?您是否可以发布一些具有结构的示例数据
  • 这个问题具有误导性,因为 OP 正在寻找从数据库中检索 meta_value 的查询,而他正在向社区询问其他内容:current query isn't returning any result

标签: javascript php jquery wordpress forms


【解决方案1】:

您的表单发布正确,这是 POST 数据:

我的猜测是在 PHP 端引起了问题。

您能否发布有关如何处理 POST 数据的代码?

编辑:

我想我看到了问题,您设置了两次数组。你为 $ad 实例化了一个数组,然后在 $args 中你又做了一次。

这应该可行:

        $args = array(
        'post_type' => 'post',
        'meta_query' => array($ad),
        'cat' => $ca,
        );

更多关于多维数组:

http://php.net/manual/en/language.types.array.php

此外,您需要考虑 WP_Query 如何处理您的参数。 $ad 是一个数组,我不确定它会如何处理(在 WP 中没有经验)。函数返回 null 可能是因为您将数组传递给它并且它确实需要一个字符串。

我将首先打开调试和 var_dump $args,如果检查成功,请检查查询的返回状态。

【讨论】:

    【解决方案2】:

    试试下面的代码。您正在使用 $ad 作为字符串和数组,因此它将被分配为字符串“Array”并且将搜索该键

       $args = array(
           'post_type' => 'post',
           'meta_query' => array($ad),
           'cat' => $ca,
       );
    

    【讨论】:

    • 它说没有产品符合我的描述,当我知道至少有一种产品符合我的描述时。
    • 这不是答案。我已更新以包含页面的整个代码。
    【解决方案3】:

    答案是各种事物的组合。

    首先,获取数据最有效的方法是通过get_posts();,其代码如下:

    $ca = $_POST['cat'];
    $ad =  $_POST['adhesion'];
    
    $args = array(
        'category' => $ca,
        'meta_key' => 'adhesion_box',
        'meta_value' => $ad,
    );
    
    
    $myposts = get_posts( $args );
    foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
        <li>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
        </li>
    <?php endforeach; 
    
    wp_reset_postdata();
    

    我使用var_dump(); 发现的下一个问题。我意识到粘附选项选择没有返回正确的值。我的 AJAX 调用中存在问题,这一行:

    for (var k in data) {
        var option = $('<option />').val(k).html(data[k]);
    

    需要: for (var k in data) { var option = $('').val(data[k]).html(data[k]);

    我的 php 脚本试图查询数据库中的键,而不是数组中的数据值。

    现在一切正常。

    感谢@jorblume 告诉我var_dump() 我的数组。

    【讨论】:

      【解决方案4】:

      有两种不同的方法:

      方法一:

      <?php
      $category = isset($_POST['cat']) ? $_POST['cat'] : '';
      $adhesion = isset($_POST['adhesion']) ? $_POST['adhesion'] : '';
      $query = array(
          'post_type' => 'post',
          'category' => $category,
          'meta_query' => array(
              array(
                  'key' => 'adhesion_box',
                  'value' => $adhesion,
                  'compare' => '='
              )
          )
      );
      $queryObject = new WP_Query($query);
      ?>
      

      方法二:

      <?php
      $category = isset($_POST['cat']) ? $_POST['cat'] : '';
      $adhesion = isset($_POST['adhesion']) ? $_POST['adhesion'] : '';
      $query_str = "  SELECT $wpdb->posts.*
                      FROM $wpdb->posts, $wpdb->postmeta
                      LEFT JOIN $wpdb->post2cat ON ($wpdb->posts.ID = $wpdb->post2cat.post_id)
                      WHERE 
                          $wpdb->posts.ID = $wpdb->postmeta.post_id
                      AND $wpdb->posts.post_type = 'post'
                      AND $wpdb->postmeta.meta_key = 'adhesion'
                      AND $wpdb->postmeta.meta_value = %s
                      AND $wpdb->post2cat.category_id = %s
                  ";
      $query = $wpdb->prepare($query_str, array($adhesion, $category));
      $result = $wpdb->get_results($query);
      ?>
      

      有关更多信息,请查看以下 2 个链接:

      http://codex.wordpress.org/Class_Reference/wpdb

      http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query

      【讨论】:

      • 您没有提到要使用查询检索元值。这是您的代码$ad = array( 'key' =&gt; 'adhesion_box', 'value' =&gt; $_POST['adhesion'] );。您正在手动填写value。您只提到您编写的查询没有返回任何数据。我刚刚修复了您的查询。
      • 另一方面,如果你已经找到答案,那么你应该关闭这个问题并标记有效的答案,你也应该考虑关闭赏金。让这个问题保持开放对任何人都没有帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 2021-06-07
      • 1970-01-01
      • 2011-07-20
      • 2019-10-24
      • 2018-08-13
      相关资源
      最近更新 更多