Woocommerce-functions.phpファイルに記述されている関数を変更/上書きしたいのですが、woocommerce-functions.phpファイルを変更したくありません。つまり、プラグインまたは私のテーマでこれを実現したいのです。
Woocommerce関数をオーバーライドすることは可能です。最近これを行い、woocommerce拡張機能をすべてテーマのfunctions.phpファイルに追加して、woocommerceプラグインファイルが変更されずに安全に更新できるようにしました。
このページでは、アクションを削除して独自のアクションに置き換える方法の例を示します- http://wordpress.org/support/topic/overriding-woocommerce_process_registration-in-child-theme-functionsphp
このページでは、関数を削除せずに関数を拡張し、子テーマを使用する例を示します http://uploadwp.com/customizing-the-woocommerce-checkout-page/
お役に立てれば :)
子テーマがある場合は、関連するファイルをテーマにコピーして、コピーを書き直すことができます。コピーはWooCommerceバージョンよりも優先して使用されます。
WooCommerceはテンプレートシステムを提供します。 woocommerce機能をオーバーライドすることが可能です。コアファイルを変更せずにWooCommerceをカスタマイズする優れた方法は、フックを使用することです-
フックを使用してコードを追加または操作する場合は、カスタムコードをテーマfunctions.phpファイルに追加できます。
独自のコードを実行するには、アクションフックdo_action( ‘action_name’);を使用してフックします。
コードを配置する場所の優れた例については、以下を参照してください。
add_action('action_name', 'your_function_name');
function your_function_name()
{
// Your code
}
フィルタフックは、apply_filter( ‘filter_name’、$ variable);を使用するコード全体で呼び出されます。
渡された変数を操作するには、次のようにします。
add_filter('filter_name', 'your_function_name');
function your_function_name( $variable )
{
// Your code
return $variable;
}
ここでは、WooCommerceアクションとフィルターフックを取得できます https://docs.woothemes.com/wc-apidocs/hook-docs.html
モバイルデバイスのビデオに「再生」ボタンを追加する必要がありました(デフォルトでは、このボタンはデスクトップにのみ表示されます)。
wp-content/themes/gon/framework/theme_functions.php
の関数をオーバーライドする必要がありました。
function ts_template_single_product_video_button(){
if( wp_is_mobile() ){
return;
}
global $product;
$video_url = get_post_meta($product->id, 'ts_prod_video_url', true);
if( !empty($video_url) ){
$ajax_url = admin_url('admin-ajax.php', is_ssl()?'https':'http').'?ajax=true&action=load_product_video&product_id='.$product->id;
echo '<a class="ts-product-video-button" href="'.esc_url($ajax_url).'"></a>';
}
}
私は見つけました この命令 これはIf you use a hook to add or manipulate code, you can add your custom code to your theme’s functions.php file.
を述べています
私はすでにwp-content/themes/gon-child/functions.php
を持っていました(つまり、元のgonテーマはgon-child)、だから私がしたことは:
// Enable tour video on mobile devices
remove_action('ts_before_product_image', 'ts_template_single_product_video_button', 1);
add_action('ts_before_product_image', 'ts_template_single_product_video_button_w_mobile', 1);
function ts_template_single_product_video_button_w_mobile(){
global $product;
$video_url = get_post_meta($product->id, 'ts_prod_video_url', true);
if( !empty($video_url) ){
$ajax_url = admin_url('admin-ajax.php', is_ssl()?'https':'http').'?ajax=true&action=load_product_video&product_id='.$product->id;
echo '<a class="ts-product-video-button" href="'.esc_url($ajax_url).'"></a>';
}
}
?>