web-dev-qa-db-ja.com

14個の子供のテーマで適切に列数を変更するにはどうすればいいですか?

私は私の子供のためのジャバスクリプトを非アクティブにし、反応することを試みています - 14のテーマから(そうアップデートは物事に影響を与えません)。

私が本当にやりたいことはフッターの4から3に列幅を変更することですが、私はメインテーマで直接/js/functions.jsを変更したくありません(多分これを達成する別の/より良い方法があります。 !)

これをfunctions.phpのchild-themeに入れています。

/* activate and decative js class */
class aadjs {
    public function __construct() {
        add_action( 'wp_enqueue_scripts', array( $this, 'deactivejs'), 100 );
    }

    public function deactivejs() {
        wp_dequeue_script( 'twentyfourteen-script' ); 
        add_action( 'wp_enqueue_scripts', array( $this, 'reactivatejs'), 100);
    }

    //Why isn't this function executed?
    public function reactivatejs() {
        echo  get_stylesheet_directory_uri() . '/js/functions.js'; 
        exit;       
        wp_enqueue_script( 'twentyfourteen-script', get_stylesheet_directory_uri() . '/js/functions.js', array( 'jquery' ), '20140616', true );
    }               

}
$x = new aadjs();

Deactive jsをしてから、active jsを使いたいのですが、reactivatejsは呼び出されていません。何がおかしいのですか?子テーマの新しいjsファイルへのパスが正しく設定されていて、存在しています。

変更したい/js/functions.js

_window.load( function() {
        // Arrange footer widgets vertically.
        if ( $.isFunction( $.fn.masonry ) ) {
            $( '#footer-sidebar' ).masonry( {
                itemSelector: '.widget',
                columnWidth: function( containerWidth ) {
                    return containerWidth / 4;
                },
                gutterWidth: 0,
                isResizable: true,
                isRTL: $( 'body' ).is( '.rtl' )
            } );
        }

    } );

TO(3に注意してください)

_window.load( function() {
        // Arrange footer widgets vertically.
        if ( $.isFunction( $.fn.masonry ) ) {
            $( '#footer-sidebar' ).masonry( {
                itemSelector: '.widget',
                columnWidth: function( containerWidth ) {
                    return containerWidth / 3;
                },
                gutterWidth: 0,
                isResizable: true,
                isRTL: $( 'body' ).is( '.rtl' )
            } );
        }

    } );

なぜexit() in yourreactivatejs() `メソッドを使っているのかわからないのですが、これはスクリプトをロードする前でもメソッドを壊してしまうからです(うまくいけばこれはデバッグのためです)。

私はまたこれでクラスを作成する必要はないと思います、単純なスパゲッティ関数は完全にするでしょう。とにかく、あなたがクラスを使う必要があるなら、そのクラスのコンストラクタは何の仕事も想定しておらず、コンストラクタはそのクラスを初期化することを想定しています。あなたは自分の行動をコンストラクタの外で受けたいと思うでしょう。また、スクリプトやスタイルの削除に関しては、登録を解除してデキューする必要があります。

考えられる解決策は次のとおりです。

クロージャ - 削除できないため、実際には推奨されません

add_action( 'wp_enqueue_scripts', function ()
{
    // Remove your script
    wp_dequeue_script( 'twentyfourteen-script' );
    wp_deregister_script( 'twentyfourteen-script' );

    // Add new script
    wp_enqueue_script( 'lets-be-unique-here', get_stylesheet_directory_uri() . '/js/functions.js', ['jquery'], '20140616', true );
}, 100 );

ノーマルスパゲッティ

add_action( 'wp_enqueue_scripts', 'addjs', 100 );
function addjs()
{
    // Remove your script
    wp_dequeue_script( 'twentyfourteen-script' );
    wp_deregister_script( 'twentyfourteen-script' );

    // Add new script
    wp_enqueue_script( 'lets-be-unique-here', get_stylesheet_directory_uri() . '/js/functions.js', ['jquery'], '20140616', true );
}

行動の外側のクラス

class AddJS
{
    public function addjs ()
    {
        // Remove your script
        wp_dequeue_script( 'twentyfourteen-script' );
        wp_deregister_script( 'twentyfourteen-script' );

        // Add new script
        wp_enqueue_script( 'lets-be-unique-here', get_stylesheet_directory_uri() . '/js/functions.js', ['jquery'], '20140616', true );
    }
}

その後

add_action( 'wp_enqueue_scripts', ['AddJS','addjs'], 100 );

または

$addjs = new AddJS();
add_action( 'wp_enqueue_scripts', [$addjs,'addjs'], 100 );

アクションインサイドクラス

class AddJS
{
    public function addAction ()
    {
        add_action( 'wp_enqueue_scripts', [$this,'addjs'], 100 );
    }

    public function addjs ()
    {
        // Remove your script
        wp_dequeue_script( 'twentyfourteen-script' );
        wp_deregister_script( 'twentyfourteen-script' );

        // Add new script
        wp_enqueue_script( 'lets-be-unique-here', get_stylesheet_directory_uri() . '/js/functions.js', ['jquery'], '20140616', true );
    }
}
$addjs = new AddJS();
$addjs->addjs();
1
Pieter Goosen