web-dev-qa-db-fra.com

Comment changer le nombre de colonnes de manière appropriée dans le thème de vingt-quatre enfants?

J'essaie de désactiver et de réactiver un javascript dans mon thème enfant - à partir du thème vingt-quatre (afin que les mises à jour n'affectent pas les choses).

Ce que je veux vraiment faire est de changer la largeur de la colonne de 4 à 3 dans le pied de page, mais je ne veux pas changer le fichier /js/functions.js directement dans le thème principal (peut-être existe-t-il un autre moyen/meilleur de réaliser cela !)

Je mets ceci dans functions.php dans le thème enfant:

/* 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();

Je veux désactiver js puis réactif js mais reactivatejs n'est pas appelé. Qu'est-ce que je fais mal? Le chemin d'accès au nouveau fichier js dans le thème enfant est défini correctement et il existe.

Le /js/functions.js que je veux changer:

_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' )
            } );
        }

    } );

À (remarquez les 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' )
            } );
        }

    } );

Je ne suis pas sûr de savoir pourquoi vous utilisez la méthode exit() in yourreactivatejs () `, car cela casse la méthode avant même qu'elle ne charge votre script (, espérons-le à des fins de débogage ).

Je pense aussi qu’il n’est pas nécessaire de créer une classe pour cela, une simple fonction spaghetti conviendrait parfaitement. Quoi qu'il en soit, si vous devez utiliser une classe, le constructeur de la classe n'est supposé d'aucun travail, le constructeur est supposé initialiser la classe. Vous voudriez prendre votre action en dehors du constructeur. En outre, lorsque vous supprimez des scripts et des styles, vous souhaitez annuler l’enregistrement et la suppression de la file d’attente.

Voici les solutions possibles:

FERMETURES - pas vraiment recommandées car elles ne peuvent pas être enlevées

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 );

SPAGHETTI NORMAL

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 );
}

CLASSE AVEC ACTION EXTERIEURE

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 );
    }
}

PUIS

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

OU

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

CLASSE AVEC ACTION DANS LA CLASSE

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