WooCommerceおよびWooCommerce Bookingsプラグインを有効にして、オプションの1つを選択する必要があることをお客様に知らせるために、製品時間ピッカーセクションの上にテキスト行を追加しようとしています。
コピーしたwc-bookings-functions.php
phpファイルの "includes"フォルダー内にあるWooCommerce Bookingsプラグインに関数を見つけました。私のテーマのfunctions.php
ファイル。関数名の先頭に "de _"を追加して名前を変更し、add_filter
を追加します。
これを行うと、関数(元のプラグインまたは私のもの)がまったく機能せず、元のピッカーも私のバージョンも表示されず、何も返されません。
元の機能:
function wc_bookings_get_time_slots_html( $bookable_product, $blocks, $intervals = array(), $resource_id = 0, $from = 0, $to = 0 ) {
$available_blocks = wc_bookings_get_time_slots( $bookable_product, $blocks, $intervals, $resource_id, $from, $to );
$block_html = '';
// If customer defined, we show two dropdowns start/end time.
if ( 'customer' === $bookable_product->get_duration_type() ) {
$block_html .= wc_bookings_get_start_time_html( $bookable_product, $blocks, $intervals, $resource_id, $from, $to );
$block_html .= wc_bookings_get_end_time_html( $bookable_product, $blocks, '', $intervals, $resource_id, $from, $to );
} else {
$block_html .= '<div class="please-select">Hi please select your session</div>';
foreach ( $available_blocks as $block => $quantity ) {
if ( $quantity['available'] > 0 ) {
if ( $quantity['booked'] ) {
/* translators: 1: quantity available */
$block_html .= '<li class="block" data-block="' . esc_attr( date( 'Hi', $block ) ) . '"><a href="#" data-value="' . get_time_as_iso8601( $block ) . '">' . date_i18n( get_option( 'time_format' ), $block ) . ' <small class="booking-spaces-left">(' . sprintf( _n( '%d left', '%d left', $quantity['available'], 'woocommerce-bookings' ), absint( $quantity['available'] ) ) . ')</small></a></li>';
} else {
$block_html .= '<li class="block" data-block="' . esc_attr( date( 'Hi', $block ) ) . '"><a href="#" data-value="' . get_time_as_iso8601( $block ) . '">' . date_i18n( get_option( 'time_format' ), $block ) . '</a></li>';
}
}
}
}
return apply_filters( 'wc_bookings_get_time_slots_html', $block_html, $available_blocks, $blocks );
}
Functions.phpファイルに追加した関数。新しい関数を追加しましたde _:
function de_wc_bookings_get_time_slots_html( $bookable_product, $blocks, $intervals = array(), $resource_id = 0, $from = 0, $to = 0 ) {
$available_blocks = wc_bookings_get_time_slots( $bookable_product, $blocks, $intervals, $resource_id, $from, $to );
$block_html = '';
// If customer defined, we show two dropdowns start/end time.
if ( 'customer' === $bookable_product->get_duration_type() ) {
$block_html .= wc_bookings_get_start_time_html( $bookable_product, $blocks, $intervals, $resource_id, $from, $to );
$block_html .= wc_bookings_get_end_time_html( $bookable_product, $blocks, '', $intervals, $resource_id, $from, $to );
} else {
$block_html .= '<div class="please-select">Hi please select your session</div>';
foreach ( $available_blocks as $block => $quantity ) {
if ( $quantity['available'] > 0 ) {
if ( $quantity['booked'] ) {
/* translators: 1: quantity available */
$block_html .= '<li class="block" data-block="' . esc_attr( date( 'Hi', $block ) ) . '"><a href="#" data-value="' . get_time_as_iso8601( $block ) . '">' . date_i18n( get_option( 'time_format' ), $block ) . ' <small class="booking-spaces-left">(' . sprintf( _n( '%d left', '%d left', $quantity['available'], 'woocommerce-bookings' ), absint( $quantity['available'] ) ) . ')</small></a></li>';
} else {
$block_html .= '<li class="block" data-block="' . esc_attr( date( 'Hi', $block ) ) . '"><a href="#" data-value="' . get_time_as_iso8601( $block ) . '">' . date_i18n( get_option( 'time_format' ), $block ) . '</a></li>';
}
}
}
}
return apply_filters( 'wc_bookings_get_time_slots_html', $block_html, $available_blocks, $blocks );
}
そしてadd_filter(de _関数の始まり)
add_filter('wc_bookings_get_time_slots_html','de_wc_bookings_get_time_slots_html', 10);
私はラインを期待していました:
$block_html .= '<div class="please-select">Hi please select your session</div>';
利用可能な日付の上に表示されます。
しかし、何も起こりません。日をクリックしても、日付やテキストが表示されません。関数を削除してフィルターをかけると、元のタイムスロットピッカーが期待どおりに表示されます。
フィルターの使用に関するドキュメントを読み、これを正しく行っていると思いました。
また、名前の先頭に「de_」を付けてreturn apply_filters
を変更しようとしましたが、何も変更されませんでした。
最初に、元のwc_bookings_get_time_slots_html()
関数で、次の行:
$block_html .= '<div class="please-select">Hi please select your session</div>';
存在しない、これは、元の関数と、アクティブなテーマの関数のphpファイルにコピーした(名前を変更してカスタマイズした)関数との違いを理解しようとする人々を混乱させるものです。
ここでプラグイン関数をコピーするをテーマに追加します(名前を変更してカスタマイズします)何もしません。
代わりに、利用可能なフックを使用してくださいwc_bookings_get_time_slots_html
、これにより、次のように簡単にカスタマイズできます。
add_filter( 'wc_bookings_get_time_slots_html', 'filter_bookings_get_time_slots_html_callback', 10, 6 );
function filter_bookings_get_time_slots_html_callback( $bookable_product, $blocks, $intervals, $resource_id, $from, $to ) {
if ( 'customer' !== $bookable_product->get_duration_type() ) {
$block_html = '<div class="please-select">Hi please select your session</div>' . $block_html;
}
return $block_html;
}
コードは、アクティブな子テーマ(またはアクティブなテーマ)のfunction.phpファイルに入ります。テストして動作します。