• Resolved enriquerene

    (@enriquerene)


    Hello,

    I’m developing my first plugin and I’d like to add a link tag inside head to call a CSS file to style my options page.

    My plugin has the follow code (all my code, except the license coments)

    if( !defined( ‘ABSPATH’ ) ) exit;

    define( ‘EASYDM_VERSION’, ‘1.0’ );

    define( ‘EASYDM_PLUGIN_URL’, plugin_dir_url( __FILE__ ) );
    define( ‘EASYDM_PLUGIN_DIR’, plugin_dir_path( __FILE__ ) );

    define( ‘EASYDM_SETTINGS_URL’, plugin_dir_url( __FILE__ ).’settings/’ );
    define( ‘EASYDM_SETTINGS_DIR’, plugin_dir_path( __FILE__ ).’settings/’ );
    define( ‘EASYDM_SETTINGS_PATH’, ‘settings/’ );

    define( ‘EASYDM_IMAGES_URL’, plugin_dir_url( __FILE__ ).’images/’ );
    define( ‘EASYDM_IMAGES_DIR’, plugin_dir_path( __FILE__ ).’images/’ );
    define( ‘EASYDM_IMAGES_PATH’, ‘images/’ );

    define( ‘EASYDM_CSS_URL’, plugin_dir_url( __FILE__ ).’css/’ );
    define( ‘EASYDM_CSS_DIR’, plugin_dir_path( __FILE__ ).’css/’ );
    define( ‘EASYDM_CSS_PATH’, ‘css/’ );

    define( ‘EASYDM_INCLUDES_URL’, plugin_dir_url( __FILE__ ).’includes/’ );
    define( ‘EASYDM_INCLUDES_DIR’, plugin_dir_path( __FILE__ ).’includes/’ );
    define( ‘EASYDM_INCLUDES_PATH’, ‘includes/’ );

    require_once EASYDM_SETTINGS_PATH.’easydm-functions.php’;

    //add_filter( ‘wp_head’,’easydm_add_link_tag_to_head’ );
    add_action( ‘wp_head’, ‘easydm_add_link_tag_to_head’ );
    //do_action( ‘wp_head’ );

    add_action( ‘admin_menu’, ‘easydm_top_level_menu’ );

    From the constants is possible to conclude the directories structure of the plugin. Another directories are actually empty.
    The ‘easydm-functions.php’ has the follow function:

    function easydm_add_link_tag_to_head() {
    $path = __DIR__.’/../css/’;
    echo ‘<link rel=”stylesheet” type=”text/css” href=”‘.$path.’style.css” />’;
    }

    I expected to find this link tag in the source code but I can’t. The tag doesn’t appear there.

    Reading many tutorials and forums questions about this, no much is different from this.

    I’m developing in localhost, apache2, Ubuntu 14.04 LTS.

    Some help?

    Thanks

