
ãã©ã°ã€ã³ã«ãã£ãŠãµã€ãæ§é ã«å°å
¥ãããæçš¿ã®ç¹å®ã®ããããã£ã¯ãã¡ã¿ããã¯ã¹ã䜿çšããŠèšå®ãããŸãã ãããã¯ãå¿
èŠãªãã¹ãŠã®èšå®ãå«ãããã«ã§ãã ãããã¯ç·šéç»é¢ã«ãããŸãã
æ°ããããããã£ã®å Žåãã¡ã¿ããã¯ã¹ãªãã§ã¯ã§ããŸãã
*ã»ãšãã©ã®æçš¿ã«é¢äžã
*å³å¯ãªå¶éãããïŒäŸïŒç¹å®ã®åœ¢åŒã®çªå·ïŒ;
*æååã®åœ¢åŒã§å
¥åããããšã¯å°é£ãŸãã¯äžäŸ¿ã§ãïŒããšãã°ããªã¹ãã®å€ïŒã
*ã¯çžäºã«æ¥ç¶ãããŠããã1ã€ã§ãã
ããããã£ãæååãšããŠè¡šç€ºã§ããå°æ°ã®æçš¿ã«åœ±é¿ããå³å¯ãªåœ¢åŒå¶éããªãå Žåã¯ãæçš¿ã®ç·šéããŒãžã§ã«ã¹ã¿ã ãã£ãŒã«ãã¡ã¿ããã¯ã¹ã䜿çšã§ããŸãã
ãã¬ãã
å®éšç®çã®ããã«ã1ã€ã®ã¹ã¯ãªããã§æ§æãããæãåçŽãªãã©ã°ã€ã³ãäœæããŸãã metatest.phpãšåŒã³ãwp-contentã«çŽæ¥é
眮ããŸãã
ãã©ã°ã€ã³ãã¢ã¯ãã£ãã«ããåŸããã¹ãç·šéããŒãžã«ã¡ã¿ããã¯ã¹ã衚瀺ããããã«æäœéå¿
èŠãªã®ã¯æ¬¡ã®ãšããã§ãã
<?php add_action('add_meta_boxes', 'metatest_init'); function metatest_init() { add_meta_box('metatest', 'MetaTest- ', 'metatest_showup', 'post', 'side', 'default'); } function metatest_showup() { echo '<p> </p>'; } ?>
ç¬èªã®ã¡ã¿ããã¯ã¹ãäœæããå¿
èŠããããšãã«ãadd_meta_boxesããã¯ãã¢ã¯ãã£ãã«ãªããŸãã metatest_inité¢æ°ãè¿œå ããæçš¿ç·šéç»é¢ã®ãµã€ãããã«ã«ãMetaTest-post parametersãããã¯ã¹ãäœæããŸããã ãã®å
容ã¯ãmetatest_showupé¢æ°ã«ãã£ãŠåœ¢æãããŸãã çµæã¯ãããµã ãã€ã«èšé²ãããã¯ã¹ãšãã¿ã°ãããã¯ã¹ã®éã«ãããŸãã

ããã§ã®ãã¹ãŠã®äœæ¥ã¯ãadd_meta_boxé¢æ°ã«ãã£ãŠè¡ãããŸãã ãã®å®çŸ©ã¯æ¬¡ã®ããã«ãªããŸãã
function add_meta_box( $id, $title, $callback, $screen = null, $context = 'advanced', $priority = 'default', $callback_args = null) ...
å€èŠ³ãšå
容ã¯ãæåã®3ã€ã®åŒæ°ã§æå®ãããŸãïŒ$ id-ã¡ã¿ããã¯ã¹èå¥åã$ title-ã¿ã€ãã«ã$ callback-ã¡ã¿ããã¯ã¹ã®å
容ãè¿ãé¢æ°ã
ç»é¢ã圢æãããšããã¡ã¿ããã¯ã¹ãå«ãã»ã¯ã·ã§ã³ã«èå¥å$ idãäžããããŸãã ããã¯ã¹è¡šç€ºãå®çŸ©ããç»é¢èšå®ã«ãããã§ãã¯ããã¯ã¹ã®èå¥åã¯ãã{$ id} -hideããšããŠåœ¢æãããŸãã

