Slide 1

Slide 1 text

WordPress Plugin ೖ໳ Toro_Unit @Shinshu WP Meetup vol.13 1

Slide 2

Slide 2 text

$ whoami 2

Slide 3

Slide 3 text

Toro_Unit ઎෦ ߛ (͏Β΂ ͻΖ͠) • Frontend Engineer • WordPress Plugin and Theme Developer Github: @torounit Twitter: @Toro_Unit 3

Slide 4

Slide 4 text

Contribution • WordPress 4.3 / 4.4 / 4.7 / 5.0 / 5.1 / 5.2 • WordCamp Osaka 2019 • WordCamp Osaka 2018 Speaker. • etc... 4

Slide 5

Slide 5 text

Plugins and Themes • Custom Post Type Permalinks • Advanced Posts Blocks • Simple Post Type Permalinks • Powerful Posts Per Page (PPPP) • Vanilla • and more... 5

Slide 6

Slide 6 text

Question. 6

Slide 7

Slide 7 text

Theme ࡞ͬͨ͜ͱ͋Δਓ 7

Slide 8

Slide 8 text

Plugin ࡞ͬͨ͜ͱ͋Δਓ 8

Slide 9

Slide 9 text

ͦ΋ͦ΋ ϓϥάΠϯͱ͸Կͳͷ͔ɻ 9

Slide 10

Slide 10 text

• WordPress Λ֦ு͢ΔػೳɻσϑΥϧτʹແ͍ػೳΛ௥Ճ͠ ͨΓɺಈ࡞Λվมͨ͠Γ͢Δɻ • wp-settings.php ͰಡΈࠐ·ΕΔɻ • PHPͷεΫϦϓτɻ͔ͦ͜ΒCSSͱ͔JSͱ͔ΛಡΈࠐΜͩΓ ͢Δ͜ͱ΋ɻ 10

Slide 11

Slide 11 text

foreach ( wp_get_active_and_valid_plugins() as $plugin ) { wp_register_plugin_realpath( $plugin ); include_once( $plugin ); /** * Fires once a single activated plugin has loaded. * * @since 5.1.0 * * @param string $plugin Full path to the plugin's main file. */ do_action( 'plugin_loaded', $plugin ); } 11

Slide 12

Slide 12 text

wp-content/plugins ͷதʹɺ • hogehoge.php • hogehoge/hugahuga.php ͳͲͷϑΝΠϧΛ࡞੒͠ɺઌ಄ʹίϝϯτΛॻ͚͹ϓϥάΠ ϯɻ

Slide 13

Slide 13 text

ΞΫγϣϯϑοΫɺϑΟϧλʔϑοΫ • WordPress ͷಛఆͷಈ࡞Λվม͢ΔͨΊͷػೳɻ 13

Slide 14

Slide 14 text

add_action ಛఆͷՕॴʹಈ࡞Λ௥Ճ͢Δɻ // ϓϥάΠϯͷελΠϧγʔτΛొ࿥ function add_reading_minutes_styles() { wp_enqueue_style( 'plugin-hans-on-sample', plugin_dir_url( __FILE__ ) . 'style.css' ); } // ΞΫγϣϯϑοΫΛొ࿥ add_action( 'wp_enqueue_scripts', 'add_reading_minutes_styles' ); 14

Slide 15

Slide 15 text

add_filter ಛఆͷՕॴʹಈ࡞Λվม͢Δɻ //ຊจͷલʹ͜ͷهࣄ͸n෼ͰಡΊ·͢Λදࣔɻ function add_reading_minutes_to_the_content( $content ) { $minutes = count_reading_minutes( $content ); $text = sprintf( '͜ͷهࣄ͸໿%d෼ͰಡΊ·͢ɻ', $minutes ); $before = '' . esc_html( $text ) . ''; return $before . $content; } //ϑΟϧλʔϑοΫΛొ࿥ add_filter( 'the_content', 'add_reading_minutes_to_the_content' ); 15

Slide 16

Slide 16 text

ࡶͳͨͱ͑ ࡶͳΧϨʔͷ࡞Γํ 1. ࡐྉΛ༻ҙ͢Δ: [ܲ೑ɺδϟΨΠϞɺʹΜ͡ΜɺλϚωΪ] 2. ࡐྉΛ੾Δ 3. ᖱΊΔ 4. ࣽΔ 5. ௐຯྉ(ϧ΢)ΛೖΕΔ 16

Slide 17

Slide 17 text

ΧϨʔ΋ͪΌΜͱΞΫΛऔͬͨํ͕ඒຯ͍ɻ ΞΫΛऔΓ·͘ΔΧϨʔVSҰ੾औΒͳ͍ΧϨʔ :: σΠϦʔϙʔ λϧZ 17

