提高报价插件的效率

时间:2014-04-15 作者:Dannyw24

过去几天晚上,我一直在开发这个插件,并记下了如何改进它的想法。

我对php的知识不是最渊博的,大部分时间我都在学习。

问题:

是否有更有效的方法使用wordpress api验证报价进一步开发的想法是将报价传递到一个短代码中,并通过该短代码显示在网站上*/

        /*
        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 个回复
最合适的回答,由SO网友:gmazzap 整理而成

是否有更有效的方法使用WordPress api验证报价?

我想你应该nonce 对于表单,您还应该检查当前用户是否有能力保存quote以正确清理表单中的值$_POST 看看filter_input 和/或filter_input_array我没有看到验证的性能问题,但一个可能的性能问题是将所有引号保存在一个大的序列化数组中,保存在一个选项中:如果有很多引号,那么必须从db中提取一个非常大的序列化字符串(因此需要填充大量内存),取消序列化(大字符串上的序列化/取消序列化可能会很慢),所有这些都只是为了显示一小部分(一个引号)。

性能改进可以单独存储报价。

我将采取什么步骤通过短代码显示报价?

Add shortcode非常简单(也许这就是一些开发人员过度使用它的原因),请参见add_shortcode doumentation.

如果您的grammer_dw_quote()return 引用文本,而不是echo 它,然后是单线

add_shortcode( \'dw_quote\', \'grammer_dw_quote\' ); 
足以添加[dw_quote] 打印随机报价的快捷码。

删除所选报价的最佳方式是什么?

使用您的方式:将所有报价保存在一起,这样很难找到特定的报价并将其删除。。。您应该设置一种报价id,例如

$list_of_quotes[] = $_POST[\'adding_quote\'];
你应该有

$list_of_quotes[$a_unique_id] = $_POST[\'adding_quote\'];
这样做很简单,获取一个特定的报价并删除它,即。unset 然后再次保存它。这个唯一的id应该是什么取决于您。

然而,现在我已经回答了你的问题,我想给你一个建议。

如果您创建custom post type for quotes 你几乎解决了所有的问题:

菜单项和表单都是由WordPress创建的,唯一的id处理是由WordPress完成的,就像创建、列出、删除、垃圾处理、取消垃圾处理、调度的UI一样

您可以通过查看this answer. 这里的CPT是用来“开玩笑”的,你有“引语”,但没有太大区别。

结束