面向对象插件中的ADMIN_POST

时间:2015-02-18 作者:GoatMachine

我尝试编写面向对象的插件。现在,我有一个问题。

admin\\u post操作未运行。我正在发布代码,将问题本地化。

   class install
   {
        $admin = new sm_admin();
        add_menu_page( \'Social Media\', \'Social Media\', \'read\', SM_CUSTOMPOSTTYPE, array( $admin, \'ms_get_socialmedia_page\' ), \'\', 22 );
   }

   class sm_admin
   {
       function __construct()
        {
            add_action( \'admin_post_change_socialmedia\', array( &$this, \'ms_change_socialmedia\' ) );
        }

        function ms_get_socialmedia_page() {
                    ?>
                    <form action="<?php echo admin_url( \'admin-post.php\' ); ?>" method="post">
                        <input type="hidden" name="action" value="change_socialmedia">
                        .
                        .
                        .
                        .
                        <?php echo get_submit_button(\'Speichern\'); ?>
                        </form>
        <?php       
                }

                function ms_change_socialmedia() {
                    //save everything + redirect
                }
    }
它只涉及管理。php。不会调用ms\\u change\\u socialmedia。什么地方出错了?

1 个回复
最合适的回答,由SO网友:David Gard 整理而成

您可以将其构建到一个类中。

显然,可以根据需要更改方法名称,这些只是我在插件中使用的名称。

您会注意到,我还添加了两个健全性检查-一个是为了阻止人们直接访问您的插件页面(即在加载核心文件之前),另一个是为了防止访问on_save_settings 方法。

我还应该告诉你Writing a Plugin Codex, 其中有很多例子,可以指导您进一步参考资料,以帮助您完成此过程。

最后,我建议您还可以查看Settings API. 这不是一个灵丹妙药,但它可以让管理插件设置变得更加容易。

/**
 * Avoid direct calls to this file where WP core files are not present
 */
if(!function_exists(\'add_action\')) :
    header(\'Status: 403 Forbidden\');
    header(\'HTTP/1.1 403 Forbidden\');
    exit();
endif;

$sm_admin = new SM_Admin();
class SM_Admin{

    /** Constructor */
    function __construct(){

        add_action(\'admin_menu\', array(&$this, \'on_admin_menu\'));                           // Add the admin menu
        add_action(\'admin_post_change_socialmedia\', array( &$this, \'on_save_settings\'));    // Save any changes

    }

    /**
     * Add the admin menu
     */
    function on_admin_menu(){

        add_menu_page( \'Social Media\', \'Social Media\', \'read\', SM_CUSTOMPOSTTYPE, array( &$this, \'on_show_page\' ), \'\', 22 );

    }  

    /**
     * Render the page
     */
    function on_show_page(){
?>
        <form action="<?php echo admin_url( \'admin-post.php\' ); ?>" method="post">
            <input type="hidden" name="action" value="change_socialmedia">
            <!-- { Your form... } -->
            <?php wp_nonce_field(\'ms_change_socialmedia\', \'ms_nonce\'); ?>
            <?php echo get_submit_button(\'Speichern\'); ?>
        </form>
<?php      
    }

    /**
     * Save the settings
     */
    function on_save_settings(){

        if(!isset( $_POST[\'ms_nonce\']) || ! wp_verify_nonce( $_POST[\'ms_nonce\'], \'ms_change_socialmedia\')) :
            wp_die(new WP_Error(
                \'invalid_nonce\', __(\'Sorry, I\\\'m afraid you\\\'re not authorised to do this.\')
            ));
            exit;
        endif;

        echo \'<pre>\'; print_r($_POST); echo \'</pre>\';
        die(\'Hey, it works!  You can now edit the \\\'on_save_settings\\\' method to sanitize and save your settings as you require.\');

        wp_redirect($_POST[\'_wp_http_referer\']);

    }

}

结束

相关推荐

My posts show 2 comment forms

我们有一个Wordpress网站,lifering.org, 在戈达迪主持。我们最近升级了虚拟服务器的Linux操作系统,这涉及到从备份重建站点。现在,我们的单篇帖子显示了两个评论回复表单。我相信我们之前每个帖子只有一个评论回复表。我不知道这是怎么发生的-我自己做了备份-或者如何修复它。