2014-01-20 4 views
3

В настоящее время я создаю виджет, чтобы отображать регистрационную форму на веб-сайте WordPress, использующем WooCommerce. На данный момент у меня есть только 3 основных поля: электронная почта, пароль, пароль повторения. Я с нетерпением жду добавления дополнительных полей WooCommerce, но хочу решить эту проблему, прежде чем перейти к следующему шагу.WooCommerce Registration Shortcode - Проблемы с сообщениями об ошибках

У меня возникли проблемы с выходом сообщений (неправильный пароль, учетная запись уже существует и т. Д.).

Я искал в Интернете и не было никакого короткого кода, уже созданного для регистрации WooCommerce, рядом с их страницей регистрации. Поэтому я пошел дальше и создал короткий код с частью шаблона.

function custom_register_shortcode($atts, $content){ 
    global $woocommerce; 
    $form = load_template_part('framework/views/register-form'); 
    return $form; 
} 
add_shortcode('register', 'custom_register_shortcode'); 

Это фрагмент я использую, чтобы получить часть шаблона внутри переменной, так как функция по умолчанию будет «эхо» содержание вместо «возвращения» его.

function load_template_part($template_name, $part_name=null) { 
    ob_start(); 
    get_template_part($template_name, $part_name); 
    $var = ob_get_contents(); 
    ob_end_clean(); 
    return $var; 
} 

Итак, проблема, когда я называю woocommerce_show_messages или $woocommerce->show_messages(); из моего шаблона части, ничего не отображается, или, если она есть, она показывает в верхней части страницы.

я пытаюсь поставить звонки внутри моей функции SHORTCODE:

function custom_register_shortcode($atts, $content){ 
    global $woocommerce; 
    $woocommerce->show_messages(); 
    $form = load_template_part('framework/views/register-form'); 
    return $form; 
} 
add_shortcode('register', 'custom_register_shortcode'); 

Это, выходное сообщение внутри <head> тега, который не то, что я хочу.

Я попытался сделать тот же трюк с ob_start(), ob_get_contents() и ob_clean(), но ничего не показал. Переменная будет пустой.

Я тоже пытаюсь зацепить woocommerce_show_messages к действию, как пилой в ядре:

add_action('woocommerce_before_shop_loop', 'woocommerce_show_messages', 10);

что-то вроде:

add_action('before_registration_form', 'woocommerce_show_messages');

И я добавил это в моем шаблоне -коробь:

<?php do_action('before_registration_form'); ?>

Но мне все еще не удается получить сообщения об ошибках внутри коробки. Он всегда будет вставлен в <head>

Я поделюсь окончательным решением, когда все будет готово.

Спасибо за ваше время,

Julien

ответ

2

я, наконец, получил эту работу, зацепив пользовательскую функцию к действию, которое называется в моих header.php

Я думаю, перекинув функции внутри шаблона часть не работайте по назначению.

В заголовке.PHP, я получил это:

do_action('theme_after_header');

И вот зацепило функция. Работает отлично.

function theme_show_messages(){ 
    woocommerce_show_messages(); 
} 

add_action('theme_after_header', 'theme_show_messages'); 

Однако, я рассмотрю «отцепление» оригинальной функции сообщения шоу, так как она может отображаться дважды. Нужно проверить некоторые более;)

2

Вы также можете просто использовать [woocommerce_messages] шорткод в шаблоне, где вы хотите его отображается

0

Ответ на немного старый вопрос, но вы также можете попробовать следующее:

$message = apply_filters('woocommerce_my_account_message', ''); 

if (! empty($message)) { 
    wc_add_notice($message); 
} 
Смежные вопросы