Fungsi panggilan php dari kelas yang diperluas

Saya ingin memodifikasi metode yang ada dari kelas induk dalam tema anak tanpa memengaruhi metode/metode lain dalam konstruktor untuk menghapus skrip tertentu

Fungsi tema induk. php

class Theme_Assets extends Theme_Base {

    /**
     * Hold data for wa_theme for frontend
     * @var array
     */
    private static $theme_json = array();

    /**
     * [__construct description]
     * @method __construct
     */
    public function __construct() {

        // Frontend
        $this->add_action( 'wp_enqueue_scripts', 'dequeue', 2 );
        $this->add_action( 'wp_enqueue_scripts', 'register' );
        $this->add_action( 'wp_enqueue_scripts', 'enqueue' );

        self::add_config( 'uris', array(
            'ajax'    => admin_url('admin-ajax.php', 'relative')
        ));
    }

    /**
     * Unregister Scripts and Styles
     * @method dequeue
     * @return [type]  [description]
     */
    public function dequeue() {

    }

    /**
     * Register Scripts and Styles
     * @method register
     * @return [type]   [description]
     */
    public function register() {

        $this->script( 'bootstrap', $this->get_vendor_uri( 'bootstrap/js/bootstrap.min.js' ), array( 'jquery' ) );
        $this->script( 'intersection-observer', $this->get_vendor_uri( 'intersection-observer.js' ), array( 'jquery' ) );
        $this->script( 'jquery-lazyload', $this->get_vendor_uri( 'lazyload.min.js' ), array( 'jquery' ) );
        $this->script( 'imagesloaded', $this->get_vendor_uri( 'imagesloaded.pkgd.min.js' ), array( 'jquery' ) );
        $this->script( 'jquery-vivus', $this->get_vendor_uri( 'vivus.min.js' ), array( 'jquery' ) );
        $this->script( 'splittext', $this->get_vendor_uri( 'greensock/utils/SplitText.min.js' ), array( 'jquery' ) );
        $this->script( 'scrollmagic', $this->get_vendor_uri( 'scrollmagic/ScrollMagic.min.js' ), array( 'jquery' ) );
        $this->script( 'jquery-tinycolor', $this->get_vendor_uri( 'tinycolor-min.js' ), array( 'jquery' ) );
        
        $deps = array(
            'bootstrap',
            'intersection-observer',
            'imagesloaded',
            'scrollmagic',
        );
        
        // LazyLoad
        $enable_lazyload = theme_helper()->get_option( 'enable-lazy-load' );
        if( 'on' === $enable_lazyload ) {
            array_push( $deps,
                'jquery-lazyload'
            );
        }
        // Header Js
        $enable_header = theme_helper()->get_option( 'header-enable-switch' );
        if( 'on' === $enable_header ) {
            array_push( $deps,
                'jquery-tinycolor'
            );
        }

        if( is_page() ) {
            array_push( $deps,
                'splittext',
                'jquery-tinycolor'
            );
        }
    }

    /**
     * Enqueue Scripts and Styles
     * @method enqueue
     * @return [type]  [description]
     */
    public function enqueue() {

        if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
            wp_enqueue_script( 'comment-reply' );
        }
    }
    
    // Register Helpers ----------------------------------------------------------
    public function script( $handle, $src, $deps = null, $in_footer = true, $ver = null ) {
        wp_register_script( $handle, $src, $deps, $ver, $in_footer);
    }

    public function style( $handle, $src, $deps = null, $ver = null, $media = 'all' ) {
        wp_register_style( $handle, $src, $deps, $ver, $media );
    }

    // Uri Helpers ---------------------------------------------------------------

    public function get_theme_uri($file = '') {
        return get_template_directory_uri() . '/' . $file;
    }

    public function get_child_uri($file = '') {
        return get_stylesheet_directory_uri() . '/' . $file;
    }

    public function get_css_uri($file = '') {
        return $this->get_theme_uri('assets/css/'.$file.'.css');
    }

    public function get_elements_uri( $file = '' ) {
        return $this->get_theme_uri( 'assets/css/elements/' . $file . '.css' );
    }

    public function get_js_uri($file = '') {
        return $this->get_theme_uri('assets/js/'.$file.'.js');
    }

    public function get_vendor_uri($file = '') {
        return $this->get_theme_uri('assets/vendors/'.$file);
    }
}

new Theme_Assets;

Saya ingin menghapus skrip 'splittext' dan 'jquery-tinycolor' dengan mewarisi fungsi dequeue di kelas induk tetapi menghapus semua skrip lainnya

Berikut adalah kode tema Anak dalam fungsi. php

add_action( 'after_setup_theme', function() {

   class D extends Theme_Assets{

   function __construct(){
      $this->add_action( 'wp_enqueue_scripts', 'dequeue', 20 );
   }
       
      public function dequeue(){
         wp_dequeue_script('jquery-tinycolor');
         wp_deregister_script('jquery-tinycolor');
         wp_dequeue_script('splittext');
         wp_deregister_script('splittext');
      }
   }

   new D();
});
_

Bantuan apa pun dihargai

