web-dev-qa-db-ja.com

見積もりプラグインをより効率的にする

私は過去数日間このプラグインに取り組んできましたし、それを改善する方法のアイデアを書き留めてきました。

私のphpに関する知識は最強ではなく、私はほとんどの時間を進むにつれて学んでいます。

質問:

  1. ワードプレスのAPIを使用して引用符を検証するためのより効率的な方法はありますか?
  2. ショートコードで見積もりを表示するためにどのような手順を踏みますか?
  3. 選択した見積を削除するための最善の方法は何ですか?

さらに発展させるためのアイデアは、ショートコードに引用符を渡し、ショートコードを介してWebサイトに表示することです。

        /*
        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

WordPressのAPIを使用して引用符を検証するためのより効率的な方法はありますか?

  1. フォームには ナンス を設定する必要があると思います
  2. 現在のユーザーに見積もりを保存する機能があるかどうかも確認する必要があります
  3. $_POSTの形式で正しくサニタイズするには、 filter_input および/または filter_input_array を参照してください。

validationではパフォーマンス上の問題は見られませんが、パフォーマンス上の問題として、1つの大きな直列化された配列にすべての引用符を保存することが考えられます。それから、dbから非常に大きなシリアライズされた文字列を取り出して(大量のメモリを埋める)、それをアンシリアライズ(大きな文字列でのシリアライゼーション/アンシリアライゼーションは時間がかかる場合があります)) 。

パフォーマンスの向上は別々に見積もりを保存することができます。

ショートコードで見積もりを表示するためにどのような手順を踏みますか?

ショートコードを追加するのは非常に簡単です(たぶんこれが何人かの開発者がそれを使い過ぎる理由です)、 add_shortcode doumentation を見てください。

あなたのgrammer_dw_quote()returnではなく引用文をechoにしているのであれば、単一行

add_shortcode( 'dw_quote', 'grammer_dw_quote' ); 

ランダムな引用符を表示する[dw_quote]ショートコードを追加するのに十分でしょう。

選択した見積を削除するための最善の方法は何ですか?

あなたの方法を使用する:locate特定の見積もりを難しくしてそれを削除するよりも、すべての見積もりをまとめて保存します。あなたがいるところ

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

あなたはおそらく持っているべきです

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

このようにすると、特定の見積もりを取得して削除することができます。つまり、quotes配列からunsetと入力してから、もう一度保存します。このユニークなIDが何であるべきかはあなた次第です。

しかし、私はあなたに質問に答えたので、私はあなたに提案をしたいです。

あなたが引用符のための カスタム投稿タイプを作成するなら あなたはほとんどすべてのあなたの問題を解決します:

  • メニュー項目とフォームは両方ともWordPressによって作成されます
  • ユニークなID処理は、作成、一覧表示、削除、ごみ箱、捨てない、スケジュール作成のためのUIと同じように、WordPressによって行われます。
  • バリデーション、サニタイズ、機能チェック、その他すべてのセキュリティはWordPressによって行われます。
  • ランダムな投稿(ショートコード用かどうかに関係なく)を取得するか、またはショートコードの完全なリストをコア機能を使用して実行できます。

より少ないコードを書くことはあなた自身で実装するのに苦労することができる多くの機能を持つことができ、そしておそらく意味をなさない。

この答えの最初の部分 を見て考えることができます 。そこにCPTが「ジョーク」のためである、あなたは「引用符」を持っています、しかしそれほど違いはありません。

4
gmazzap