循环外部和数组内部的自定义字段

时间:2012-02-21 作者:Dustin J

我正在尝试使用custom field 内部awidget 因此,它在循环之外。更进一步,我的主题是使用数组生成列表,这让我很难理解。

基本上,主题使用feature image 要显示每篇文章的缩略图,我想使用custom field. 以下是我需要更改的代码:

        <?php if($images && has_post_thumbnail()): ?>
        <?php $image = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), \'widget-image\'); ?>
        <div class="block-image"><a href=\'<?php the_permalink(); ?>\' title=\'<?php the_title(); ?>\'><img src="<?php echo $image[0]; ?>" alt="<?php the_title(); ?>" width=\'290\' height=\'160\' /></a><?php echo $icon; ?></div>
        <?php else: ?>
        <div class="block-image"><a href=\'<?php the_permalink(); ?>\' title=\'<?php the_title(); ?>\'><img src="<?php bloginfo(\'template_directory\'); ?>/timthumb.php?src=<?php bloginfo(\'template_directory\'); ?>/images/thumbnail.png&w=290&h=160" alt="<?php the_title(); ?>" width=\'290\' height=\'160\' /></a><?php echo $icon; ?></div>
        <?php endif; ?>
这是一个带有数组的计数器内部。

这似乎很容易做到,但我的编程技能非常有限。我不太了解PHP或WordPress,尤其是在循环外和使用数组时。

我想我只需要改变这一行:

<?php $image = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), \'widget-image\'); ?>
对于这样的事情(但它不起作用,我认为这是因为它在循环之外):

