web-dev-qa-db-fra.com

Rendre le plugin de devis plus efficace

J'ai travaillé sur ce plugin ces dernières nuits et j'ai noté comment l'améliorer.

Ma connaissance du php n'est pas la plus solide et j'apprends la plupart du temps.

Des questions:

  1. Existe-t-il des moyens plus efficaces de valider les citations à l’aide de l’API wordpress?
  2. Quelles étapes dois-je suivre pour afficher le devis via un shortcode?
  3. Quel serait le meilleur moyen de supprimer les citations sélectionnées?

l’idée de développer davantage serait de passer la citation dans un shortcode et de l’afficher sur un site Web via le shortcode. * /

        /*
        Plugin Name: Random Quotes
        Plugin URI: xxx
        Description: This Plugin randomly generates Quotes input by the user.
        Version: 0.0.3
        Author: xxx
        Author URI: xxx
        License: GPL2
        */

        /*
        Function Reference 
        array_Rand($array) - Randomises an array can be used with shuffle().
        ucfirst($string) - replaces the first character of the string as uppercase.
        substr($string, $start, int $length) - Returns the portion of string specified by the start and length parameters.
        strtolower($string) - converts all characters in the string to lowercase.


        */

        // call the functions
        add_action('admin_menu', 'dw_quotes_create_menu');
        add_action('init', 'validate_dw_quote');
        add_action('init', 'dw_get_random_quote'); 
        add_action('init', 'grammer_dw_quote'); 

        function dw_quotes_create_menu() {
        //create custom top-level menu
            add_menu_page('Quotes Settings', 'Quotes Styling', 'manage_options', 'dw_quotes', 'dw_styling_quotes_settings');
        }

        //generating the random quote
        function dw_get_random_quote() {
        //call the quote from the database
            $quote = get_option('list_of_quotes');

        //randomise the quote
            $random_quote = array_Rand($quote);

        //call a value and add it to $output
            $output = $quote[$random_quote];

        //return the result
            return $output;
        }

        function grammer_dw_quote() {
        //call the quote from the previous func
            $grammer = dw_get_random_quote();

        //add a capital letter to the first letter - make the rest lowercase
            ucfirst(strtolower($grammer));

        //if the last character is not a period then append one to the string
            if(substr($grammer, -1) != '.') {
                $grammer.= '.';
            }
        //return the result
            return $grammer;
        }

        function validate_dw_quote() {
        //validation here
            if (isset($_POST['submit'] ) ) {

        //checking that $_POST['adding_quote'] is set
                if( isset( $_POST['adding_quote'] ) ) {

        //retrieve the stored values
                    if( get_option( 'list_of_quotes' ) )
                        $list_of_quotes = get_option('list_of_quotes');
                    else 
                        $list_of_quotes = array();

        //add the new quote to the end of the array 
                    $list_of_quotes[] = $_POST['adding_quote'];

        //store the updated quote
                    if ( update_option( 'list_of_quotes', $list_of_quotes ) ) {
                        echo "<p>Success your quote was added!</p>"; 
                    } else {
                        echo "<p>Failed to add quote!</p>";
                    } 
                }   

            }
        }

        //styling the admin menu
        function dw_styling_quotes_settings() { ?>
        <h2>Quote Setting</h2>

        <form action="admin.php?page=dw_quotes" method="post">
            <label for="add">Enter your quote</label>
            <input type="textarea"  name="adding_quote" />
            <input type="submit" name="submit" value="add the new quote" />

        <?php //test the output 
        //var_dump($list_of_quotes);
        ?>
        <h2>Current Quote displayed</h2>
        <label for="display"> <?php echo grammer_dw_quote(); ?></label>

        <?php } ?>
1
Dannyw24

Existe-t-il des moyens plus efficaces de valider les citations à l’aide de l’API WordPress?

  1. Je pense que vous devriez définir un nonce pour le formulaire
  2. Vous devez également vérifier si l’utilisateur actuel est capable de sauvegarder les devis.
  3. Pour obtenir une bonne désinfection des valeurs dans $_POST, regardez filter_input et/ou filter_input_array

Je ne vois pas de problèmes de performances sur la validation , mais un problème de performances possible est de sauvegarder toutes les citations dans un grand tableau sérialisé dans une seule option: si vous avez beaucoup de citations, devez extraire de db une très grosse chaîne sérialisée (remplissez donc une grande quantité de mémoire), désérialisez-la (la sérialisation/désérialisation sur de grandes chaînes peut être lente) et tout cela pour afficher une petite partie (un guillemet).

Une amélioration des performances peut être stockée citations séparément.

Quelles étapes dois-je suivre pour afficher le devis via un shortcode?

Ajouter un shortcode est très simple (c'est peut-être la raison pour laquelle certains développeurs l'utilisent de manière excessive), voir add_shortcode doumentation .

Si votre grammer_dw_quote() souhaite return le texte du devis au lieu de echo il, alors la ligne unique

add_shortcode( 'dw_quote', 'grammer_dw_quote' ); 

serait suffisant pour ajouter un shortcode [dw_quote] qui imprime une citation aléatoire.

Quel serait le meilleur moyen de supprimer les citations sélectionnées?

En utilisant votre méthode: enregistrez toutes les citations ensemble, il est difficile de localiser une citation spécifique et de la supprimer ... vous devez définir une sorte d'id de citation, par exemple. où tu as

$list_of_quotes[] = $_POST['adding_quote'];

vous devriez probablement avoir

$list_of_quotes[$a_unique_id] = $_POST['adding_quote'];

De cette manière, il serait simple d’obtenir un devis spécifique et de le supprimer, c’est-à-dire unset du tableau quotes, puis de le sauvegarder à nouveau. Ce que cet identifiant unique devrait être est à vous.

Cependant, maintenant que j'ai répondu à votre question, je veux vous faire une suggestion.

Si vous créez un type d'article personnalisé pour les guillemets , vous résolvez à peu près tous vos problèmes:

  • L'élément de menu et le formulaire sont tous deux créés par WordPress
  • La gestion des identifiants uniques est effectuée par WordPress, à l’instar de l’interface utilisateur permettant de créer, répertorier, supprimer, supprimer, supprimer, supprimer, supprimer, programmer ...
  • La validation, la désinfection, la vérification des capacités et tous les autres problèmes de sécurité sont effectués par WordPress
  • récupérer une publication aléatoire (shortcode ou non) ou la liste complète de shortcode peut être effectuée à l'aide des fonctions principales

En écrivant moins de code, vous pouvez avoir beaucoup de fonctionnalités qui peuvent être difficiles à implémenter par vous-même, et qui n’ont probablement aucun sens.

Vous pouvez faire une idée en regardant la première partie de cette réponse . Là, le CPT est pour "blagues", vous avez des "citations", mais il n'y a pas beaucoup de différence.

4
gmazzap