Widgets Flashcards
class My_Widget extends WP_Widget {
/** * Sets up the widgets name etc */ public function \_\_construct() { $widget_ops = array( 'classname' => 'my_widget', 'description' => 'My Widget is awesome', ); parent::\_\_construct( 'my_widget', 'My Widget', $widget_ops ); }
무슨 코드인가?
위젯을 만들기 위해서 플러그인에 코드를 추가한 거
class My_Widget extends WP_Widget {
/** * Sets up the widgets name etc */ public function \_\_construct() { $widget_ops = array( 'classname' => 'my_widget', 'description' => 'My Widget is awesome', ); parent::\_\_construct( 'my_widget', 'My Widget', $widget_ops ); }
후에 어떤 걸 해야하는가?
register_widget() 으로 등록하고
add_action( ‘widgets_init’, ‘…’ );
로 추가해야한다
public function __construct() {
$widget_ops = array(
‘classname’ => ‘my_widget’,
‘description’ => ‘My Widget is awesome’,
);
parent::__construct( ‘my_widget’, ‘My Widget’, $widget_ops );
}
‘classname’ => ‘my_widget’,
‘description’ => ‘My Widget is awesome’,
들은 어디에 영향을 주는가?
백엔드의 appearance의 widget 서브메뉴에서
식별하는 데 사용된다
public function widget( $args, $instance ) {
…
}
용도는?
프론트에서 위젯을 표시하는 데 사용된다
테마 아래에 있는 functions.php
function gymfitness_widgets() {
register_sidebar( array(
‘name’ => ‘Sidebar’,
‘id’ => ‘sidebar’,
‘before_widget’ => ‘<div class="widget">’,
‘after_widget’ => ‘</div>’,
‘before_title’ => ‘<h3 class="text-primary">’,
‘after_title’ => ‘</h3>’
) );
}
add_action(‘widgets_init’, ‘gymfitness_widgets’);
위젯 플러그인의
echo $args[‘before_widget’];
echo $args[‘after_widget’];
어떤 관계가 있는가?
functions.php 에서 지정한
before_widget
after_widget
키의 value 값들이
위젯 플러그인에서 적용된다
widget 클래스의
widget 메서드에서
WP_Query()
사용할 수 없다?
X,
사용 해야한다.
$args = array(
‘post_type’ => ‘gymfitness_classes’,
‘posts_per_page’ => $quantity,
‘orderby’ => ‘rand’
);
$classes = new WP_Query($args); while($classes->have_posts()): $classes->the_post();
‘orderby’ => ‘rand’ 는 뭘 의미하는가?
템플릿에서 post를 랜덤으로 표시
프론트에 표시하는 거와 관련있는 위젯 메서드
.. 플러그인에서
public function widget( $args, $instance ) {
백엔드에 표시하는 거와 관련된 위젯 메서드
.. 플러그인에서
public function form( $instance ) {
워드프레스 테마에서 백엔드는
Admin panel을 의미하는 경우가 있다
백엔드에서 표시하고 싶은 게 있다면
그 플러그인에서 백엔드에서 표시하는 부분을 만지면 된다
public function form( $instance ) {
$title = ! empty( $instance[‘title’] ) ? $instance[‘title’] : esc_html__( ‘New title’, ‘text_domain’ );
$quantity = ! empty( $instance[‘quantity’] ) ? $instance[‘quantity’] : esc_html__( ‘1’, ‘text_domain’ );
??
백엔드에 표시하기위한
데이터를 가져오는 코드이다
public function form( $instance ) {
$title = ! empty( $instance[‘title’] ) ? $instance[‘title’] : esc_html__( ‘New title’, ‘text_domain’ );
$quantity = ! empty( $instance[‘quantity’] ) ? $instance[‘quantity’] : esc_html__( ‘1’, ‘text_domain’ );
이 코드를 입력하고
필드에 입력을 해도 quantity가 저장이 안되는 이유는?
플러그인의 update 메서드에서
$instance = array();
$instance[‘title’] = ( ! empty( $new_instance[‘title’] ) ) ? sanitize_text_field( $new_instance[‘title’] ) : ‘’;
$instance[‘quantity’] = ( ! empty( $new_instance[‘quantity’] ) ) ? sanitize_text_field( $new_instance[‘quantity’] ) : ‘’;
return $instance;
이렇게 처리를 해야한다
*_widgets.php 의
$instance는
데이터베이스에
저장된 값이다
라라벨에서 페이지에 대한 blade를 정의하듯이
워드프레스에서는 template hierarchy로
워드프레스가 읽을 수 있는 파일명을 지어야한다