<?php $image = get_post_meta($postid, \'Thumbnail\', true); ?>

In case you need to see more, here is the entire code on the widget page:

function pyre_homepage_1col_load_widgets()
{
    register_widget(\'Pyre_Homepage_1col_Widget\');
}

class Pyre_Homepage_1col_Widget extends WP_Widget {

    function Pyre_Homepage_1col_Widget()
    {
        $widget_ops = array(\'classname\' => \'pyre_homepage_1col\', \'description\' => \'Homepage 1-column recent posts widget.\');

        $control_ops = array(\'id_base\' => \'pyre_homepage_1col-widget\');

        $this->WP_Widget(\'pyre_homepage_1col-widget\', \'Avenue Theme: Home 1-column\', $widget_ops, $control_ops);
    }

    function widget($args, $instance)
    {
        extract($args);

        $title = $instance[\'title\'];
        $post_type = \'all\';
        $categories = $instance[\'categories\'];
        $posts = $instance[\'posts\'];
        $images = true;
        $rating = true;
        $show_excerpt = isset($instance[\'show_excerpt\']) ? \'true\' : \'false\';

        echo $before_widget;
        ?>

        <?php
        $post_types = get_post_types();
        unset($post_types[\'page\'], $post_types[\'attachment\'], $post_types[\'revision\'], $post_types[\'nav_menu_item\']);

        if($post_type == \'all\') {
            $post_type_array = $post_types;
        } else {
            $post_type_array = $post_type;
        }
        ?>

        <div class="block full">

            <h3><a href="<?php echo get_category_link($categories); ?>"><?php echo $title; ?></a> <span class="arrows">&raquo;</span></h3>

            <?php
            $recent_posts = new WP_Query(array(
                \'showposts\' => $posts,
                \'cat\' => $categories,
            ));
            ?>
            <?php
            $big_count = round($posts / 4);
            if(!$big_count) { $big_count = 1; }
            ?>
            <?php $counter = 1; while($recent_posts->have_posts()): $recent_posts->the_post(); ?>
            <?php
            if(has_post_format(\'video\') || has_post_format(\'audio\') || has_post_format(\'gallery\')) {
                $icon = \'<span class="\' . get_post_format($post->ID) . \'-icon"></span>\';
            } else {
                $icon = \'\';
            }
            ?>
            <?php if($counter <= $big_count): ?>
            <?php if($counter == $big_count) { $last = \'block-item-big-last\'; } else { $last = \'\'; }?>
            <div class="block-item-big <?php echo $last; ?>">
                <?php if($images && has_post_thumbnail()): ?>
                <?php $image = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), \'widget-image\'); ?>
                <div class="block-image"><a href=\'<?php the_permalink(); ?>\' title=\'<?php the_title(); ?>\'><img src="<?php echo $image[0]; ?>" alt="<?php the_title(); ?>" width=\'290\' height=\'160\' /></a><?php echo $icon; ?></div>
                <?php else: ?>
                <div class="block-image"><a href=\'<?php the_permalink(); ?>\' title=\'<?php the_title(); ?>\'><img src="<?php bloginfo(\'template_directory\'); ?>/timthumb.php?src=<?php bloginfo(\'template_directory\'); ?>/images/thumbnail.png&w=290&h=160" alt="<?php the_title(); ?>" width=\'290\' height=\'160\' /></a><?php echo $icon; ?></div>
                <?php endif; ?>
                <h2><a href=\'<?php the_permalink(); ?>\' title=\'<?php the_title(); ?>\'><?php the_title(); ?></a></h2>
                <span class="block-meta"><?php the_time(\'F j, Y\'); ?>, <?php comments_popup_link(); ?></span>
                <?php if($show_excerpt == \'true\'): ?><p><?php echo string_limit_words(get_the_excerpt(), 15); ?> ...</p><?php endif; ?>
            </div>
            <?php else: ?>
            <div class="block-item-small">
                <?php if($images && has_post_thumbnail()): ?>
                <?php $image = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), \'widget-image-thumb\'); ?>
                <div class="block-image"><a href=\'<?php the_permalink(); ?>\' title=\'<?php the_title(); ?>\'><img src="<?php echo $image[0]; ?>" alt="<?php the_title(); ?>" width=\'50\' height=\'50\' /></a><?php echo $icon; ?></div>
                <?php else: ?>
                <div class="block-image"><a href=\'<?php the_permalink(); ?>\' title=\'<?php the_title(); ?>\'><img src="<?php bloginfo(\'template_directory\'); ?>/timthumb.php?src=<?php bloginfo(\'template_directory\'); ?>/images/thumbnail.png&w=50&h=50" alt="<?php the_title(); ?>"  width=\'50\' height=\'50\' /></a><?php echo $icon; ?></div>
                <?php endif; ?>
                <h2><a href=\'<?php the_permalink(); ?>\' title=\'<?php the_title(); ?>\'><?php the_title(); ?></a></h2>
                <span class="block-meta"><?php the_time(\'F j, Y\'); ?>, <?php comments_popup_link(); ?></span>
            </div>
            <?php endif; ?>
            <?php $counter++; endwhile; ?>

        </div>

        <?php
        echo $after_widget;
    }

    function update($new_instance, $old_instance)
    {
        $instance = $old_instance;

        $instance[\'title\'] = $new_instance[\'title\'];
        $instance[\'post_type\'] = \'all\';
        $instance[\'categories\'] = $new_instance[\'categories\'];
        $instance[\'posts\'] = $new_instance[\'posts\'];
        $instance[\'show_images\'] = true;
        $instance[\'show_rating\'] = true;
        $instance[\'show_excerpt\'] = $new_instance[\'show_excerpt\'];

        return $instance;
    }

    function form($instance)
    {
        $defaults = array(\'title\' => \'Recent Posts\', \'post_type\' => \'all\', \'categories\' => \'all\', \'posts\' => 4, \'show_excerpt\' => null);
        $instance = wp_parse_args((array) $instance, $defaults); ?>
        <p>
            <label for="<?php echo $this->get_field_id(\'title\'); ?>">Title:</label>
            <input class="widefat" style="width: 216px;" id="<?php echo $this->get_field_id(\'title\'); ?>" name="<?php echo $this->get_field_name(\'title\'); ?>" value="<?php echo $instance[\'title\']; ?>" />
        </p>

        <p>
            <label for="<?php echo $this->get_field_id(\'categories\'); ?>">Filter by Category:</label> 
            <select id="<?php echo $this->get_field_id(\'categories\'); ?>" name="<?php echo $this->get_field_name(\'categories\'); ?>" class="widefat categories" style="width:100%;">
                <option value=\'all\' <?php if (\'all\' == $instance[\'categories\']) echo \'selected="selected"\'; ?>>all categories</option>
                <?php $categories = get_categories(\'hide_empty=0&depth=1&type=post\'); ?>
                <?php foreach($categories as $category) { ?>
                <option value=\'<?php echo $category->term_id; ?>\' <?php if ($category->term_id == $instance[\'categories\']) echo \'selected="selected"\'; ?>><?php echo $category->cat_name; ?></option>
                <?php } ?>
            </select>
        </p>

        <p>
            <label for="<?php echo $this->get_field_id(\'posts\'); ?>">Number of posts:</label>
            <input class="widefat" style="width: 30px;" id="<?php echo $this->get_field_id(\'posts\'); ?>" name="<?php echo $this->get_field_name(\'posts\'); ?>" value="<?php echo $instance[\'posts\']; ?>" />
        </p>

        <p>
            <input class="checkbox" type="checkbox" <?php checked($instance[\'show_excerpt\'], \'on\'); ?> id="<?php echo $this->get_field_id(\'show_excerpt\'); ?>" name="<?php echo $this->get_field_name(\'show_excerpt\'); ?>" /> 
            <label for="<?php echo $this->get_field_id(\'show_excerpt\'); ?>">Show excerpt</label>
        </p>
    <?php }
}
?>
非常感谢!

1 个回复
最合适的回答,由SO网友:Chris_O 整理而成

要获取循环外部的自定义字段值,需要调用global $wp_query 获取您的帖子id。

global $wp_query;
$postid = $wp_query->post->ID;
$image = get_post_meta($postid, \'Thumbnail\', true);

结束

相关推荐

Update Loop with Form

我有一个照片库,我正在开发使用WP作为内容管理手段。我非常依赖一些jQuery插件来管理UI样式和操作(通过排序)。我的问题是有太多该死的帖子!737,每个都有一个缩略图,显示在页面上。这不可避免地会使任何浏览器陷入困境。尤其是排序插件在对图像进行排序时会“克隆”图像。帖子使用Wp\\u查询脚本构建;<?php $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1; $post_per_page =