Viewing 10 replies - 1 through 10 (of 10 total)
  • Plugin Author Optimizing Matters

    (@optimizingmatters)

    Can you share the URL so I can have a look Juslintek?

    Thread Starter juslintek

    (@juslintek)

    Website where scripts are not combined URI

    Screenshot of the scripts which are not combined

    jquery-ui-autocomplete is enqueued in shortcode, using in functions.php registered script and that script has dependency of jquery-ui-autocomplete.

    wp-mediaelement is enqueued via plugins callback on wordpress hook wp_enqueue_scripts.

    So seems that everything is done properly. But for unknown reason autoptimize stopped capturing all of the scripts mentioned here. For example jquery is required as dependency on all my scripts and it is always injected in head and not combined and it is not in exclusions.

    • This reply was modified 6 years, 9 months ago by juslintek. Reason: Add extra helpful information
    • This reply was modified 6 years, 9 months ago by juslintek. Reason: Added finishing statement to last sentence
    • This reply was modified 6 years, 9 months ago by juslintek. Reason: exclusions, not exceptions
    Plugin Author Optimizing Matters

    (@optimizingmatters)

    should work … why do you write “non standard wordpress structure?”, who is your setup different?

    Thread Starter juslintek

    (@juslintek)

    I’m using Bedrock, which uses wordpress as dependency and it is in subdirectory, which can be changed via composer.json and config/application.php

    Plugin Author Optimizing Matters

    (@optimizingmatters)

    hmmm … and (how) does that change stuff like WordPress constants and directory layout?

    Thread Starter juslintek

    (@juslintek)

    Well wordpress is installed in subdirectory of webroot, in default case its wp. And wp-content is stored not in subdirectory, but in webroot in default case in app directory.

    
    ├── composer.json
    ├── config
    │   ├── application.php
    │   └── environments
    │       ├── development.php
    │       ├── staging.php
    │       └── production.php
    ├── vendor
    └── web
        ├── app
        │   ├── mu-plugins
        │   ├── plugins
        │   ├── themes
        │   └── uploads
        ├── wp-config.php
        ├── index.php
        └── wp
    

    All constants are included from config into wp-config.php which is in webroot as in default wordpress setup. Index.php is changed to require wp-blog-header.php from wp subdirectory require(__DIR__ . '/wp/wp-blog-header.php');.

    wp-config.php requires composer autoload.php require_once(dirname(__DIR__) . '/vendor/autoload.php');

    As well it uses mu-plugin, called “Bedrock Autoloader”. Here is its source code: https://github.com/roots/bedrock/blob/master/web/app/mu-plugins/bedrock-autoloader.php

    Its configs are here: https://github.com/roots/bedrock/blob/master/config/application.php

    And their values are loaded via env reader library.

    How does autoptimize check for queued libraries, does it go through dependencies and does it validate somehow directory, maybe it using somewhere static path to wp-includes?

    • This reply was modified 6 years, 9 months ago by juslintek.
    • This reply was modified 6 years, 9 months ago by juslintek.
    Plugin Author Optimizing Matters

    (@optimizingmatters)

    How does autoptimize check for queued libraries, does it go through dependencies and does it validate somehow directory, maybe it using somewhere static path to wp-includes?

    it doesn’t use the queue mechanism, but parses the final HTML and extracts URL and tries to map them to the filesystem. the problem is very likely the fact that that mapping does not work. where in the directory layout is wp-includes?

    Thread Starter juslintek

    (@juslintek)

    I think, that not parsing, but using queue mechanism would be more useful and efficient as parsing DOM requires more cpu and memory as well it can lead to wrong paths. I can see the problem, because url in html lead to wp-includes without subdirectory, nginx rewrite rule rewrites js and css files to /wp/wp-includes/ if they do not exist within /wp-includes/, so I can see whats happening here. Basically it just cannot resolve path to wp-includes. as it is not using path before url rewrite or is it curling found css and js? So guess you're replacing domain with webroot or ABSPATH? If ABSPATH then it would resolve towp` subdir, but if $_SERVER[‘DOCUMENT_ROOT’], then it might not and that might be the cause of the problem. But if you’re curling each uri, then nginx should rewrite to real path. There should be input where people could add their own paths, which aren’t in the queue so they would be combined with the rest.

    • This reply was modified 6 years, 9 months ago by juslintek.
    Thread Starter juslintek

    (@juslintek)

    I did this:

    
    add_filter( 'autoptimize_js_individual_script', function ( $scriptsrc, $script ) {
        if ( ! file_exists( ABSPATH . "/../scripts.txt" ) ) {
            touch( ABSPATH . "/../scripts.txt" );
        }
    
        if ( ! file_exists( ABSPATH . "/../scripts_src.txt" ) ) {
            touch( ABSPATH . "/../scripts.txt" );
        }
    
        file_put_contents( ABSPATH . "/../scripts.txt", $script . PHP_EOL, FILE_APPEND | LOCK_EX );
        file_put_contents( ABSPATH . "/../scripts_src.txt", $scriptsrc . PHP_EOL, FILE_APPEND | LOCK_EX );
    
        return $script;
    }, 10, 2 );
    

    And saw, that no $scripts in the list are from wp-includes;

    Fixed this problem for my personal scenario like this:

    
    add_filter( 'autoptimize_filter_cssjs_alter_url', function ( $url ) {
        if (strpos($url, 'wp-includes')) {
            $url = str_replace('wp-includes', 'wp/wp-includes', $url);
        }
        if (strpos($url, 'wp-admin')) {
            $url = str_replace('wp-admin', 'wp/wp-admin', $url);
        }
    
        return $url;
    });
    

    But guess this should be considered in the plugin itself.

    • This reply was modified 6 years, 9 months ago by juslintek.
    Plugin Author Optimizing Matters

    (@optimizingmatters)

    great job @juslintek, was just about to point you to autoptimize_filter_cssjs_alter_url ??

    But guess this should be considered in the plugin itself.

    Maybe, but given the somewhat … exotic type of setup it’s not high on my priority list really. But if you were to issue a PR on github with code to check if you’re in bedrock (ideally based on a constant that bedrock might set?) and if so automagically do this, then I’ll be happy to merge ??

    have a nice day!
    frank

Viewing 10 replies - 1 through 10 (of 10 total)
  • The topic ‘Not combining some of wp-include scripts’ is closed to new replies.