【问题标题】:WordPress load dynamic css only on frontendWordPress 仅在前端加载动态 CSS
【发布时间】:2014-03-28 05:26:56
【问题描述】:

我的问题是我在加载了 Ajax 的 WordPress 主题中使用了动态 css 文件。但是,它也会为后端加载相同的动态 css 文件。如何修改我的代码,它只为前端加载动态 css 文件,而不是为后端加载。这是我的代码:

wp_enqueue_style('dynamic-css',
admin_url('admin-ajax.php?action=dynamic_css'));

function dynaminc_css() {
    require(get_template_directory().'/dynamic-css.php');
    exit;
}

add_action( 'wp_ajax_dynamic_css', 'dynaminc_css' );
add_action( 'wp_ajax_nopriv_dynamic_css', 'dynaminc_css' );

}

【问题讨论】:

    标签: css ajax wordpress dynamic


    【解决方案1】:

    这是一个使用内联 cmets 的工作示例:

    <?php
    /*
    Plugin Name: Dynamic CSS using Ajax
    Plugin URI: https://github.com/soderlind/
    Description:
    Author: Per Soderlind
    Version: 0.1.0
    Author URI: http://soderlind.no
    */
    if ( !defined( 'ABSPATH' ) ) {
        die( 'Cheating, are we?' );
    }
    define( 'DYNAMICCSS_VERSION', '0.1.0' );
    
    function dynamic_css_enqueue() {
        wp_enqueue_style( 'dynamic-flags', admin_url( 'admin-ajax.php' ).'?action=dynamic_css&_wpnonce=' . wp_create_nonce( 'dynamic-css-nonce' ), false,  DYNAMICCSS_VERSION );
    }
    
    function dynamic_css() { // Don't wrap function dynamic_css() in if(!is_admin()){ , the call from admin-ajax.php will be from admin
        $nonce = $_REQUEST['_wpnonce'];
        if ( ! wp_verify_nonce( $nonce, 'dynamic-css-nonce' ) ) {
            die( 'invalid nonce' );
        } else {
            /**
             * NOTE: Using require or include to call an URL ,created by plugins_url() or get_template_directory(), can create the following error:
             *       Warning: require(): http:// wrapper is disabled in the server configuration by allow_url_include=0
             *       Warning: require(http://domain/path/flags/css.php): failed to open stream: no suitable wrapper could be found
             *       Fatal error: require(): Failed opening required 'http://domain/path/css.php'
             */
            require dirname( __FILE__ ) . '/css.php'; //use echo, printf etc in css.php and write to standard out.
        }
        exit;
    }
    
    add_action( 'wp_ajax_dynamic_css', 'dynamic_css' );
    add_action( 'wp_ajax_nopriv_dynamic_css', 'dynamic_css' );
    add_action( 'wp_enqueue_scripts', 'dynamic_css_enqueue' ); //wp_enqueue_scripts = load on front-end
    

    【讨论】:

      【解决方案2】:

      is_admin() 函数就是你要找的

      if(!is_admin()){
          wp_enqueue_style('dynamic-css',
          admin_url('admin-ajax.php?action=dynamic_css'));
      
          function dynaminc_css() {
              require(get_template_directory().'/dynamic-css.php');
              exit;
          }
      
          add_action( 'wp_ajax_dynamic_css', 'dynaminc_css' );
          add_action( 'wp_ajax_nopriv_dynamic_css', 'dynaminc_css' );
      }
      

      里面的任何东西只有在不在管理面板中时才会执行。

      http://codex.wordpress.org/Function_Reference/is_admin

      【讨论】:

      • 嗯.. 似乎不起作用。出于某种原因,如果我将代码放在 is_admin() 函数中,它不会加载整个 css 文件。
      • 不要将 function dynamic_css() 包裹在 if(!is_admin()){ 中,来自 admin-ajax.php 的调用将来自管理员。我在下面添加了一个工作示例。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      • 2020-04-24
      • 2015-04-02
      • 2019-08-14
      • 1970-01-01
      • 2014-02-26
      • 1970-01-01
      相关资源
      最近更新 更多