0

プラグインからテーマの関数をオーバーライドすることは可能ですか?私は上記をどのように達成するかの例を見つけるのに苦労してきました。

誰かが光を当てることができれば、それは本当に役に立ちます。

編集:いくつかのコードを追加する

つまり、これはwoocommerceのカートがajaxを使用して更新できるようにする私の関数です。

add_filter('add_to_cart_fragments', 'woocommerce_header_add_to_cartplus_fragment', '1');

function woocommerce_header_add_to_cartplus_fragment( $fragments ) {
    global $woocommerce;
    $basket_icon = esc_attr($instance['basket_icon']);

    ob_start();

    ?>
    <a class="cartplus-contents" href="<?php echo $woocommerce->cart->get_cart_url(); ?>" onclick="javscript: return false;" title="<?php _e('View your shopping cart', 'woothemes'); ?>"><?php echo sprintf(_n('%d item', '%d items', $woocommerce->cart->cart_contents_count, 'woothemes'), $woocommerce->cart->cart_contents_count);?> - <?php echo $woocommerce->cart->get_cart_total(); ?></a>
    <?php

    $fragments['a.cartplus-contents'] = ob_get_clean();

    return $fragments;

}

ただし、一部のテーマにも同様の機能が組み込まれています。これらのテーマでは、プラグインで上記のコードを2回使用すると(1つは上記のバリエーションです)、コードが機能しなくなり、正常に機能します。これは、テーマに組み込まれているコードです。

add_filter('add_to_cart_fragments', 'woocommerce_cart_link');

function woocommerce_cart_link() {
    global $woocommerce;

    ob_start();

    ?>
    <a href="<?php echo $woocommerce->cart->get_cart_url(); ?>" title="<?php echo sprintf(_n('%d item', '%d items', $woocommerce->cart->cart_contents_count, 'woothemes'), $woocommerce->cart->cart_contents_count);?> <?php _e('in your shopping cart', 'woothemes'); ?>" class="cart-button ">
    <span class="label"><?php _e('My Basket:', 'woothemes'); ?></span>
    <?php echo $woocommerce->cart->get_cart_total();  ?>
    <span class="items"><?php echo sprintf(_n('%d item', '%d items', $woocommerce->cart->cart_contents_count, 'woothemes'), $woocommerce->cart->cart_contents_count); ?></span>
    </a>
    <?php

    $fragments['a.cart-button'] = ob_get_clean();

    return $fragments;

}
4

1 に答える 1

1

関数がオーバーライドされることを意図していない限り、いいえ。これは基本的な PHP です。関数を再定義することはできません。しようとすると、致命的なエラーが発生します。

WordPress の一部は上書きされるように書かれています。を見てください/wp-includes/pluggable.php。そこにあるすべての関数は、条件付きでラップされていif( !function_exists(...) )ます。あなたのテーマが同じことをしない限り、またいくつかの機能で同じことをする人もいない限り、上書きすることはできません。

代わりに役立つフィルターを探してください。

コードを見ると、それをアンフックできるはずです。アンフックを十分遅くフックするようにしてください。ただし、テーマの機能を壊していて、テーマが使用しているすべてのフックされた関数の名前を知っている必要があるため、これは良い解決策ではありません。

コードを条件付きで実行し、残りをそのままにしておくために使用できる、、、またはまたはその他の何かが$fragmentsあり$_POSTますか。$_GET

于 2012-12-23T15:50:01.313 に答える