Melihat 7 balasan - 1 sampai 7 (dari total 7)

  • Moderator bcworkz

    (@bcworkz)

    Dengan memperluas kelas dan mengesampingkan konstruktornya, konstruktor Theme_Assets tidak pernah dijalankan. Anda tidak menghapus skrip lain, mereka tidak pernah ditambahkan sejak awal

    Jika Anda hanya ingin menghapus skrip tertentu, jangan mengganti metode kelas induk. Alih-alih, dequeue saja melalui metode Anda sendiri. Tidak mungkin Anda benar-benar perlu membatalkan pendaftaran juga kecuali Anda akan mendaftarkan skrip pengganti menggunakan pegangan yang sama

    Anda harus memastikan kode penghapusan dijalankan setelah skrip diantrekan terlebih dahulu. Menggunakan pengait yang sama dengan induknya, tetapi dengan argumen prioritas yang lebih besar seharusnya melakukan itu

    Thread Starter ghostcoder

    (@ghostcoder)

    Hai @bcworkz

    Terimakasih atas responnya. Saya mencoba dengan metode saya sendiri tetapi tetap tidak berhasil. Inilah yang saya lakukan sebelum mengesampingkan kelas induk

    function dequeue_scripts() {
        wp_dequeue_script('jquery-tinycolor');
        wp_deregister_script('jquery-tinycolor');
        wp_dequeue_script('splittext');
        wp_deregister_script('splittext');
    }
    
    add_action( 'wp_enqueue_scripts', 'dequeue_scripts', 99 );

    Moderator bcworkz

    (@bcworkz)

    Kelas induk sebenarnya tidak memasukkan skrip tersebut, hanya mendaftar. Tidak jelas kapan atau bagaimana mereka diantrekan. Jika enqueuing masih terjadi dengan informasi yang cukup, deregistering tidak akan efektif. Dequeuing tentu tidak akan efektif jika dilakukan terlalu dini. Lihat apakah Anda dapat menentukan di mana/kapan enqueuing benar-benar terjadi dan pastikan kode Anda berjalan setelah itu

    Atau, alih-alih mengganti konstruktor atau dequeuing, ganti metode register() kelas, daftarkan semua skrip lain yang masih Anda inginkan. Jika kode kelas yang Anda posting adalah semuanya, Anda tidak memerlukan kode $deps apa pun yang terjadi setelah panggilan script(). $deps tidak digunakan di mana pun dalam metode ini, juga tidak diteruskan di mana pun. Tetapi sekali lagi, jika enqueuing selanjutnya terjadi dengan informasi yang cukup, menghapus kode registrasi tidak akan efektif. Anda harus menemukan kode enqueuing untuk mendapatkan pegangan yang jelas tentang cara terbaik untuk melanjutkan

    Thread Starter ghostcoder

    (@ghostcoder)

    Hai,

    Terima kasih @bcworkz atas klarifikasinya

    Saya mencoba dalam beberapa hari tetapi masih tidak berhasil, itu membuat saya sangat stres. Bisakah Anda memberikan kode contoh?

    Selamat berakhir pekan

    Salam,

    Moderator bcworkz

    (@bcworkz)

    Saya tidak dapat menyarankan kode yang tepat dengan informasi yang ada. Kelas tema induk hanya memasukkan "komentar-balasan", sisanya hanya terdaftar pada saat ini. Skrip lainnya diantrekan di tempat lain. Kita perlu tahu di mana/kapan/bagaimana mereka diantrekan agar berhasil keluar dari antrean

    Thread Starter ghostcoder

    (@ghostcoder)

    Hai,

    Bolehkah saya menempelkan kode orang tua lengkap dan Anda dapat melihatnya?

    Salam,

    Moderator bcworkz

    (@bcworkz)

    Saya ingin melihat sekilas JIKA ini adalah perangkat lunak open source gratis. Menerbitkan kode sumber berpemilik berbayar pasti akan bertentangan dengan hak cipta, ketentuan penggunaan, atau pembatasan lain dalam menerbitkan kekayaan intelektual. Jika itu open source, beri tahu saya apa itu dan saya dapat mengakses kode sumbernya sendiri

    Saya tidak dapat menjamin saya akan menemukan apa yang kita cari selama melihat sekilas. Hal-hal seperti itu terkadang sangat sulit ditemukan. Di lain waktu mereka praktis melompat ke arah Anda

    Saya punya pemikiran lain. Ada pendekatan yang bisa membuahkan hasil. Anda harus dapat menghubungkan "wp_print_scripts" lebih awal (small $priority arg) dan mengeluarkan skrip yang menyinggung sebelum tag mereka dikeluarkan. Tindakan ini hampir pasti diaktifkan setelah semua enqueuing normal. Mungkin tidak berlaku untuk skrip yang ditangguhkan. Silakan coba ini sebelum saya melihat kode sumbernya

    Bagaimana cara memanggil fungsi dari PHP kelas yang diperluas?

    kelas a { var $b; . } }

    Bagaimana Anda memanggil fungsi dalam kelas di PHP?

    Jika Anda ingin memanggil dari func1 gunakan $this->func2(); untuk memanggil dari luar kelas, gunakan $object->func2(); . Simpan jawaban ini.

    Bagaimana Anda memanggil fungsi dalam PHP?

    Dalam Pemrograman Berorientasi Objek di PHP, metode adalah fungsi di dalam kelas. .
    Pertama, kita membuat objek ( $example ) dari kelas Example
    Selanjutnya, kita memanggil metode echo dengan -> (operator objek) dan () (tanda kurung)
    Tanda kurung berisi argumen seperti biasa

    Apa tujuan dari $this dan meluas di PHP?

    Definisi dan Penggunaan . Ini disebut warisan. Kelas turunan memiliki semua properti publik dan dilindungi dari kelas asalnya. to derive a class from another class. This is called inheritance. A derived class has all of the public and protected properties of the class that it is derived from.