Simplicityの特徴 › フォーラム › Simplicityについての質問 › 自作ウィジェットでcss要素が反映されない
- このトピックには4件の返信、1人の参加者があり、最後に
トウガラシにより10年、 8ヶ月前に更新されました。
-
投稿者投稿
-
-
2015年10月5日 2:57 AM #33153
トウガラシ
ゲスト自作ウィジェットを作成したところ、タイトルは.widgettitle要素が反映されて綺麗に映ります。
しかし、ウィジェット全体には#sidebar .widget要素が反映されず背景が映りません。
この要素を反映させるにはどうすればいいでしょうか?また、自作したウィジェットの全体に<div class =””>の形でcssの要素をかませたいのですが、どうやればいいでしょうか?
目的としては状況に応じてdisplay:none;でウィジェット自体を消せるようにするためです。
widget.phpからcssが絡めそうな箇所を探したのですが、どうにも見つからず困っています。
どなたか分かる方がいれば回答頂けると助かりますm(_ _)m -
2015年10月5日 7:50 AM #33157
Hidekichi
ゲストまずは、
>目的としては状況に応じて
を具体的に、どういう場合にどうしたいと言う説明が欲しいのと、結果的に何かしらwidgetを囲むブロックが欲しいと言うことかと思うんですが、それと自作ウィジェットの関係性をもう少し詳しく書いて頂けるでしょうか?
自作ウィジェットがスイッチになってるんですかね?
-
2015年10月5日 8:44 AM #33158
トウガラシ
ゲストどうも、御返信ありがとうございますm(_ _)m
状況というのはレスポンシブで横幅が740px以下で消えるなどです
まさに、その「何かしらwidgetを囲むブロックが欲しい」と言うことです↓自作ウィジェットのコードは以下をベースに作っています
class MyWidgetItem extends WP_Widget {
function MyWidgetItem() {
parent::WP_Widget(false, $name = ‘ウィジェットの名前’);
}
function widget($args, $instance) {
extract( $args );
$title = apply_filters( ‘widget_title’, $instance[‘title’] );
$body = apply_filters( ‘widget_body’, $instance[‘body’] );
?>
<li <?php echo ‘id=”foo”‘; ?> >
<?php if ( $title ) ?>
<?php echo $before_title . $title . $after_title; ?>
<?php echo ‘<p>’ . $body . ‘</p>’; ?><?php
}
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(“MyWidgetItem”);’));なので、このコードにcssが組み込めれば大丈夫です
-
2015年10月5日 10:16 AM #33160
Hidekichi
ゲスト> レスポンシブで横幅が740px以下で消えるなどです
740以下で消えるってことは、サイドバーやらフッターの中のウィジェットが消えると困る?って話ですかね?
僕が知りたいのは、その作った何かしらのウィジェットは740pxで消える何かとどういう関係性があるのかということなのです。
>目的としては状況に応じてdisplay:none;でウィジェット自体を消せるようにするため
とあるので、その状況が
> レスポンシブで横幅が740px以下で消えるなどです
だと思うんですが、何かしらのウィジェットを自作して、それが740px以下で消えるようにしたいために自作ウィジェットのスクリプトのどこにidなりclassを入れればよいのか?と言う質問で良いのでしょうか?もしそうなら、Simplicityとは無関係なような気がしなくもないんですけれども、少なくともこれからのwordpressで利用するなら、レスに書いていただいたベースは使わないほうが良いです。
おそらく何かしら作った際にnoticeが出ます。現状バージョンで動作しないわけではありませんが、今後PHPのバージョンに合わせるようにwordpressがバージョンアップしていくごとに、noticeからwarningとかにグレードアップするかも知れません。
それがいつどこで切り替わるかがわからないので、なるべくなら今の仕様に対応した形で作るのが良いのではないかと思う次第です。class myWidget extends WP_Widget { function __construct() { $widget_ops = array('description' => 'ウィジェットの説明文'); parent::__construct( false, 'myWidgetだぜー', $widget_ops ); } }コンストラクタ部分はこんな感じに書きます。詳しくはcodexなどを参考に。
function widgetではどのように表示するか、
function updateでは設定されている値と比較したり、不要なタグ・スペースやらを取り除いたり加えたり色々します。
function formでは、wordpressのウィジェット画面に表示するフォームを作ります。
で、add_actionで登録って感じですが、これらの中身は何をどうしたいかで変わります。テキストウィジェットなら、formで内容を入れてもらって、updateで内容の加工処理をして、widgetで表示するって感じです。カレンダーウィジェットとかもwidget.phpを継承して作ってるらしいので、大抵のことはできそうですね。
なので表示する部分のwidget内の何かしらに目的のブロックとクラスとかを入れればイケるようにも思うんです。
#33158のひな形は何をしているのか、その用途がイマイチわかりませんが、liに対してidつけるってのはどうかと(笑)そこはidつけたくてもclassでしょうと突っ込みたい。いや別にidでも良いのですけれども。
ってことで、このliを囲むように何かしらブロック入れたらいいんじゃないですかね?
ただ最終的な仕様にもよる部分があるかと思うので、ここらは第三者の僕みたいのでは分かりかねる部分です。 -
2015年10月6日 1:32 PM #33178
トウガラシ
ゲストどうも、お返事遅れてすみません
なるほど、li要素のところにかければ良かったわけですね!
おかげで構造が理解できました、ありがとうございます
-
-
投稿者投稿
- トピック「自作ウィジェットでcss要素が反映されない」には新しい返信をつけることはできません。