按类别和元值查询帖子

时间:2014-09-22 19:08:13

标签: javascript php jquery wordpress forms

好的,所以我试图解决这个问题。我的问题归结为按元值和类别查询帖子,而我似乎无法输出任何内容。

我已完成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/

4 个答案:

答案 0 :(得分:2)

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

enter image description here

我的猜测是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如何处理您的args。 $ ad是一个数组,我不确定它将如何处理(在WP中没有经验)。该函数可能返回null,因为您将数组传递给它并且它确实需要一个字符串。

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

答案 1 :(得分:2)

尝试以下代码。您使用$ ad作为字符串,它是和数组,因此它将被指定为字符串“Array”,并且将搜索该键

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

答案 2 :(得分:1)

答案是两者兼而有之。

首先,获取数据的最有效方法是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){         var option = $(&#39;&#39;)。val(data [k])。html(data [k]);

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

现在一切正常。

感谢@jorblume告诉我var_dump()我的阵列。

答案 3 :(得分:-1)

有两种不同的方法:

方法1:

<?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);
?>

方法2:

<?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

相关问题