WordPress插件管理页面-在链接的php文件中使用wordPress函数

时间:2011-06-24 作者:HappyNuclear

在StackOverflow上问了这个问题,他们把我带到那边。。。你在这里住的好地方=)

我一直在开发一个非常简单的WordPress插件,并希望对页面上的某些字段进行实时验证,这正是我遇到的问题。我一直在到处寻找一些有用的东西,但我就是不能让它发挥作用。

我一直在努力让ajax正常工作,我知道我遗漏了一些明显的东西,我就是想不出来。

主要功能文件包括注册我的js文件。

function on_screen_validation() {
    wp_enqueue_script( "field_validation", path_join(WP_PLUGIN_URL, basename( dirname( __FILE__ ) )."/field-validation.js"), array( \'jquery\' ) );
}
add_action( \'admin_print_scripts\', \'on_screen_validation\' );
js运行此代码来捕获onblur命令并将值传递给php验证文件。

jQuery(document).ready(function() {
    //run field validation on username on blur
    jQuery(\'.valusername\').blur(function() {

        var usernameID = jQuery(this).attr(\'id\');
        var usernameVal = jQuery(\'#\'+usernameID).val();
        var thisFunction = \'validateUserName\';

        jQuery.post("mywebaddress...validation.php",{Function: thisFunction, thevars: usernameVal}, function(data) {
             alert(data); //would update validation message here
        });
    });
});
以及验证。php脚本如下所示:

if(isset($_POST[\'Function\'])){
    call_user_func($_POST[\'Function\'], $_POST[\'thevars\']);
}

function validateUserName($username){   
   if ( username_exists($username) ) {
       echo $username.\' does exist\'; 
   } else {
       echo $username.\' doesnt exist\';
   }
}
显然,我现在只是使用警报来确保数据被正确检查。

如果我取出WordPress username\\u exists函数,只回显一个字符串,它就可以正常工作。但如果username\\u存在,则会创建一个500内部服务器错误。我需要知道如何获得外部验证。php文件来识别WordPress函数(我想),到目前为止我还没有发现任何有用的东西。

感谢阅读。。。对不起,我解释得太长了,我只是想确保上下文都在那里,这样才有意义(我希望!)!

干杯Matt

2 个回复
最合适的回答,由SO网友:Hameedullah Khan 整理而成

PLEASE!! PLEASE!! 不要从javascript发送php函数名。下面是正确的做法。这可能不是最好的方式,但至少是安全的方式。

注册javascript(请参阅plugins_url 而不是path\\u join),验证现在也是插件的一部分,它不必进行单独的验证。php:

function on_screen_validation() {
    wp_enqueue_script( "field_validation", plugins_url( "field-validation.js", __FILE__ ), array( \'jquery\' ) );
    wp_localize_script( "field_validation", "MySecureAjax", array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );
}
add_action( \'admin_print_scripts\', \'on_screen_validation\' );

add_action( \'wp_ajax_UserNameValidation\', \'validateUserName\' );

function validateUserName() {
    $username = $_POST[\'thevars\'];
    if ( username_exists($username) ) {
        echo $username.\' does exist\'; 
    } else {
        echo $username.\' doesnt exist\';
    }

    // Don\'t remove exit
    exit;
}
您的javascript部分:

jQuery(document).ready(function() {
    //run field validation on username on blur
    jQuery(\'.valusername\').blur(function() {

        var usernameVal = jQuery(this).val();
        var action = \'UserNameValidation\';

        jQuery.post( MySecureAjax.ajaxurl, {action: action, thevars: usernameVal}, function(data) {
             alert(data); //would update validation message here
        });
    });
});
您可以添加nonce检查以获得进一步的安全性和验证。

SO网友:TheDeadMedic

神圣的蝙蝠侠@哈米·杜拉(Hameedullah)给出了一个很好的答案——作为补充,想象一下如果我创造了这样一种形式;

<form action="your.website/validation.php" method="post">
    <input type="hidden" name="Function" value="eval" />
    <textarea name="thevars">
        file_put_contents(
            $_SERVER[\'DOCUMENT_ROOT\' ] . \'/wp-content/uploads/nasty.php\',
            \'&lt;?php // evil code ?&gt;\'
        );
    </textarea>

    <input type="submit" value="Let Battle Commence" />
</form>
如果我将此发布到您的验证脚本中,我会在您的服务器上安装一个带有我自己代码的PHP文件!现在,我所需要做的就是在浏览器中访问脚本,一切都可能失控!

结束

相关推荐

在定制的Single-Post-type.php模板页面上获取属于定制分类的术语id

我有自定义的帖子类型“布道”,附带自定义的分类法“说话人”。我想为说话人分类法分配自定义元值,因此我使用Rilwis的分类法元类:http://www.deluxeblogtips.com/p/taxonomy-meta-script-for-wordpress.html我使用该类添加了一个id为“bio”的metabox。根据他的指示,我需要使用以下代码,以便将“bio”meta的值输出到我的模板中:$meta = get_option(\'meta_id\'); if (empty($meta