WP_Query()致命错误:在第82行的... single-diapers.php中的非对象上调用成员函数have_posts()

时间:2015-05-06 13:01:06

标签: php wordpress

我有以下非常严格的前瞻性代码,但它不起作用。我已经多次写过这样的查询,但这次我遇到了一个非常奇怪的问题。

$args = array (
    'post_type'              => 'diapers',
    'post_status'            => 'publish',
    'posts_per_page'         => '3'
);

$products = new WP_Query( $args );

if ( $products->have_posts() ) {

?>
<div class="more-products">
    <div class="col-xs-12 col-md-4">
        <h3 class="more-products-title text-center text-md-right">
            <?php
                _e('more products', 'z');
            ?>
        </h3>
    </div>
    <div class="col-xs-12 col-md-8">
        <div class="row">
            <?php
                while ( $products->have_posts() ) {
                    $products->the_post();
            ?>
                <div class="col-xs-12 col-md-4">
                    <?php the_title(); ?>
                </div>
            <?php
                }
            ?>
        </div>
    </div>
</div>
<?php
}

但是我收到以下错误:

Fatal error: Call to a member function have_posts() on a non-object in /var/www/projects/no-company/wp-content/themes/babies/single-diapers.php on line 82
Call Stack
#   Time    Memory  Function    Location
1   0.0000  234248  {main}( )   .../index.php:0
2   0.0001  234696  require( '/project-path/wp-blog-header.php' )   .../index.php:17
3   0.0302  2471776 require_once( '/project-path/wp-includes/template-loader.php' ) .../wp-blog-header.php:16
4   0.0374  2594376 include( '/project-path/wp-content/themes/babies/single-diapers.php' )  .../template-loader.php:74

是否有人可以看到此代码有问题?我试过了,但我看不出这个代码有什么问题。

此外,您应该知道,我已print_r $productswhile ( $products->have_posts() )$products包含数据之前尝试print_r

另外,我在$products->the_post()之后尝试了循环中的0,在第一个循环中我对象中的数据是正常的,但是在第二个循环中,我得到了结果Ext.create('Ext.form.Panel', { bodyPadding: 10, defaultType: 'textfield', fieldDefaults: { labelAlign: 'right', labelWidth: 150 }, renderTo: Ext.getBody(), standardSubmit: true, title: 'Form', width: 400, items: [ { fieldBodyCls: 'x-form-trigger-wrap-default x-form-text x-form-text-default', fieldLabel: 'Displayfield with link', name: 'field01', value: 'Some text <a href=http://www.yoururl.com>www.yoururl.com</a>', xtype: 'displayfield' },{ fieldLabel: 'Textfield', name: 'field02', value: 'default', xtype: 'textfield' }] });

最后,我在代码中使用了相同的代码结构到另一个模板文件并且有效,但是这个特定的代码结构不会起作用:(

1 个答案:

答案 0 :(得分:2)

您可以使用以下内容停止错误消息(但它仍然无法解决非对象问题)。

if ( is_object($products) && $products->have_posts() ) {

这意味着如果代码对其他人失败,则不会给他们带来致命错误。但是,您仍然需要找出为什么在您期待对象时没有对象的原因。