Reputation: 37
I have a custom button that instead of the 'add to cart' button. It should open a link to the brand: id='_brands_link' and in the button, and after "Bestel bij" there should be the brand name id='_brands_name' (see the created fields in the bone product):
// name
function add_brands_name_field() {
global $product_object;
?>
<div class='options_group show_if_brands'>
<?php
woocommerce_wp_text_input(
array(
'id' => '_brands_name',
'label' => __( 'Brand name', 'vicodemedia' ),
'value' => $product_object->get_meta( '_brands_name', true ),
'default' => '',
'placeholder' => 'Enter brand name',
'data_type' => 'text',
)
);
?>
</div>
<?php
}
// link
function add_brands_link_field() {
global $product_object;
?>
<div class='options_group show_if_brands'>
<?php
woocommerce_wp_text_input(
array(
'id' => '_brands_link',
'label' => __( 'Product link', 'vicodemedia' ),
'value' => $product_object->get_meta( '_brands_link', true ),
'default' => '',
'placeholder' => 'Enter product link',
'data_type' => 'text',
)
);
?>
</div>
<?php
}
add_action( 'woocommerce_product_options_general_product_data', 'add_brands_link_field');
add_action( 'woocommerce_product_options_general_product_data', 'add_brands_name_field');
I have a function of this buttons now:
if (! function_exists( 'woocommerce_brands_add_to_cart' ) ) {
function brands_add_to_cart() {
//wc_get_template( 'single-product/add-to-cart/brand.php' );
do_action( 'woocommerce_before_add_to_cart_form' );
?>
<form class="cart" action="https://www.google.com">
<?php do_action( 'woocommerce_before_add_to_cart_button' ); ?>
<button style="padding: 18px 40px 18px 40px; height: 55px;" type="submit" name="add-to-cart" value="" class="single_add_to_cart_button button alt">
Bestel bij Google <?php ?>
</button>
<?php do_action( 'woocommerce_after_add_to_cart_button' ); ?>
</form>
<?php
}
add_action('woocommerce_brands_add_to_cart', 'brands_add_to_cart');
}
So in action instead of https://www.google.com there should be _brands_link. And instead of "Google", which is in the button, there should be _brands_name
Here's all the code for my custom product type, just in case:
// BEGIN CODE
class WC_Product_brands extends WC_Product_Simple {
// Return the product type
public function get_type() {
return 'brands';
}
}
// add the product type to the dropdown
function add_type_to_dropdown( $types ) {
$types['brands'] = __( 'Brand product', 'vicodemedia' );
return $types;
}
add_filter( 'product_type_selector', 'add_type_to_dropdown');
// add the product type as a taxonomy
function install_taxonomy() {
// If there is no brands product type taxonomy, add it.
if ( ! get_term_by( 'slug', 'brands', 'product_type' ) ) {
wp_insert_term( 'brands', 'product_type' );
}
}
register_activation_hook( __FILE__, 'install_taxonomy');
// name
function add_brands_name_field() {
global $product_object;
?>
<div class='options_group show_if_brands'>
<?php
woocommerce_wp_text_input(
array(
'id' => '_brands_name',
'label' => __( 'Brand name', 'vicodemedia' ),
'value' => $product_object->get_meta( '_brands_name', true ),
'default' => '',
'placeholder' => 'Enter brand name',
'data_type' => 'text',
)
);
?>
</div>
<?php
}
// link
function add_brands_link_field() {
global $product_object;
?>
<div class='options_group show_if_brands'>
<?php
woocommerce_wp_text_input(
array(
'id' => '_brands_link',
'label' => __( 'Product link', 'vicodemedia' ),
'value' => $product_object->get_meta( '_brands_link', true ),
'default' => '',
'placeholder' => 'Enter product link',
'data_type' => 'text',
)
);
?>
</div>
<?php
}
add_action( 'woocommerce_product_options_general_product_data', 'add_brands_link_field');
add_action( 'woocommerce_product_options_general_product_data', 'add_brands_name_field');
// Generl Tab not showing up
add_action( 'woocommerce_product_options_general_product_data', function(){
echo '<div class="options_group show_if_brands clear"></div>';
} );
// add show_if_advanced calass to options_group
function enable_product_js() {
global $post, $product_object;
if ( ! $post ) { return; }
if ( 'product' != $post->post_type ) :
return;
endif;
$is_brands = $product_object && 'brands' === $product_object->get_type() ? true : false;
?>
<script type='text/javascript'>
jQuery(document).ready(function () {
//for link tab
jQuery('#general_product_data .pricing').addClass('show_if_brands');
<?php if ( $is_brands ) { ?>
jQuery('#general_product_data .pricing').show();
<?php } ?>
});
</script>
<style>
.woocommerce_options_panel .options_group {
border-top: 0px;
border-bottom: 0px;
}
</style>
<?php
}
add_action( 'admin_footer', 'enable_product_js');
// save data on submission
function save_brands_link( $post_id ) {
$link = isset( $_POST['_brands_link'] ) ? sanitize_text_field( $_POST['_brands_link'] ) : '';
update_post_meta( $post_id, '_brands_link', $link );
}
add_action( 'woocommerce_process_product_meta_brands', 'save_brands_link');
// save data on submission
function save_brands_name( $post_id ) {
$name = isset( $_POST['_brands_name'] ) ? sanitize_text_field( $_POST['_brands_name'] ) : '';
update_post_meta( $post_id, '_brands_name', $name );
}
add_action( 'woocommerce_process_product_meta_brands', 'save_brands_name');
/*
//button
function custom_product_button() {
?>
<a href="<?php the_field('_brands_link'); ?>" class="button alt">Bestel bij
<?php the_field('_brands_name'); ?></a>
<?php
}
add_action( 'woocommerce_single_product_summary', 'custom_product_button', 30 );
*/
if (! function_exists( 'woocommerce_brands_add_to_cart' ) ) {
function brands_add_to_cart() {
//wc_get_template( 'single-product/add-to-cart/brand.php' );
do_action( 'woocommerce_before_add_to_cart_form' );
?>
<form class="cart" action="https://www.google.com">
<?php do_action( 'woocommerce_before_add_to_cart_button' ); ?>
<button style="padding: 18px 40px 18px 40px; height: 55px;" type="submit" name="add-to-cart" value="" class="single_add_to_cart_button button alt">
Bestel bij Google <?php ?>
</button>
<?php do_action( 'woocommerce_after_add_to_cart_button' ); ?>
</form>
<?php
}
add_action('woocommerce_brands_add_to_cart', 'brands_add_to_cart');
}
// END CODE
CONCLUSION: I need to understand how to correctly reference the objects of the classes I created for _brands_link and _brands_name. I do not understand how this should be done, so that it would be displayed in HTML as text (_brands_name) and as a link in the form action = "" (_brands_link):
function brands_add_to_cart() {
do_action( 'woocommerce_before_add_to_cart_form' );
?>
<form class="cart" action="_brands_link">
<?php do_action( 'woocommerce_before_add_to_cart_button' ); ?>
<button style="padding: 18px 40px 18px 40px; height: 55px;" type="submit" name="add-to-cart" value="" class="single_add_to_cart_button button alt">
Bestel bij _brands_name
</button>
<?php do_action( 'woocommerce_after_add_to_cart_button' ); ?>
</form>
<?php
}
Upvotes: 0
Views: 111
Reputation: 311
Since are save them as post meta data, you could get back as meta too
if (! function_exists( 'woocommerce_brands_add_to_cart' ) ) {
function brands_add_to_cart() {
//wc_get_template( 'single-product/add-to-cart/brand.php' );
do_action( 'woocommerce_before_add_to_cart_form' );
?>
<form class="cart" action="<?php echo get_post_meta(get_the_ID(), '_brands_link', true); ?>">
<?php do_action( 'woocommerce_before_add_to_cart_button' ); ?>
<button style="padding: 18px 40px 18px 40px; height: 55px;" type="submit" name="add-to-cart" value="" class="single_add_to_cart_button button alt">
Bestel bij <?php echo get_post_meta(get_the_ID(), '_brands_name', true); ?>
</button>
<?php do_action( 'woocommerce_after_add_to_cart_button' ); ?>
</form>
<?php
}
add_action('woocommerce_brands_add_to_cart', 'brands_add_to_cart');
}
Upvotes: 1