需要覆盖父主题中包含的文件

时间:2016-12-09 作者:user1388610

我正在使用一个带有内置保留的父主题,这是由不同开发人员对保留插件的修改。它并没有完全满足我们的需要,所以我们购买了独立的高级插件。除了父主题在其中一个主题文件中有以下语句外,其他都可以正常工作shortcodes.php:

if (class_exists(\'rtbInit\')) {    
include_once \'bookingtable/bookingtable.php\';
}
该文件破坏了premium插件的日期和时间函数,因此,我创建了一个shortcodes.php 文件,并注释了include行,但这不起作用。只有在父主题中对该行进行注释时,它才起作用。

有没有办法在子主题中添加函数或其他内容NOT 是否包含该文件?

非常感谢。

以下是的代码bookingtable.php

function cs_booking_dequeue_script()
{
if (! is_admin()) {
    wp_deregister_style(\'pickadate-default\');
    wp_register_style(\'pickadate-default\', get_template_directory_uri() . \'/framework/shortcodes/bookingtable/css/classic.css\');
    wp_deregister_style(\'pickadate-date\');
    wp_register_style(\'pickadate-date\', get_template_directory_uri() . \'/framework/shortcodes/bookingtable/css/classic.date.css\');
    wp_deregister_style(\'pickadate-time\');
    wp_register_style(\'pickadate-time\', get_template_directory_uri() . \'/framework/shortcodes/bookingtable/css/classic.time.css\');

    wp_deregister_style(\'rtb-booking-form\');
    wp_dequeue_style(\'rtb-booking-form\');

    wp_deregister_script(\'rtb-booking-form\');
    wp_register_script(\'rtb-booking-form\',get_template_directory_uri() . \'/framework/shortcodes/bookingtable/js/booking-form.js\', array(\'jquery\'));
    }
}

function cs_booking_request_input($input = \'\'){
  global $rtb_controller;
  $request = $rtb_controller->request;
  //var_dump($request);
  return !empty($request) ? !empty($request->$input) ? $request->$input : null : null;
}

add_shortcode(\'cs-booking-form\', \'cs_booking_form\');

function cs_booking_form($params, $content = null)
{
  global $rtb_controller;

//wp_enqueue_style(\'intlTelInput\', get_template_directory_uri() . \'/framework/shortcodes/bookingtable/css/intlTelInput.css\');
//wp_enqueue_script(\'intlTelInput\',get_template_directory_uri() . \'/framework/shortcodes/bookingtable/js/intlTelInput.min.js\', array(\'jquery\'));
//wp_enqueue_script(\'bookingtable\',get_template_directory_uri() . \'/framework/shortcodes/bookingtable/js/bookingtable.js\', array(\'intlTelInput\'));

// Only allow the form to be displayed once on a page
if ( $rtb_controller->form_rendered === true ) {
    return;
} else {
    $rtb_controller->form_rendered = true;
}

// Enqueue assets for the form
rtb_enqueue_assets();

// Allow themes and plugins to override the booking form\'s HTML output.
$output = apply_filters( \'rtb_booking_form_html_pre\', \'\' );
if ( !empty( $output ) ) {
    return $output;
}

// Process a booking request
if ( !empty( $_POST[\'action\'] ) && $_POST[\'action\'] == \'booking_request\' ) {

    if ( get_class( $rtb_controller->request ) === \'stdClass\' ) {
        require_once( RTB_PLUGIN_DIR . \'/includes/Booking.class.php\' );
        $rtb_controller->request = new rtbBooking();
    }

    $rtb_controller->request->insert_booking();
}

// Define the form\'s action parameter
$booking_page = $rtb_controller->settings->get_setting( \'booking-page\' );
if ( !empty( $booking_page ) ) {
    $booking_page = get_permalink( $booking_page );
}

$settings = get_option(\'rtb-settings\');

ob_start();

?>
<div class="cs-booking-form">
<?php if ( $rtb_controller->request->request_inserted === true ) : ?>
<div class="rtb-message">
    <p><?php echo $rtb_controller->settings->get_setting( \'success-message\' ); ?></p>
</div>
<?php else : ?>
<form id="cs-booking-form" method="POST" action="<?php echo $booking_page ? esc_attr( $booking_page ) : get_the_permalink() ; ?>">
    <input type="hidden" name="action" value="booking_request">
    <?php do_action( \'rtb_booking_form_before_fields\' ); ?>

    <div class="row">
        <div class="cs-bookTable-date col-xs-12 col-sm-6 col-md-6 col-lg-6">
            <label for="rtb-date"><?php esc_html_e( \'When would you like to book?\', \'wp_nuvo\' ); ?></label>
            <span class="Selectoptions"><input type="text" name="rtb-date" id="rtb-date" value="<?php echo cs_booking_request_input(\'request_date\'); ?>" placeholder="<?php esc_html_e(\'Select Date\', \'wp_nuvo\'); ?>"></span>
            <?php echo rtb_print_form_error( \'date\' ); ?>
            <div id="cs-booking-date"></div>
        </div>
        <div class="cs-bookTable-party col-xs-12 col-sm-2 col-md-2 col-lg-2">
            <label for="rtb-party"><?php esc_html_e( \'Party Size :\', \'wp_nuvo\' ); ?></label>
            <span class="Selectoptions"><select name="rtb-party" id="rtb-party">
                <?php
                if(empty($settings[\'party-size\'])){ $settings[\'party-size\'] = 20; }
                for($i = 1 ; $i <= $settings[\'party-size\'] ; $i++):
                ?>
                <option value="<?php echo $i; ?>" <?php if(cs_booking_request_input(\'party\') == $i) { echo \'selected\'; }?>><?php echo $i; ?></option>
                <?php endfor; ?>
            </select>
            </span>
        </div>
        <div class="cs-bookTable-time col-xs-12 col-sm-4 col-md-4 col-lg-4">
            <label for="rtb-time"><?php esc_html_e( \'Preferred dining time:\', \'wp_nuvo\' ); ?></label>
            <span class="Selectoptions"><input type="text" name="rtb-time" id="rtb-time" value="<?php echo cs_booking_request_input(\'request_time\'); ?>" placeholder="<?php esc_html_e(\'Select Time\', \'wp_nuvo\'); ?>"></span>
            <?php echo rtb_print_form_error( \'time\' ); ?>
            <div id="cs-booking-time"></div>
        </div>
    </div>
    <div class="row">
        <div class="name col-xs-12 col-sm-6 col-md-6 col-lg-6">
             <input type="text" name="rtb-name" id="rtb-name" placeholder="<?php esc_html_e(\'Name\', \'wp_nuvo\'); ?>" value="<?php echo cs_booking_request_input(\'name\'); ?>">
             <?php echo rtb_print_form_error( \'name\' ); ?>
        </div>
        <div class="email col-xs-12 col-sm-6 col-md-6 col-lg-6">
            <input type="text" name="rtb-email" id="rtb-email" placeholder="<?php esc_html_e(\'Email\', \'wp_nuvo\'); ?>" value="<?php echo cs_booking_request_input(\'email\'); ?>">
            <?php echo rtb_print_form_error( \'email\' ); ?>
        </div>
    </div>
    <div class="row">
        <div class="phone col-xs-12 col-sm-6 col-md-6 col-lg-6">
            <input type="text" name="rtb-phone" id="rtb-phone" placeholder="<?php esc_html_e(\'Phone\', \'wp_nuvo\'); ?>" value="<?php echo cs_booking_request_input(\'phone\'); ?>">
            <?php echo rtb_print_form_error( \'phone\' ); ?>
        </div>
        <div class="message col-xs-12 col-sm-6 col-md-6 col-lg-6">
            <?php echo rtb_print_form_error( \'message\' ); ?>
            <input type="text" name="rtb-message" id="rtb-message" placeholder="<?php esc_html_e(\'Message\', \'wp_nuvo\'); ?>" value="<?php echo cs_booking_request_input(\'message\'); ?>">
        </div>
    </div>

    <div class="row">
        <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
        <?php
        $fields = $rtb_controller->settings->get_booking_form_fields( $rtb_controller->request, array() );
        $_remove = array(\'date\',\'time\',\'party\',\'name\',\'email\',\'phone\',\'add-message\',\'message\');
        foreach( $fields as $fieldset => $contents ) {
            foreach( $contents[\'fields\'] as $slug => $field ) {

                if(in_array($slug, $_remove)) continue;

                $args = empty( $field[\'callback_args\'] ) ? null : $field[\'callback_args\'];

                call_user_func( $field[\'callback\'], $slug, $field[\'title\'], $field[\'request_input\'], $args );
            }
        }
        ?>
        </div>
    </div>

    <?php do_action( \'rtb_booking_form_after_fields\' ); ?>

    <div class="cs-bookTable-submit">
        <button class="btn btn-default rtb-submit" type="submit"><?php esc_html_e( \'BOOK MY TABLE\', \'wp_nuvo\' ); ?></button>
        <span class="des-text"><?php echo esc_html_e(\'Please submit your reservation details and we will contact you to confirm your booking \',\'wp_nuvo\');?></span>
    </div>

</form>
<?php endif; ?>
</div>

<?php

$output = ob_get_clean();

$output = apply_filters( \'rtb_booking_form_html_post\', $output );

return $output;
}

1 个回复
SO网友:Tunji

您好,您必须编辑父主题,因为无法覆盖include_once \'bookingtable/bookingtable.php\';.

因此,为了尽量减少对父主题的编辑,可以使用wordpress重写整个代码get_template_part()

if ( class_exists(\'rtbInit\') ) {    
    get_template_part(\'bookingtable/bookingtable\');
}
这样,您就可以将文件复制到子主题并在那里进行编辑。

相关推荐

为什么我不能执行wp-includes文件夹下的php文件?

我正在调整WordPress以更好地理解它,玩它。出于个人目的。但从加载自定义文件/wp-includes 文件夹无法工作。我试图添加信息。php文件位于/wp-includes 包含phpinfo() 当我尝试通过以下方式在浏览器中访问它时example.com/wp-includes/info.php, 服务器返回错误503。文件夹权限设置为775,文件权限设置为644。Important note: 如果我重命名wp-includes 文件夹,例如wp-include, 那就行了!我联系了主机支持人