php - resueltos - formularios html css
Agregue el código abreviado del formulario de inicio de sesión programáticamente a cada página de producto publicada (1)
Tengo una tienda mayorista en WooCommerce. Se requiere iniciar sesión para ver los precios. Esto está configurado y funciona correctamente. Ahora deseo agregar un formulario de inicio de sesión en cada página de producto para mostrarlo solo a los visitantes (no a los usuarios que hayan iniciado sesión).
Estoy usando el complemento Visibilidad del catálogo de WooCommerce. Este plugin ofrece la funcionalidad que describí anteriormente, pero mi tema de alguna manera lo estropea. El autor del complemento dice que hable con el desarrollador del tema y el desarrollador del tema dice que hable con el autor del complemento. Así que ahora estoy tratando de encontrar una solución.
Primer problema: el complemento viene con un código corto [woocommerce_logon_form] que mostrará un formulario de inicio de sesión. No quiero agregar esto manualmente a todos los productos existentes ya que tengo miles de productos en mi sitio. Estoy buscando una manera de obtenerlo a través del código para el diseño de la página del producto.
Encontré este código (para agregarlo a functions.php) para que funcione bien:
// adds notice at single product page above add to cart
add_action( ''woocommerce_single_product_summary'', ''return_policy'', 20 );
function return_policy() {
echo ''<p id="rtrn">30-day return policy offered. See Terms and Conditions for details.</p>'';
}
Sin embargo, solo mostrará texto. El código corto no funcionará cuando se agregue en lugar del texto de muestra.
Segundo problema: el código abreviado muestra el formulario incluso cuando el cliente ya inició sesión.
Actualmente estoy usando este bonito código que muestra u oculta el contenido según si el usuario ha iniciado sesión o no:
add_shortcode( ''access'', ''access_check_shortcode'' );
function access_check_shortcode( $attr, $content = null ) {
extract( shortcode_atts( array( ''capability'' => ''read'' ), $attr ) );
if ( current_user_can( $capability ) && !is_null( $content ) && !is_feed() )
return $content;
return '''';
}
add_shortcode( ''visitor'', ''visitor_check_shortcode'' );
function visitor_check_shortcode( $atts, $content = null ) {
if ( ( !is_user_logged_in() && !is_null( $content ) ) || is_feed() )
return $content;
return '''';
}
Ese código abreviado funciona perfectamente para texto, pero no con otros códigos cortos. Entonces la combinación de estos códigos cortos: [visitante] [woocommerce_logon_form] [/ visitor] no mostrará el formulario de inicio de sesión a los visitantes. En cambio, solo les mostrará esto como texto [woocommerce_logon_form].
¡Por favor ayuda! Estoy seguro de que esto probablemente sea solucionado fácilmente por alguien con habilidades de codificación. Aprecio tu esfuerzo para responder a esta pregunta. Tenga en cuenta que mi comprensión del código es muy limitada y sería genial si también puede indicar en qué archivo agregar o modificar el código.
Para hacer que su código corto funcione en código php o en código php / html, debe usar una función nativa de WordPress
do_shortcode()
... Puede usarlo con su código corto, por ejemplo, en su primera función de esta manera:
add_action( ''woocommerce_single_product_summary'', ''return_policy'', 20 );
function return_policy() {
echo do_shortcode(''[woocommerce_logon_form]'');
}
Y esto funcionará ...
Para ver todos los diferentes woocommerce_single_product_summary
que puede usar en lugar de woocommerce_single_product_summary
, consulte este código de 2 plantillas para elegir en caso de que sea más conveniente:
También puede agregarlo de la misma manera en uno de sus códigos cortos existentes, de esta manera:
add_shortcode( ''visitor'', ''visitor_check_shortcode'' );
function visitor_check_shortcode( $atts, $content = null ) {
if ( ( !is_user_logged_in() && !is_null( $content ) ) || is_feed() )
return do_shortcode(''[woocommerce_logon_form]'');
return '''';
}
Y esto también funcionará.
Ver como referencia esta respuesta: Cambiar el marcado en la salida de código corto de WooCommerce
Entonces, como pueden ver, su problema está resuelto en ambos casos