web-dev-qa-db-fra.com

Personnaliser le plugin

J'essaie de créer un panneau d'accueil personnalisé dans le tableau de bord pour WP et je ne vois pas où je me suis trompé. Cela ne me permet pas d'ajouter du HTML.

1
Jessica

Votre update_option devrait figurer dans un rappel automatique et devrait vérifier si $_POST['custom_welcome_panel'] est défini avant d'essayer de mettre à jour l'option. Sinon, votre option pourrait être écrasée à chaque chargement de la page. Et, honnêtement, comme écrit, je pouvais insérer tout ce que je voulais dans cette valeur d'option. Il me suffirait d'envoyer une demande POST au site. C'est très dangereux.

Déplacez votre update_option dans votre fonction, vérifiez qu'il est défini et non vide avant d'essayer de l'utiliser, et le traitez comme un contenu de publication , au moins.

function custom_welcome_panel() {
    // register the setting
    if (!empty($_POST['custom_welcome_panel'])) {
        $option = wp_kses_post( $_POST['custom_welcome_panel'] );
        update_option('custom_welcome_panel', $option);
    }

    $customwelcome_panel = html_entity_decode(get_option( 'custom_welcome_panel' ));
    // the rest of your code

Vous devriez également utiliser des nonces.

Il semble que vous puissiez pirater un fichier core (options.php), ce qui est une très mauvaise idée si elle est vraie. Si tel est le cas, ce hack sera écrasé à la prochaine mise à jour de WordPress et votre code cessera de fonctionner.

J'ai essayé ça ...

update_option('html_test', '<p><a href="yay">Does HTML WOrK?</a></p>');

... et le html est bien inséré et il ressort très bien. J'ai donc jeté un coup d'œil au jQuery.

Le problème est ici:

jQuery("#welcome-panel").html("'.$customwelcome_panel.'")

Imaginez ce qui se passe avec le contenu de mon code HTML:

jQuery("#welcome-panel").html("<p><a href="yay">Does HTML WOrK?</a></p>")

Notez que vous avez maintenant deux ensembles de ". Les guillemets s'ouvrent avant le <p> puis se ferment après le href= et s'ouvrent de nouveau après le yay. Le problème est qu'il y a des caractères parasites entre les deux. Ce qui suit fonctionne uniquement si votre marquage est cohérent et utilise toujours les attributs "s.

jQuery("#welcome-panel").html(\''.$customwelcome_panel.'\').delay(300).fadeTo(\'slow\', 1);

Utiliser addslashes serait plus robuste:

jQuery("#welcome-panel").html("'.addslashes($customwelcome_panel).'").delay(300).fadeTo(\'slow\', 1);

Je ne sais pas à quel point cela va être fiable. Je n'ai passé que cinq minutes à le tester.

Mettez cela ensemble et je pense que cela devrait fonctionner. Je ne suis pas responsable de la sécurité de votre projet ni de la robustesse de la solution. Je pirate cela ensemble à partir d'informations à peine suffisantes, mais ce sont des choses assez basiques.

Référence

http://codex.wordpress.org/Data_Validation

2
s_ha_dum