J'essaie d'insérer un shortcode via add_action:
add_action('woocommerce_single_product_summary', 'quotation_form', 61);
function quotation_form()
{
$produk = get_the_title();
$shortkode = sprintf(
'[zendesk_request_form size="3" group="extra-field" subject="Quotation For %s"]',
$produk
);
$shortkode = do_shortcode( $shortkode );
echo $shortkode;
}
Mais l'erreur gettin après l'affichage du shortcode:
Erreur non capturée: appelez la fonction get_upsells () sur null dans /home/dev/wp-content/themes/dummy-child/woocommerce/single-product/up-sells.php:25
La ligne associée à l'erreur ci-dessus:
if ( ! $upsells = $product->get_upsells() ) {
return;
}
Source: https://github.com/woocommerce/woocommerce/blob/master/templates/single-product/up-sells.php
Donc je pense:
Le shortcode lui-même s'affiche correctement mais l'arrêt du script est exécuté avec l'erreur ci-dessus
Lorsque j'ai essayé de générer une fonction quotation_form avec un texte renvoyé/renvoyé ou du code HTML, cela fonctionne parfaitement, sans erreur
Ma question est la suivante: comment insérer correctement le shortcode dans le modèle WooCommerce? Est-ce possible de faire ça?
Je vous remercie
J'ai résolu ceci de manière sale. J'espère que quelqu'un d'autre pourra fournir une solution plus efficace, mon code de travail final pour le problème ci-dessus:
$shortkode = '[zendesk_request_form size="3" group="extra-field" subject="Quotation For -wkwkwk-"]';
$shortkode = do_shortcode( $shortkode );
add_action('woocommerce_single_product_summary', 'quotation_form', 61);
function quotation_form()
{
$produk = get_the_title();
global $shortkode;
$shortkode = str_replace("-wkwkwk-", $produk, $shortkode);
echo $shortkode;
}
Donc, je sors de la fonction extérieure do_shorcode, puis le déclare comme variable globale. Le problème est que ma variable $ produk ne fonctionnera pas si elle est déclarée en dehors de la page Wordpress. J'utilise donc str_replace pour remplacer le titre du produit précédent.
Votre problème est que la variable $ product n'est pas définie. Je vois deux solutions possibles:
global $product;
au début de votre fonction.global $product; $product_obj = new WC_Product_Factory(); $product = $product_obj->get_product( "insert product id" );
. Également écrire ceci au début de la fonction.