0

カスタムタグからカスタム量の投稿を表示するWordpressウィジェットを作成しました(自由に使用してください)。コードは次のとおりです。

    <?php 
    $category = get_the_category();
    $current_category = $category[0]->term_id;
    ?>

    <?php query_posts("showposts=".$posts_number."&cat=".$current_category."&tag=featured"); // the tag
    if (have_posts()) : while (have_posts()) : the_post(); ?>
        <div class="block-post clearfix">
            <?php
                $thumb = '';
                $width = 287;
                $height = 162;
                $classtext = 'post-image';
                $titletext = get_the_title();
                $thumbnail = get_thumbnail($width,$height,$classtext,$titletext,$titletext,false,'Recent');
                $thumb = $thumbnail["thumb"];
            ?>

            <?php if($thumb <> '' && get_option('aggregate_thumbnails_index') == 'on') { ?>
                <div class="thumb">
                    <a href="<?php the_permalink(); ?>">
                        <?php print_thumbnail($thumb, $thumbnail["use_timthumb"], $titletext, $width, $height, $classtext); ?>
                        <span class="overlaybig"></span>
                    </a>
                </div>  <!-- end .post-thumbnail -->
            <?php } ?>

            <div class="recenttitle"><h3 class="title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3></div>
        </div> <!-- end .block-post -->
    <?php endwhile; endif; wp_reset_query(); ?>

私の質問は、現在の投稿を出力から除外するにはどうすればよいですか? 問題は、ユーザーが出力する投稿を現在表示しているかどうかを確認しないことです。ユーザーがいる現在の投稿をスキップするようにコードを調整するにはどうすればよいですか?

これは簡単に修正できると確信していますが、現時点では迷っています。

更新: maiorano84 によって提供された修正を含む、ウィジェット全体のコードは次のとおりです。

<?php class ArtificePinned extends WP_Widget
{
    function ArtificePinned(){
        $widget_ops = array('description' => 'Displays posts filtered by current category and the tag pinned');
        $control_ops = array('width' => 400, 'height' => 300);
        parent::WP_Widget(false,$name='Artifice Pinned',$widget_ops,$control_ops);
    }

  /* Displays the Widget in the front-end */
    function widget($args, $instance){
        extract($args);
        $title = apply_filters('widget_title', empty($instance['title']) ? ' ' : $instance['title']);
        $posts_number = empty($instance['posts_number']) ? '' : (int) $instance['posts_number'];

        echo $before_widget;

        if ( $title )
        echo $before_title . $title . $after_title;
?>

<?php 
$category = get_the_category();
$current_category = $category[0]->term_id;
$qarr = array(
    'posts_per_page' => $posts_number,
    'cat' => $current_category,
    'tag' => 'featured',
    'post__not_in' => get_the_ID()
);
$q = new WP_Query($qarr);
if($q->have_posts()) : while ($q->have_posts()) : $q->the_post();
?>
    <div class="block-post clearfix">
        <?php
            $thumb = '';
            $width = 287;
            $height = 162;
            $classtext = 'post-image';
            $titletext = get_the_title();
            $thumbnail = get_thumbnail($width,$height,$classtext,$titletext,$titletext,false,'Recent');
            $thumb = $thumbnail["thumb"];
        ?>

        <?php if($thumb <> '' && get_option('aggregate_thumbnails_index') == 'on') { ?>
            <div class="thumb">
                <a href="<?php the_permalink(); ?>">
                    <?php print_thumbnail($thumb, $thumbnail["use_timthumb"], $titletext, $width, $height, $classtext); ?>
                    <span class="overlaybig"></span>
                </a>
            </div>  <!-- end .post-thumbnail -->
        <?php } ?>

        <div class="recenttitle"><h3 class="title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3></div>
    </div> <!-- end .block-post -->
<?php endwhile; endif;?>

<?php
        echo $after_widget;
    }

  /*Saves the settings. */
    function update($new_instance, $old_instance){
        $instance = $old_instance;
        $instance['title'] = stripslashes($new_instance['title']);
        $instance['posts_number'] = (int) $new_instance['posts_number'];

        return $instance;
    }

  /*Creates the form for the widget in the back-end. */
    function form($instance){
        //Defaults
        $instance = wp_parse_args( (array) $instance, array('title'=>' ', 'posts_number'=>'7') );

        $title = esc_attr($instance['title']);
        $posts_number = (int) $instance['posts_number'];

        # Title
        echo '<p><label for="' . $this->get_field_id('title') . '">' . 'Title:' . '</label><input class="widefat" id="' . $this->get_field_id('title') . '" name="' . $this->get_field_name('title') . '" type="text" value="' . $title . '" /></p>';
        # Number Of Posts
        echo '<p><label for="' . $this->get_field_id('posts_number') . '">' . 'Number of Posts:' . '</label><input class="widefat" id="' . $this->get_field_id('posts_number') . '" name="' . $this->get_field_name('posts_number') . '" type="text" value="' . $posts_number . '" /></p>';
        # Category ?>

        <?php
    }

}// end ArtificePinned class

function ArtificePinnedInit() {
  register_widget('ArtificePinned');
}

add_action('widgets_init', 'ArtificePinnedInit');

?>
4

1 に答える 1

1

デフォルトのWordpressループを変更することを目的としているため、query_postsは使用しないでください。代わりにWPクエリを使用してください。

あなたの質問に答えるために、解決策は非常に簡単です。私は、WP_Queryを使用してこの例を自由に提供しました。

<?php
$qarr = array(
    'posts_per_page' => $posts_number,
    'cat' => $current_category,
    'tag' => 'featured',
    'post__not_in' => get_the_ID()
);
$q = new WP_Query($qarr);
if($q->have_posts()) : while ($q->have_posts()) : $q->the_post();
?>

バージョン2.1でshowpostsが非推奨になったため、「showposts」を「posts_per_page」に変更したことにも注意してください。

更新:コードは次のようになります。

<?php 
$category = get_the_category();
$current_category = $category[0]->term_id;
$qarr = array(
    'posts_per_page' => $posts_number,
    'cat' => $current_category,
    'tag' => 'featured',
    'post__not_in' => get_the_ID()
);
$q = new WP_Query($qarr);
if($q->have_posts()) : while ($q->have_posts()) : $q->the_post();
?>
    <div class="block-post clearfix">
        <?php
            $thumb = '';
            $width = 287;
            $height = 162;
            $classtext = 'post-image';
            $titletext = get_the_title();
            $thumbnail = get_thumbnail($width,$height,$classtext,$titletext,$titletext,false,'Recent');
            $thumb = $thumbnail["thumb"];
        ?>

        <?php if($thumb <> '' && get_option('aggregate_thumbnails_index') == 'on') { ?>
            <div class="thumb">
                <a href="<?php the_permalink(); ?>">
                    <?php print_thumbnail($thumb, $thumbnail["use_timthumb"], $titletext, $width, $height, $classtext); ?>
                    <span class="overlaybig"></span>
                </a>
            </div>  <!-- end .post-thumbnail -->
        <?php } ?>

        <div class="recenttitle"><h3 class="title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3></div>
    </div> <!-- end .block-post -->
<?php endwhile; endif;?>

修理:

問題はこれに起因しています:

'post__not_in' => get_the_ID()

問題は、「post__not_in」が配列を予期していることです。整数ではありません。申し訳ありませんが、それは私の間違いでした。そのコード行を次のように変更してください。

'post__not_in' => array(get_the_ID())

そして、あなたは良いはずです。

于 2012-09-11T18:27:24.757 に答える