• 解決済 lililehua

    (@lililehua)


    下記のサイトを参考にして、ほとんどコピペで自作ウィジェットを作ってみたのですが、他のウィジェットのようにタイトルを入れるところが表示されません。
    他のウィジェットと同じようにタイトルの見た目などそろえたいので、なんとかテーマ内のウィジェットと同じようにタイトルを入れれるか、他のサイトを参考に手を加えたら、タイトルを入力できるフィールドが出てきたので、そこにタイトルを入れてみたのですが、ウィジェット管理の画面ではきちんと反映していますが、ウェブサイトには表示されません。

    初心者のため、他を検索しても、なかなか解決方法が見つかりません。
    もしどなたか、うまく反映できる方法がお分かりになればご教示頂けますでしょうか?
    何卒よろしくお願いします。

    まず、この方のサイトを参考にし、その後、この方のサイトを参考に改良したのが、下記です。
    ここへの書き方がうまくできませんが、最後のほうの改行スペースで囲まれた太字の部分(太字になっているかも不安ですが)が、後者の方のサイトを参考に追加した箇所です。

    とてもわかりにくい形でしか、表示できなくて申し訳ありませんが、何卒よろしくお願い致します。
    尚、使っているテーマはTwenty Twelveです。

    <?php
    class MyWidgetRecentPost extends WP_Widget {
    function MyWidgetRecentPost() {
    parent::WP_Widget(false, $name = ‘自作RecentPost’);
    }
    function widget($args, $instance) {
    $num = 10;
    extract( $args );
    $title = apply_filters( ‘widget_title’, $instance[‘title’] );
    $body = apply_filters( ‘widget_body’, $instance[‘body’] );
    /* 個別記事の時は、カテゴリ別の最新記事を表示する */
    if (is_single()){
    $cat = get_the_category();
    $cat = $cat[0];
    query_posts($query_string . ‘&category_name=’.$cat->slug.’&posts_per_page=’.$num.’&offset=0′);
    echo ‘<h3 class=”widget-title”>「’.$cat->name.’」の最新記事</h3>’;
    /* カテゴリ別アーカイブの時は、カテゴリ別の最新記事を表示する */
    }else if(is_category()){
    $cat = get_query_var(‘cat’);
    $cat = get_category($cat);
    query_posts($query_string . ‘&category_name=’.$cat->slug.’&posts_per_page=’.$num.’&offset=0′);
    echo ‘<h3 class=”widget-title”>「’.$cat->name.’」の最新記事</h3>’;
    /* それ以外の時は、全カテゴリの最新記事を表示する */
    }else{
    query_posts(‘posts_per_page=’.$num.’&offset=0′);
    echo ‘<h3 class=”widget-title”>最新記事</h3>’;
    }
    if(have_posts()):while(have_posts()):the_post();?>
    <div style=”float:left;width:135px;margin:0 10px 5px 0;text-align:center;”>
    “>
    <?php the_post_thumbnail(array(135,135)); ?>
    </div>
    <div style=”float:left;width:135px;margin-bottom:5px;”>” ><?php the_title(); ?></div><div style=”clear:both;”></div>
    <?php
    endwhile; endif; wp_reset_query();
    }
    function update($new_instance, $old_instance) {
    $instance = $old_instance;
    $instance[‘title’] = strip_tags($new_instance[‘title’]);
    $instance[‘body’] = trim($new_instance[‘body’]);
    return $instance;
    }
    function form($instance) {
    $title = esc_attr($instance[‘title’]);
    $body = esc_attr($instance[‘body’]);

    ?>
      <p>
    <label for=”<?php echo $this->get_field_id(‘title’); ?>”>
    <?php _e(‘サイトに表示されるコンテンツ:’); ?>
    </label>
    <input class=”widefat” id=”<?php echo $this->get_field_id(‘title’); ?>” name=”<?php echo $this->get_field_name(‘title’); ?>” type=”text” value=”<?php echo $title; ?>” />
    </p>
    <p>
    <label for=”<?php echo $this->get_field_id(‘body’); ?>”>
    <?php _e(‘サイトに表示されるコンテンツ:’); ?>
    </label>
    <textarea class=”widefat” rows=”16″ colls=”20″ id=”<?php echo $this->get_field_id(‘body’); ?>” name=”<?php echo $this->get_field_name(‘body’); ?>”>
    <?php echo $body; ?>
    </textarea>
    </p>
    <?php

    }
    }
    add_action(‘widgets_init’, create_function(”, ‘return register_widget(“MyWidgetRecentPost”);’));
    ?>
    </div>

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • タイトルをechoしてないからではないでしょうか。後述の様に書くと、私のサイトではとりあえず設定したタイトルを表示することはできました。

    ポイントは以下の部分だと思います。

    $title = apply_filters( 'widget_title', $instance['title'] );
    if ($title) {
        echo $args['before_title'] . $title . $args['after_title'];
    }
    <?php
    class MyWidgetRecentPost extends WP_Widget {
        function MyWidgetRecentPost() {
            parent::WP_Widget(false, $name = '自作RecentPost');
        }
    
        function widget($args, $instance) {
            $num = 10;
            extract( $args );
            $title = apply_filters( 'widget_title', $instance['title'] );
            if ($title) {
                echo $args['before_title'] . $title . $args['after_title'];
            }
            $body = apply_filters( 'widget_body', $instance['body'] );
            /* 個別記事の時は、カテゴリ別の最新記事を表示する */
            if (is_single()){
                $cat = get_the_category();
                $cat = $cat[0];
                query_posts($query_string . '&category_name='.$cat->slug.'&posts_per_page='.$num.'&offset=0');
                echo '<h3 class="widget-title">「'.$cat->name.'」の最新記事</h3>';
            /* カテゴリ別アーカイブの時は、カテゴリ別の最新記事を表示する */
            }else if(is_category()){
                $cat = get_query_var('cat');
                $cat = get_category($cat);
                query_posts($query_string . '&category_name='.$cat->slug.'&posts_per_page='.$num.'&offset=0');
                echo '<h3 class="widget-title">「'.$cat->name.'」の最新記事</h3>';
            /* それ以外の時は、全カテゴリの最新記事を表示する */
            }else{
                query_posts('posts_per_page='.$num.'&offset=0');
                echo '<h3 class="widget-title">最新記事</h3>';
            }
            if(have_posts()):while(have_posts()):the_post();?>
                <div style="float:left;width:135px;margin:0 10px 5px 0;text-align:center;"><?php the_post_thumbnail(array(135,135)); ?></div>
                <div style="float:left;width:135px;margin-bottom:5px;"><?php the_title(); ?></div><div style="clear:both;"></div>
            <?php endwhile; endif; wp_reset_query();
        }
    
        function update($new_instance, $old_instance) {
            $instance = $old_instance;
            $instance['title'] = strip_tags($new_instance['title']);
            $instance['body'] = trim($new_instance['body']);
            return $instance;
        }
    
        function form($instance) {
            $title = esc_attr($instance['title']);
            $body = esc_attr($instance['body']);
    ?>
            <p>
            <label for="<?php echo $this->get_field_id('title'); ?>">
            <?php _e('サイトに表示されるコンテンツ:'); ?>
            </label>
            <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $title; ?>" />
            </p>
            <p>
            <label for="<?php echo $this->get_field_id('body'); ?>">
            <?php _e('サイトに表示されるコンテンツ:'); ?>
            </label>
            <textarea class="widefat" rows="16" colls="20" id="<?php echo $this->get_field_id('body'); ?>" name="<?php echo $this->get_field_name('body'); ?>">
            <?php echo $body; ?>
            </textarea>
            </p>
            <?php
        }
    }
    add_action('widgets_init', create_function('', 'return register_widget("MyWidgetRecentPost");'));
    ?>

    私のサイトのアドレスは下記です。
    http://meta-scheme.sakura.ne.jp/jikken/

    使っているテーマはTwenty Sixteen, WordPressのバージョンは4.4です。

    トピック投稿者 lililehua

    (@lililehua)

    tg29359様、

    返信遅くなりまして申し訳ありません。
    ご回答ありがとうございます!
    テストまでして頂いて恐縮です。
    ご回答頂いた通りでやってみたところ、タイトルが反映できました!!
    ご丁寧な回答と、テストまでして頂いて恐縮です。
    本当にありがとうございました。
    これで問題解決とさせて頂きます。
    全くの初心者ですが、今後ともよろしくご指導のほど、お願い致します。

    トピック投稿者 lililehua

    (@lililehua)

     

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「自作ウィジェットのタイトル表示の仕方」には新たに返信することはできません。