Slide 18

Slide 18 text

1. ࡐྉΛ༻ҙ͢Δ: [ܲ೑ɺδϟΨΠϞɺʹΜ͡ΜɺλϚωΪ] 2. ࡐྉΛ੾Δ 3. ᖱΊΔ 4. ࣽΔ 5. ΞΫΛऔΔ!!! 6. ௐຯྉ(ϧ΢)ΛೖΕΔ 18

Slide 19

Slide 19 text

ࡶͳϨγϐΛ PHP Ͱॻ͍ͯΈΔɻ $zairyo = [ 'ܲ೑', 'δϟΨΠϞ', 'ʹΜ͡Μ', 'λϚωΪ' ]; $zairyo = apply_filters( 'zairyo', $zairyo ); $cook->cut( $zairyo ); do_action( 'before_boil', $cook ); $cook->boil(); do_action( 'after_boiled', $cook ); $seasoning = apply_filters( 'seasoning', [ 'ΧϨʔϧ΢' ] ); $cook->add_seasoning( $seasoning ); 19

Slide 20

Slide 20 text

ΞΫΛऔΔ add_action( 'after_boiled', 'remove_aku' ); function remove_aku( $cook ) { $cook->remove_aku(); } 20

Slide 21

Slide 21 text

1. ࡐྉΛ༻ҙ͢Δ: [ܲ೑ɺδϟΨΠϞɺʹΜ͡ΜɺλϚωΪ] 2. ࡐྉΛ੾Δ 3. ᖱΊΔ 4. ࣽΔ 5. ΞΫΛऔΔ!!! 6. ௐຯྉ(ϧ΢)ΛೖΕΔ 21

Slide 22

Slide 22 text

ϏʔϑΧϨʔʹม͑Δ add_filter( 'zairyo', 'beef_curry_zairyo' ); function beef_curry_zairyo( $zairyo ) { return array_replace( $zairyo, [ 0 => 'ڇ೑'] ); } 22

Slide 23

Slide 23 text

1. ࡐྉΛ༻ҙ͢Δ: [ ڇ೑!! ɺδϟΨΠϞɺʹΜ͡ΜɺλϚωΪ] 2. ࡐྉΛ੾Δ 3. ᖱΊΔ 4. ࣽΔ 5. ௐຯྉ(ϧ΢)ΛೖΕΔ 23

Slide 24

Slide 24 text

೑͡Ό͕ʹม͑Δ add_filter( 'zairyo', function() { return ['ಲ೑', 'δϟΨΠϞ', 'ʹΜ͡Μ', '͠Β͖ͨ', 'λϚωΪ' ]; }); add_filter( 'seasoning', function() { return [ '͠ΐ͏Ώ', 'ΈΓΜ', '࠭౶' ]; }); add_action( 'before_boil', function( $cook ) { $cook->make_dashi('׍અ'); }); add_action( 'after_boiled', function( $cook ) { $cook->remove_aku(); $cook->set_otoshibuta(); }); 24

Slide 25

Slide 25 text

1. ࡐྉΛ༻ҙ͢Δ: [ಲ೑ɺδϟΨΠϞɺʹΜ͡Μɺ͠Β͖ͨɺλϚωΪ] 2. ࡐྉΛ੾Δ 3. ᖱΊΔ 4. μγΛऔΔ 5. ࣽΔ 6. փोΛऔΔ 7. མͱ֖͠ 8. ௐຯྉ(ে༉ɺΈΓΜɺ࠭౶)ΛೖΕΔ 25

Slide 26

Slide 26 text

ϑοΫͷ୳͠ํ Codex ΛݟΔ • ϓϥάΠϯ API/ΞΫγϣϯϑοΫҰཡ - WordPress Codex ೔ ຊޠ൛ 26

Slide 27

Slide 27 text

27

Slide 28

Slide 28 text

• Code reference https://developer.wordpress.org/reference/ɹ Ͱ͕͢͞ɻ • ιʔεΛಡΉɻ • ϑΟϧλʔϑοΫ͸ϚδͰଟ͗͢ΔͷͰɺͦͷ౎౓୳ͯ͠ Δɻ͜ͷؔ਺ͱ͔ςϯϓϨʔτλάͲ͏ʹ͔ͳΒͳ͍͔ ͳʔͬͯײ͡ͰιʔεΛͦͷՕॴ͚ͩಡΉͱɺେ఍ɺ do_action, apply_filter ͕ݟ͔ͭΔɻ 28

Slide 29

Slide 29 text

