Använda en WordPress-krok för uppdateringsalternativ
Att uppdatera alternativ inom WordPress-admin är enkelt, eller hur? Det handlar om att fylla i ett textfält, markera en ruta eller byta en alternativknapp och sedan klicka på spara.
Men låt oss säga att du måste ställa in en krok som avfyras som också uppdaterar ett sekundärt, relaterat alternativ när en växlas.
Till exempel, givet ett alternativ som representeras av en kryssruta, låt oss säga att du vill ställa in ett alternativ i databasen när kryssrutan är avmarkerad och sedan ta bort den när alternativet är inställt.
Det finns en åtgärd specifikt för att göra detta som gör det ganska enkelt.
En krok för uppdateringsalternativ
Innan du går in i någon kod för hur man gör detta, säg att den givna update_optionen har utlösts. När du är klar måste du ställa in en återuppringning som aktiveras när alternativet är inställt.
Utöver det finns följande överväganden:
- Har alternativet i fråga ändrats?
- Om så är fallet, var alternativet satt (förutsatt att det var en kryssruta)?
- Om inte, har du en plan för hur du ska hantera det ärendet?
Förutsatt att allt ovanstående har listats ut, behöver du en funktion för att definiera åtgärden och en funktion som implementerar återuppringningen. I mitt exempel kommer jag att använda objektorienterad programmering, men det kan göras lika bra i procedurprogrammering.
I mitt exempel kommer jag att använda objektorienterad programmering, men det kan göras lika bra i procedurprogrammering.
Ett exempel
Säg att du har ett alternativ som heter user_is_disguised och att du har ett annat värde i databasen som heter user_is_superman.
Närhelst user_is_disguised är inställt på ännu, bör user_is_superman ställas in på false. Och sedan när user_is_disguised är inställt på false, bör user_is_superman ställas in på sant.
I slutändan växlar värdena. Här är ett exempel på hur man gör. Först måste vi ställa in kroken :
<?php
/**
* Initializes the defined actions.
*/
public function init() {
add_action(
'update_option',
array( $this, 'toggle_other_option' ),
10, 3
);
}
Sedan måste vi implementera funktionen för att byta värden:
<?php
/**
* If the given option_name is `user_is_disguised`, then toggles another option
* in the database - `user_is_superman` - based on the specified values.
*
* @param string $option_name The name of the value being updated.
* @param mixed $old_value The previous value of the option before updating it.
* @param mixed $new_value The value of the option now that it's been updated.
*/
public function toggle_other_option( $option_name, $old_value, $new_value) {
// If 'user_is_disguised' is not being changed, then don't worry about it.
if (0 !== strcasecmp( $option_name, 'user_is_disguised')) {
return;
}
/* If 'user_is_disguised' is being set, then remove the Superman value; otherwise,
* set it to true (but don't worry about autoloading it).
*/
if ('1' === $new_value) {
delete_option( 'user_is_superman' );
} else {
update_option( 'user_is_superman', true, false );
}
}
Och det borde ta hand om det.
En anteckning om argument
Observera att återuppringningen accepterar tre argument (som också definieras i dokumentationen som länkas ovan). Dessa är användbara i andra, mindre konstruerade implementeringar.
Men kanske en av de viktigaste sakerna att ta bort från koden ovan är att du kontrollerar alternativnamnet i återuppringningen innan du växlar några värden.