ããã¯ãã¹ã¿ã€ã«ãèšå®ãããšãããŸãã¯ã¹ã¯ãªããã§äœ¿çšãããšãã«åœ¹ç«ã¡ãŸãã
ä»ã®ãã¹ãŠã®åŒæ°ã¯ãªãã·ã§ã³ã§ãã
次ã®3ã€ãå Žæã決å®ããŸãã
å®éã$ screenåŒæ°ã®å€ã¯ãç·šéããŒãžãæå³ãããŠããæçš¿ã®ã¿ã€ãã§ãã WordPressãå
ã
ææããŠããæšæºçãªãã®ã®ãã¡ããããã¯ãæçš¿ãïŒæçš¿ïŒããããŒãžãïŒããŒãžïŒãããã³ãæ·»ä»ãïŒã¡ãã£ã¢ããã³ãã®ä»ã®æ·»ä»ïŒã§ãã å€ãèšå®ãããŠããªãïŒãŸãã¯nullã«çããïŒå Žåãç·šéäžã®æçš¿ã®ã¿ã€ãã«é¢ä¿ãªããã¡ã¿ããã¯ã¹ã¯ãã¹ãŠã®ç»é¢ã«è¡šç€ºãããŸãã
$ã³ã³ããã¹ãã§æå®ãããäœçœ®ã¯ã次ã®ããããã§ãããnormalã-ã¡ã€ã³ã®ç·šéèŠçŽ -äžå€®ã®åã®äžéšã 'advanced'-è¿œå ã®èŠçŽ -äžå€®ã®æ±ã®äžéšã 'side'-ãµã€ãããã«ãç»é¢ã«ã¯2åãããŸãã æåã§å€æŽããåŸãWordPressã¯ã¡ã¿ããã¯ã¹ã®äœçœ®ãèšæ¶ããadd_meta_boxã§æå®ãããããã©ã«ããç¡èŠããŸãã ãããã£ãŠãé
眮ã«æ
£ããããã«ãç°ãªãã³ã³ããã¹ãã§åãããã¯ã¹ãããã«3ã€è¿œå ã§ããŸãã
foreach (array('normal', 'advanced', 'side') as $context) add_meta_box('metatest_' . $context, 'MetaTest ' . $context, 'metatest_meta_box_showup', 'post', $context, 'default');
$ priorityåŒæ°ã¯ãããã«é
眮ã®åªå
é äœãä»ã®ãã®ãããèšå®ããŸãã åªå
床ãé«ãã»ã©ãããã«ãæ©ãæç»ãããŸãã åªå
é äœã®å¯èœãªå€ãéé ïŒãé«ãããã³ã¢ãããããã©ã«ããããäœãã
$ callback_argsã§ã¯ã$ã³ãŒã«ããã¯é¢æ°ã«ä»»æã®ãã©ã¡ãŒã¿ãŒãæž¡ãããŸãã ç·šéå¯èœãªæçš¿ïŒWP_Postã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ïŒãšã¡ã¿ããã¯ã¹æ
å ±ã®2ã€ã®åŒæ°ãåããŸãã æ
å ±ã¯ãåŒæ°add_meta_boxãšã»ãŒåãããŒãæã€é
åã«å«ãŸããŠããŸãïŒ 'id'ã 'title'ã 'callback'ãããã³ 'args'ã $ callback_argsã®å€ã¯ãargsãã«é
眮ãããŸãã
function showup_fn($post, $box) { $args = $box['args']; ... }
è€æ°ã®åŒæ°ãé
åãšããŠæž¡ãããšãã§ããŸã
array('var0' => $var0, 'var1' => $var1, ...)
é¢æ°åŒã®å
éš
extract($box['args']);
$ varNå€æ°ãçŸåšã®ã¹ã³ãŒãã«é
眮ããŸãã
ã¡ã¿ããŒã¿
ã¡ã¿ããã¯ã¹ã®äž»ãªã¿ã¹ã¯ã®1ã€ã¯ãæçš¿é¢é£ããŒã¿ã®ç·šéã§ãã ãã«ã¹ã¿ã ãã£ãŒã«ããããã«ãåæ§ã®ã¿ã¹ã¯ãå®è¡ããŸãããååãã¢ã³ããŒã¹ã³ã¢ã§å§ãŸããã£ãŒã«ãã¯ç¡èŠããŸãã å¶åŸ¡ãããŠããªãå€æŽããããŒã¿ãä¿è·ããã«ã¯ããããèŠããŠããå¿
èŠããããŸãã
å
¥åãã£ãŒã«ãã®åœ¢æãšå©çšå¯èœãªå€ïŒãŸãã¯ããã©ã«ãå€ïŒã®åºåã¯ãã¡ã¿ããã¯ã¹æç»æ©èœã«å²ãåœãŠãããŸãã ããŒã¿ããŒã¹ããæ
å ±ãæœåºãããå
¥åãã£ãŒã«ãã«é
眮ãããŸãã
function metatest_showup($post, $box) {
çŸæç¹ã§ã¯ãå¿
èŠãªã¡ã¿ããŒã¿ã¯ããŒã¿ããŒã¹ã«å«ãŸããŠããããå
¥åãã£ãŒã«ãã¯ç©ºã§ãã èšå
¥ããŠããŸã äœãåŸãããŸããã ä¿åã¯å®è£
ãããŠããããWordPressã¯ãã£ãŒã«ãã«å¿çããŸããã
ä¿åæ©èœ
ç·šéããæ
å ±ã¯ããä¿åããŸãã¯ãå
¬é/æŽæ°ããã¿ã³ãæŒããŠãŠãŒã¶ãŒããååŸããŸãã ãããåä¿¡ãããšãWordPressã¯save_postããã¯ãã¢ã¯ãã£ãã«ããŸãã ã¡ã¿ããŒã¿ã確èªããŠããŒã¿ããŒã¹ã«æžã蟌ãé¢æ°ãæ·»ä»ããå¿
èŠããããŸãã
add_action('save_post', 'metatest_save'); function metatest_save($postID) { ... }
é¢æ°ã®æåã®ïŒãã®å Žåã¯å¯äžã®ïŒåŒæ°ã¯ãä¿åãããæçš¿ã®èå¥åã§ãã ä¿åãããæçš¿èªäœã¯ãget_postïŒ$ postIDïŒãåŒã³åºããã2çªç®ã®åŒæ°ã§ååŸã§ããŸãã
function metatest_save($postID, $post) ...
ãã®å Žåãåãå
¥ããããåŒæ°ã®æ°ã¯ã4çªç®ã®add_actionãã©ã¡ãŒã¿ãŒã§æ瀺çã«èšå®ããå¿
èŠããããŸãã
add_action('save_post', 'metatest_save', 10, 2);
æåŸãã2çªç®ã®ãã©ã¡ãŒã¿ãŒãšããŠ-é¢æ°ã®å®è¡ã®åªå
é äœãšããŠ-ããã©ã«ãå€ïŒwp-includes / plugin.phpããïŒãååŸãããŸãã
'save_post'ã¢ã¯ã·ã§ã³ã¯2ã€ã®åŒæ°ã§å®è¡ãããŸãïŒæçš¿èå¥åãšãWP_Postã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãšããŠã®æçš¿èªäœã§ãã ãããã£ãŠãããå€ãã®è°è«ã§ã¯æå³ããããŸããã
metatest_saveé¢æ°ã¯ããã©ã°ã€ã³ã®ä»ã®é¢æ°ãããå°ãè€éã§ãã 圌女ã®èšç»ã¯æ¬¡ã®ããã«ãªããŸãã
*ã¡ã¿ããã¯ã¹ããã®æ
å ±ã®å¯çšæ§ã確èªããŠãã ããã
*åãå
¥ããŠããæçš¿ã確èªããŠãã ããã
*ãœãŒã¹ã®ä¿¡é Œæ§ã確èªããŠãã ããã
*ããŒã¿ã®æ£ç¢ºæ§ãå¶åŸ¡ããæœåšçã«å±éºãªã·ãŒã±ã³ã¹ãæé€ããŸãã
*æåŸã«ãã¯ãªãŒã³ãªæ
å ±ãããŒã¿ããŒã¹ã«ä¿åããŸãã
ãã§ãã¯
ãŠãŒã¶ãŒãéä¿¡ãããã¹ãŠã®æ
å ±ã¯ãã°ããŒãã«ãª$ _POSTé
åã«ãããŸãã ãã ããããŸããŸãªçç±ã§ã¡ã¿ããŒã¿ã®ãã£ãŒã«ããããã§ãªãå ŽåããããŸããèªåä¿åæãç°ãªãã¿ã€ãã®æçš¿ã®ä¿åæãç·šéç»é¢ã®åœ¢æäžã«ç©ºã®æçš¿ãäœæããæãªã©ã§ãã ãã®ååšã®ãã¹ãã¯éåžžã«ç°¡åã§ãïŒ
if (!isset($_POST['metadata_field'])) return;
ãã£ãŒã«ãããªãå Žåã¯ãçµäºããŸãã
ã¿ãŒã²ããæçš¿ã«é¢é£ããéèŠãªãã€ã³ããããã€ããããŸãã
æåã®ç¬é-æ¹èšã æçš¿ã®æ°ãããªããžã§ã³ã¯ããããã以åã®å
容ããªããžã§ã³ïŒåã®å€æŽäžå¯èœãªæçš¿ïŒã«çœ®ãæããŸãã ãã®å Žåãå¥ã® 'save_post'ãã¢ã¯ãã£ãã«ãªãããã§ã«ãªããžã§ã³èå¥åã䜿çšãããŠããŸãã ãããã£ãŠãmetatest_saveé¢æ°ã¯2ååŒã³åºãããåŒã³åºãã®å¯äžã®éãã¯$ postIDã®å€ã§ãã
ã¡ã¿ããŒã¿ã®ææè
ã¯æçš¿ã§ãã ãããã£ãŠããªããžã§ã³ã®ä¿åã¯ç¡èŠããå¿
èŠããããŸãã
if (wp_is_post_revision($postID)) return;
åŒæ°ã§æž¡ãããèå¥åããªããžã§ã³ã«å±ããå Žåãwp_is_post_revisioné¢æ°ã¯trueãè¿ããŸãã
2çªç®ã®ãã€ã³ãã¯èªåä¿åã§ãã ããã©ã«ãã§ã¯ãæçš¿ã®ç·šéæã«å®æçã«çºçããŸã-2åããšã ãã®å Žåã®æ
å ±ã¯äžå®å
šã§ã-æçš¿ã®ããã¹ãã«é¢ããæ
å ±ã®ã¿ã§ãã éåžžããã®å Žåã$ _POSTå
ã®ããŒã¿ã®ååšã確èªããã ãã§ååã§ãã ããããå°æ¥ã®ããŒãžã§ã³ïŒ3.6以éïŒã§ã¯ã¡ã¿ããŒã¿ã®æææš©ã¯æ¹èšãããããšãçŽæãããŠãããWordPressã®åäœã¯ãã©ã°ã€ã³ã«å€§ããäŸåããŠãããããèªåä¿åãã§ãã¯ã¯ç¡èŠãããã¹ãã§ã¯ãããŸããã
æçš¿çšã«äœæãããèªåä¿åã¯ãæ¹èšã®äžçš®ã§ãã ãã®èå¥åã«å¿ããŠãwp_is_post_revisioné¢æ°ãtrueãè¿ããŸãã ããããèœãšãç©ŽããããŸãïŒäžæžããèªåä¿åãããšãsave_postããã¯ãæçš¿èªäœã®èå¥åã§ã¢ã¯ãã£ãã«ãªãããã®é¢æ°ã¯æ©èœããŸããã
ç¹æ®ãªwp_is_post_autosaveã«ã€ããŠãåãããšãèšããŸããæçš¿ãæ¢ã«èªåä¿åãããŠããå Žåã«ã®ã¿æ©èœããŸãã
if (wp_is_post_autosave($postID)) {
ãã®å Žåãwp_ajax_autosaveé¢æ°ã«ãã£ãŠtrueã«èšå®ãããå®æ°DOING_AUTOSAVEã«äŸåããå¿
èŠããããŸããwp_ajax_autosaveé¢æ°ã¯ãèªåä¿åãããããŒã¿ãåä¿¡ãããšãã«ãµãŒããŒã«ãã£ãŠåŒã³åºãããŸãã ïŒwp_ajax_autosaveé¢æ°ã¯wp-adminã«ãããincludes / ajax-actions.phpïŒã 察å¿ããã³ãŒãã¯ãããšãã°æ¬¡ã®ããã«ãªããŸãã
if (exists('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
çºçããèªåä¿åã¯ã$ _POST ['action'] == 'autosave'ã®å€ã«ãã£ãŠã決å®ã§ããŸãã
ãœãŒã¹èªèšŒã¯ãå
¥åãã£ãŒã«ããžã®ãã©ãŒã ã«åã蟌ãŸããã¯ã³ã¿ã€ã ã³ãŒãã«åºã¥ããŠããŸãã CSRFãªã©ã®æ»æãããµã€ããä¿è·ããã®ã«åœ¹ç«ã¡ãŸãã ãã®ãããªæ»æã§ã¯ãèš±å¯ããããŠãŒã¶ãŒã®ãã©ãŠã¶ãæ»æè
ã®ã³ãŒããå®è¡ãããã®ãŠãŒã¶ãŒã®æš©éã§ã¢ã¯ã·ã§ã³ãå®è¡ããŸãã ãã®å Žåãã¡ã¿ããŒã¿ã®åºæå€ãèšå®ããŸãã
ã€ã³ã¹ããŒã«ã¯ãã¡ã¿ããã¯ã¹ã®ããã£åœ¢æã³ãŒãã«é
眮ããå¿
èŠããããŸãã
wp_nonce_field("metatest_action", "metatest_nonce"); : check_admin_referer("metatest_action", "metatest_nonce");
æ£ç¢ºæ§ç®¡ç
ã¿ãŒã²ãããã¹ãã§äœæ¥ãããšããå¿
èŠãªãã£ãŒã«ããããããœãŒã¹ã®ä¿¡é Œæ§ã«èªä¿¡ãããã®ã§ãåŠçã«é²ãããšãã§ããŸãã
ãŸããä¿åãããã¡ã¿ããŒã¿ã®æ£ç¢ºæ§ã確èªããå¿
èŠããããŸãã 次ã®2ã€ã®æ¡ä»¶ãæºããå¿
èŠããããŸãã
1ïŒããŒã¿ã¯åãå
¥ãå¯èœã§ãã
2ïŒããŒã¿ã¯å®å
šã§ãã
åãå
¥ãåºæºã¯ã解決ãããåé¡ã«å®å
šã«äŸåããŸã-転éã®èš±å®¹å€ãããã¹ãã«åproããªãããšãªã©
ã»ãã¥ãªãã£é¢æ°update_post_metaã¯ãããŒã¿ããŒã¹ã«é¢é£ããã¡ã¿ããŒã¿ã®ã»ãã¥ãªãã£ã管çããŸãã
ãµã€ããšãŠãŒã¶ãŒã«é¢é£ããŠãããŒã¿ã»ãã¥ãªãã£ã¯ã¢ããªã±ãŒã·ã§ã³ã®æ¹æ³ã«ãã£ãŠæ±ºå®ãããŸãã å¶åŸ¡ãããŠããªãHTMLã³ãŒãã解éãããä»»æã®JavaScriptãæªæã®ããURLã®æãç©Žãªã©ããªãããã«ããŠãã ããã
ãã®å Žåãã¡ã¿ããŒã¿ã¯æååã§ãã ãããã£ãŠãäžå¿
èŠãªã¹ããŒã¹ããã€ãããŒã·ã§ã³ãããã³èª€ã£ãUnicodeæåãã圌女ãæãããšã¯çã«ããªã£ãŠããŸãã ãããã®ç®çã®ããã«ãåŒæ°æååã®ä¿®æ£ããŒãžã§ã³ãè¿ãsanitize_text_fieldé¢æ°ã䜿çšãããŸãã
$string = sanitize_text_field($string);
ä¿åäž
ããŒã¿ã®èšé²-æ©èœã®ç®ç-ã¯1åã®åŒã³åºãã§è¡ãããŸãã
update_post_meta($postID, '_metatest_data', $string);
ãã£ãŒã«ãåãå§ãŸãã¢ã³ããŒã¹ã³ã¢ã«æ³šæããŠãã ããã ä»»æã®ãã£ãŒã«ãããã«ãããã£ãŒã«ãã«ã¢ã¯ã»ã¹ã§ããªããªããŸãã
ãŸãšã
ããã§ãå®éã«æ瀺ãããçè«å
šäœãé©çšããŸãã ãã©ã°ã€ã³ããããŒã¯åãããã«èŠããŸãããä¿åæ©èœã®ç»é²ã®ã¿ãè¿œå ãããŸãã
<?php
ã¡ã¿ããã¯ã¹æç»é¢æ°ã¯ã1åéãã®ã³ãŒãã®åœ¢æã§è£å
ããã次ã®ããã«ãªããŸããã
function metatest_showup($post, $box) {
次ã«ãããŒã¿ã¹ãã¬ãŒãžæ©èœã瀺ããŸãã
function metatest_save($postID) {
ãHelloãworldïŒããšããè¡ãä¿åããããŒãžãæŽæ°ãããšãçµæã¯æ¬¡ã®ããã«ãªããŸãã

ã芧ã®ãšãããæãåçŽãªã¡ã¿ããã¯ã¹ã¯ç°¡åã«äœæã§ããŸãã ãadd_meta_boxããšãsave_postãã®2ã€ã®ããã¯ã«äŸåãããã©ãŒã æ¬äœã®åºåãšããŒã¿ã®ä¿åãšãã2ã€ã®æ©èœã§æ§æãããŠããŸãã
ããããããã¯åºçºç¹ã«ãããŸããã å®éã«ã¯ãããå€ãã®ãã£ãŒã«ããããããã©ãŒã ã¯ããè€éã§ãããŒã¿ã¯çžäºã«æ¥ç¶ããããã©ã°ã€ã³ããã³ããŒãã³ã³ããŒãã³ãã®æ©èœãšæ¥ç¶ãããŠããŸãã ãããã£ãŠã解決ããã¿ã¹ã¯ã®è€éãããã¡ã¿ããã¯ã¹ã®å
å¡«ãå¶éãããŸããã