Viewing 10 replies - 1 through 10 (of 10 total)
  • Moderator bcworkz

    (@bcworkz)

    It’s possible your theme does not call wp_head() at the end of the HTML head section. Check the template responsible for this part of the output, usually header.php.

    The other possibility is some odd conflict. Switch to one of the default twenty* themes and deactivate all but your own plugin. You should see your link tag. Reinstate your theme and plugins, one by one, checking for the link tag each time. When it disappears, you’ve found the conflicting entity.

    That answers your immediate problem, but there’s a broader issue. You should not add style sheets this way. You should always use wp_enqueue_style().

    Thread Starter enriquerene

    (@enriquerene)

    Lemme point out some things:

    1) I’m developing in localhost;
    2) I’m using the twenty-sisxteen theme;
    3) The unique plugin installed is my own one;
    4) I went to Appearance >> Editor >> header.php and put wp_head();,
    do_action('wp_head');, together and separated there;

    With above items, nothing happened.
    I tried these:

    https://developer.www.ads-software.com/reference/functions/wp_enqueue_style/#source-code

    https://stackoverflow.com/questions/3472087/how-to-use-wp-enqueue-style-in-my-wordpress-theme

    In this last link, I tried the answer pointed as solution and the post bellow… nothing.

    My code is now as follow:

    In my main file

    add_action( ‘wp_head’, ‘easydm_add_link_tag_to_head’ );

    In my functions file:

    function easydm_add_link_tag_to_head() {
    wp_enqueue_style( ‘style’, plugins_url( ‘/css/style.css’, __FILE__ ), false, ‘1.0’, ‘all’ );
    }

    I tried many possibilities like ‘/wp-contents/plugins/css’, ‘/wp-contents/plugins/css/’, ‘wp-contents/plugins/css’, ‘/wp-contents/plugins/css/style.css’, ‘wordpress/wp-contents/plugins/css/style.css’…

    If makes clearer, the absolute path to my WP installation is ‘/var/www/wordpress’ and I access ‘localhost/wordpress’.

    Moderator bcworkz

    (@bcworkz)

    When you use wp_enqueue_script() you do not add the callback to ‘wp_head’. It should be added to ‘wp_enqueue_scripts’ action for front end pages. There’s other actions for admin and login pages.

    I think your problem could be how the functions.php file is required. You’re using a relative path, which does not work with older PHP versions. Use an absolute path, as in EASYDM_SETTINGS_DIR, for maximum compatibility, even if this turns out to not be the issue.

    A bad require path should have thrown a notice. Always develop with WP_DEBUG defined as true in wp-config.php so you immediately see any problems that surface.

    Thread Starter enriquerene

    (@enriquerene)

    Didn’t work too. I changed everything to call by absolute path but this enqueue doesn’t work.

    Moderator bcworkz

    (@bcworkz)

    Well, that’s weird, it should work with those changes. I even tested your script to be sure I wasn’t missing something – worked fine for me.

    Double check that your plugin is actually activated. Be sure you are saving your plugin files in UTF-8 plain text format, without BOM. You probably are, but I’m out of ideas.

    It’s now down to a possibly corrupted theme or core code. Try switching to another default theme like twentyfifteen, or download a fresh copy of twentysixteen to replace yours.

    If that fails, you’ll need to reinstall WP itself. Everything except your plugin, wp-config.php and the uploads folder should we erased and replaced with files from a fresh download.

    And if that fails, there’s a problem with your local install of Apache or PHP. As unlikely as this seems, it’s happened to me. In my case it was a subtle aberration of PHP. Installing from a different source solved it.

    Thread Starter enriquerene

    (@enriquerene)

    I reinstalled wordpress, theme and plugin… nothing worked. Buuut…
    Trying do_action, many warning errors messages came to me and one of them suggested me to use ‘admin_enqueue_scripts’, and I used in add_action:

    add_action( 'admin_enqueue_scripts', 'easydm_add_link_tag_to_head' );

    Here there is another discussion, where I posted firstly this:

    https://wordpress.stackexchange.com/questions/219911/enqueue-script-style-plungin-development/219914?noredirect=1#comment322394_219914

    I got this link tag:

    <link rel='stylesheet' id='easydm-style-css'  href='https://localhost/wordpress/var/www/wordpress/wp-content/plugins/easy-downloader-manager/css/style.css?ver=4.4.2' type='text/css' media='all' />

    which is styling nothing because of (I suppose) “?ver=4.4.2” string appended to my href. Now I need to cut it out there.

    Thread Starter enriquerene

    (@enriquerene)

    I found this

    https://wpcrux.com/wordpress-enqueue-functions-version/

    what solve the above new problem… but still not styling my page… I checked if the path is correct, my file is there, is not empty or any error like these.

    Any idea?

    Thread Starter enriquerene

    (@enriquerene)

    SOLVED!!!

    The documentation for wp_enqueue_style function is clear to say that the second argument nedd to be relative path to the root installation WordPress. But as I viewed many examples in tutorials using full path I ignored it. Now, defining this constant and all previous steps everything runs ok.

    define( 'EASYDM_CSS_PATH' , str_replace( site_url().'/', '', plugin_dir_url( __FILE__ ) ).'css/' );

    and in function:
    wp_enqueue_style( 'easydm-style', '/'.EASYDM_CSS_PATH.'style.css', array(), null, 'all' );

    So, if someone is tired out to looking for and don’t wanna read this all discussion, the final code is:

    define( 'EASYDM_CSS_PATH' , str_replace( site_url().'/', '', plugin_dir_url( __FILE__ ) ).'css/' );
    
    add_action( 'admin_enqueue_scripts', 'easydm_add_link_tag_to_head' );

    functions file:

    function easydm_add_link_tag_to_head() {
    	wp_enqueue_style( 'easydm-style', '/'.EASYDM_CSS_PATH.'style.css', array(), null, 'all' );
    	wp_enqueue_style( 'easydm-manager', '/'.EASYDM_CSS_PATH.'manager.css', array(), null, 'all' );
    }

    Where I add two styles.

    Moderator bcworkz

    (@bcworkz)

    Oh man! Big dope slap for me! It totally slipped my mind in the course of our troubleshooting that you were styling an options page. I was thinking this was for the front end. I owe you a huge apology, I am quite chagrined.

    With that behind us, getting styles to ‘take’ can be tricky. The hierarchy of what style rules are applied is complex and difficult to understand, but basically you want the style selector that you want to be applied over all else to be listed later and the selector should be more specific than anything else. For example, a .selection is less specific than a #selection because IDs are more specific than classes.

    And !important modifier overrides most things except element styles. Learn to make use of your browser’s CSS inspector. It’ll show what rules are applied where and let you try out different rules to see what ‘takes’.

    Unfortunately, without a live link, there’s not much anyone in these forums can do to specifically help other than to offer general guidance. Good luck!

    Thread Starter enriquerene

    (@enriquerene)

    @bcworkz, you helped me very much, I’m so grateful for this. Really thank you.

Viewing 10 replies - 1 through 10 (of 10 total)
  • The topic ‘wp_head in add_action doesn't work’ is closed to new replies.