无法在窗口小部件中回显自定义字段

时间:2014-07-03 08:46:10

标签: php widget wordpress-plugin wordpress

我正在尝试在我自定义的小部件中显示自定义字段,但我无法显示自定义字段。我认为它与我用于在循环中获取帖子ID的变量有关,因为当我将其更改为标准的the_title函数时,小部件可以工作,所以它与我如何调用它有关自定义字段。

我知道自定义字段的关键是“wpcf-promo-title”但是无论我尝试过什么,自定义字段(其中包含侧边栏帖子标题的缩短版本)都不会显示。此代码会显示缩略图,但不会显示促销标题。您可以在http://www.cantstopshipping.com

中查看此操作

这是我的代码,包括查询和小部件的前端。

function widget($args, $instance) {

            extract( $args );

            $title = apply_filters( 'widget_title', empty($instance['title']) ? 'Recent Posts' : $instance['title'], $instance, $this->id_base);    
            $show_date = isset( $instance['show_date'] ) ? $instance['show_date'] : false;

            if ( ! $number = absint( $instance['number'] ) ) $number = 5;

            if( ! $cats = $instance["cats"] )  $cats='';

            // array to call recent posts.

            $crpw_args=array(

                'showposts' => $number,
                'category__in'=> $cats,
                );

            $crp_widget = null;
            $crp_widget = new WP_Query($crpw_args);

            echo $before_widget;

            // Widget title

            echo $before_title;
            echo $instance["title"];
            echo $after_title;

            // Post list in widget

            echo "<ul>\n";

        while ( $crp_widget->have_posts() )
        {
            $crp_widget->the_post();
        ?>
            <li class="crpw-item">

                <p style="float:left">
                    <a  href="<?php the_permalink(); ?>" rel="bookmark" title="Permanent link to <?php the_title_attribute(); ?>" class="crpw-title"><?php the_post_thumbnail('sidebar-small'); ?></a>
                </p>
                <?php $promotitle = get_post_meta($post->ID, 'wpcf-promo-title', true); ?>
                <p style="float:right; width:200px">
                    <a  href="<?php the_permalink(); ?>" rel="bookmark" title="Permanent link to <?php the_title_attribute(); ?>" class="crpw-title"><?php echo $promotitle; ?></a>
                </p>
                <?php if ( $show_date ) : ?>
                <span class="crpw-date"><?php echo "("; ?><?php echo get_the_date(); ?><?php echo ")"; ?></span>
            <?php endif; ?>

            </li>
        <?php

        }

         wp_reset_query();

        echo "<div class=\"fix\"></div>";
        echo "</ul>\n";
        echo $after_widget;

    }

1 个答案:

答案 0 :(得分:0)

您的global $post似乎缺失了。

但您可以尝试使用get_the_ID()代替$post->ID

你还应该考虑摆脱extract(),它现在被认为是一种“坏”的做法。

另一件事是您应该使用wp_reset_postdata()来恢复全局$post对象。 wp_reset_query()电话应与query_posts()电话一起使用。