How to avoid wp-load.php within a PHP/CSS file?

This is tricky, as people usually mix wp-load with AJAX and I can’t really find a proper answer.

Case 1

Read More

I have a dynamic style.php file that looks like this:

<?php header("Content-type: text/css");
require_once('../../../../wp-load.php'); ?>

body {
   background: <?php echo get_option('background_color'); ?>;
}

Case 2

I’m using AJAX call:

  jQuery.post('<?php bloginfo('template_directory');  ?>/framework/foo.php',{ foo: smth, bar: else });

Then I’m running some WordPress functions within foo.php (it’s not JS as in other examples):

$foo = $_POST['foo'];
$bar = $_POST['bar'];

$theme_options = get_option('theme_options');
$theme_options[$smth] =  $foo; 
update_option('theme_options', $theme_options);

How to avoid wp-loads in both of these cases?

Thanks a lot 🙂

Related posts

Leave a Reply

1 comment

  1. Here is a basic setup that I use for AJAX with WordPress. instead of loading wp-load.php; just use WordPress default method for AJAX calls. This allows you to also filter function calls from Javascript through a switch. I also added a quick example for wp_localize_script.

    <?php
    
    add_action('wp_enqueue_scripts', 'YOUR_NAME_scripts'); //back end
    
    function YOUR_NAME_scripts( $hook_suffix ) {
    
                wp_enqueue_script('YOUR_NAME-js');
    
                global $blog_id;
                $params = array(
                    'site_url' => site_url(),
                    'admin_ajax_url' => site_url() . '/wp-admin/admin-ajax.php'
                );
    
                wp_localize_script( 'jquery', 'YOUR_NAME', $params );
    
    }
    
    add_action('wp_ajax_nopriv_YOUR_NAME_ajax', 'YOUR_NAME_ajax_function');
    add_action('wp_ajax_YOUR_NAME_ajax', 'YOUR_NAME_ajax_function');
    function YOUR_NAME_ajax_function(){
    
        fobu_load_classes();
    
        switch($_REQUEST['fn']):
            case 'test_ajax':
                $output = $_REQUEST['data'];
            break;
    
    
            default:
                $output = 'No function specified, check your jQuery.ajax() call';
            break;
        endswitch;
    
        ob_clean();
        $output=json_encode($output);
        if(  is_array( $output )  ):
    
            print_r( $output );
        else:
    
            echo $output;
        endif;
        die();
    
    }
    
    
    
    
    
    ?>
    
    <script>
    //in YOUR_NAME.js or whatever
    jQuery(document).ready(function() { 
        (function ($) { 
    
                    jQuery.ajax({
                        url: YOUR_NAME.admin_ajax_url,
                        dataType: 'json',
                        //type:'POST',
                        data: {
                           'action':'YOUR_NAME_ajax',
                           'fn': 'test_ajax',
                           'data': data
                           },
                        success: function(results){
                            //console.log(results);
                            if( results ){
    
                            }
    
                        },// end of success
                        error: function(errorThrown){console.log(errorThrown);}
                    });// end of ajax   
    
        })(jQuery);
    });
    
    </script>