Α͘࢖͏ action • after_setup_theme: ςʔϚͷઃఆ͕ऴΘͬͨޙ • init : WordPress ͷॳظઃఆͳͲ͕ऴΘͬͨޙ • admin_init : ؅ཧը໘ͰͷॳظઃఆͳͲ͕ऴΘͬͨޙ • wp_enqueue_scripts : CSS ͱ͔ JS Λొ࿥͢Δͱ͖ • pre_get_posts: ౤ߘͷσʔλΛऔಘ͢Δલ 29

Slide 30

Slide 30 text

Α͘࢖͏ filter • body_class: body_class() Ͱग़ྗ͞ΕΔ class Λվมɻ • get_the_archive_title: ҰཡϖʔδͰͷλΠτϧɺ the_archive_title() ͷςΩετΛมߋɻ ͋Μ·Γͳ͍ɻͦͷ౎౓ඞཁʹԠͯ͡ɻɻɻ 30

Slide 31

Slide 31 text

functions.php ͱͳʹ͕͕ͪ͏ͷ͔ • ಡΈࠐ·ΕΔλΠϛϯά͕ҧ͏ɻϓϥάΠϯͷ100ߦԼ͘Β͍Ͱಡ Έࠐ·ΕΔɻ • ͦΕҎ֎ʹҧ͍͸ಛʹͳ͍ɻfunctions.php ͰՄೳͳ͜ͱ͸શͯϓϥ άΠϯͰ࣮ݱͰ͖Δɻ foreach ( wp_get_active_and_valid_themes() as $theme ) { if ( file_exists( $theme . '/functions.php' ) ) { include $theme . '/functions.php'; } } 31

Slide 32

Slide 32 text

• άάΔͱ functions.php ʹɾɾɾΈ͍ͨͳهࣄ͕ࢁ΄Ͳग़ͯ ͘Δ͕ɺ΄΅શͯϓϥάΠϯͰ΋ಈ͘ɻ 32

Slide 33

Slide 33 text

ԿނϓϥάΠϯʁςʔϚͰ΋ಉ͜͡ͱ͕Ͱ͖Δͳ Βผʹྑ͘ͳ͍ʁ • ͪ·ͨͰ͸ଟػೳΛചΓʹͯ͠ΔςʔϚ΋ଟ͍Ͱ͕͢ɻɻɻ 33

Slide 34

Slide 34 text

ςʔϚʹػೳΛؚΊΔ͜ͱͷ໰୊఺ • ςʔϚ͸αΠτͷݟͨ໨Λఆٛ͢ΔϞϊɻػೳΛؚΊΔ΋ͷ Ͱ͸ແ͍ɻ • ݟͨ໨Λม͍͑ͨʂͱ͍͏ͱ͖ʹɺػೳ͕ࢮ͵ͷͰม͑ΒΕ ͳ͍ͳͲͷ໰୊ɻ • ଞͷϞϊͰରԠ͍ͨ͠ػೳΛOFFʹͰ͖ͳ͍ɻ 34

Slide 35

Slide 35 text

ϓϥάΠϯςϦτϦʔ Plugin Territory • ΞΫηεղੳ • SEO ͷͨΊͷػೳ • ͓໰͍߹ΘͤϑΥʔϜ • ΧελϜ౤ߘλΠϓ • ΧελϜϒϩοΫɾγϣʔτίʔυ • etc.... 35

Slide 36

Slide 36 text

ʮϦχϡʔΞϧ΍ςʔϚͷมߋͰͿͬ ͱΜͩΒࠔΔ΋ͷ͸ϓϥάΠϯʯ Plugin Territory – WordPressͷͦͷॲཧ͸ςʔϚͰ΍Δ΂͖͔ϓϥάΠϯͰ΍Δ΂͖͔ʁ | Firegoby 36

Slide 37

Slide 37 text

ͲΜͳ;͏ʹ࢓ࣄͰ࢖ͬͯΔ͔ • Ҋ݅Ͱ࡞Δͱ͖͸ɺػೳ͝ͱʹผͷϓϥάΠϯʹ෼ׂ͍ͯ͠ Δɻ • 5ߦͷίʔυͱ͔Ͱ΋ɻ • γϯϓϧͳػೳ͸࢖͍ճ͕͠ޮ͖΍͍͢͠ཧղ͠΍͍͢ɻ • functions.php ͕ _sʢελʔλʔςʔϚʣ ͦͷ··ͱ͍͏৔ ߹΋ଟ͍ɻ 37

Slide 38

Slide 38 text

Thanks! Github: @torounit Twitter: @Toro_Unit Facebook: fb.me/torounit Blog: https://torounit.com 38