En lugar de bloquear continuamente un sitio en vivo, la mejor práctica es crear una copia del sitio (a menudo llamada prueba). Luego, puede intentarlo directamente y, si falla, simplemente puede volver a copiarlo. Su anfitrión PUEDE proporcionar sitios de prueba; también hay complementos que crean sitios de prueba. https://wordpress.org/plugins/search/staging/
Una vez que tenga un espacio seguro, podrá probar sus soluciones. Una parte clave es configurar el registro de depuración para que, cuando se produzca un fallo, pueda analizar el motivo; consulte también https://developer.wordpress.org/advanced-administration/debug/debug-wordpress/
No puedes prescindir de WooCommerce, ya que lo necesitas para vender tus fotos. Supongo que el código PHP que estás usando es defectuoso. ¿Puedes mostrárnoslo? Utilice el bloque de código aquí en el foro: https://wordpress.org/support/forum-user-guide/block-editor/#code-block
Allen y Threadi,
Gracias a ambos por responder. Regresé al sitio y al panel. Pude localizar el mensaje de error en el registro de errores:
Error fatal de PHP: Error no detectado: llamada a una función miembro get_page_permastruct() en nulo en /dom1149977/wp-includes/link-template.php:435
Seguimiento de pila: 0 /dom1149977/wp-includes/link-template.php(397): _get_page_link(Object(WP_Post), false, false) 1 /dom1149977/wp-includes/link-template.php(197): get_page_link(Object(WP_Post), false, false) 2 /dom1149977/wp-content/plugins/woocommerce/includes/wc-page-functions.php(98): get_permalink(Object(WP_Post)) 3 /dom1149977/wp-content/plugins/woocommerce/includes/wc-core-functions.php(1410): wc_get_page_permalink(‘carrito’) 4 /dom1149977/wp-content/plugins/code-snippets/php/snippet-ops.php(663): código evaluado() (4): wc_get_cart_url() 5 /dom1149977/wp-content/plugins/code-snippets/php/snippet-ops.php(663): eval() 6 /dom1149977/wp-content/plugins/code-snippets/php/evaluación/class-evaluate-functions.php(170): Code_Snippets\execute_snippet(‘\n$product_id = …’, 9) 7 /dom1149977/wp-content/plugins/code-snippets/php/evaluate/class-evaluate-functions.php(150): Evaluación\Evaluate_Functions->evaluate_db_snippets() 8 /dom1149977/wp-includes/class-wp-hook.php(341): Evaluación\Evaluate_Functions->evaluate_early() 9 /dom1149977/wp-includes/class-wp-hook.php(365): WP_Hook->apply_filters(NULL, Array) 10 /dom1149977/wp-includes/plugin.php(522): WP_Hook->do_action(Array) 11 /dom1149977/wp-settings.php(593): do_action(‘plugins_loaded’) 12 /dom1149977/wp-config.php(54): require_once(‘/dom1149977/wp-…’) 13 /dom1149977/wp-load.php(50): require_once(‘/dom1149977/wp-…’) 14 /dom1149977/wp-admin/admin.php(35): require_once(‘/dom1149977/wp-…’) 15 /dom1149977/wp-admin/plugins.php(10): require_once(‘/dom1149977/wp-…’) 16 {principal}
lanzado en /dom1149977/wp-includes/link-template.php en la línea 435
Todavía estoy buscando una manera de acceder al código php. Puedo ver en la base de datos phpAdmin la entrada del código php. En Internet, hay sugerencias que dicen que el código es incorrecto, al intentar llamar a la función wc_get_car_url() antes de que se cargue el complemento…
Muchas gracias por el registro de errores. De esto ya queda claro que un fragmento de código PHP específico parece estar causando el error. Por lo tanto, todavía me gustaría saber más sobre el fragmento de PHP que insertó allí.
$product_id = 123;$add_to_cart_url = wc_get_cart_url() .
'?add-to-cart=" . $product_id .
"&image_file=" . urlencode($filename);
?>
Add To Cart
Lo anterior es el código. Me doy cuenta de que un problema es que $add_to_cart_url aún no está listo.
Hay sugerencias para agregar un retraso para llamar a wc_get_cart_url()
add_action( "template_redirect', 'my_custom_redirect_function' );function my_custom_redirect_function() {
// WordPress is fully loaded now
$cart_url = wc_get_cart_url();
// ... your other code here
}
¿Se ve bien? ¡Cualquier ayuda será muy apreciada!
El código anterior utiliza una variable desconocida llamada $filename. Sin embargo, si inserta el código exactamente como aparece aquí como un fragmento de código, inmediatamente provocará un error. La razón es que utiliza la función. wc_get_cart_url()entre otras cosas, que simplemente no existe cuando se ejecuta de forma aislada sin ningún contexto.
Debe ejecutar este código dentro de un contexto específico. Normalmente, esto se hace mediante ganchos en WordPress. Entonces la pregunta es: ¿dónde realmente quieres ejecutar este código? En otras palabras, ¿en qué parte del sitio web se debe colocar este enlace generado? Dependiendo de esto, se le podrá decir qué gancho es el adecuado para este propósito. Sin embargo, el template_redirect El gancho me parece incorrecto en este contexto.
Aún no he incorporado el código a WordPress. Agregué un fragmento (que publiqué anteriormente). Cuando lo guardé, el sitio falló. El fragmento se utilizó en cualquier página todavía. ¿No es eso interesante? En el pasado, los errores aparecían en la página que tenía problemas, no bloqueaba todo el sitio. Y en este caso, no me he conectado a la página de WordPress. Simplemente crearlo causaría un error como ese.
Este es el escenario: tengo toneladas de imágenes. Moví 100 a la biblioteca multimedia en WordPress. Cada imagen tiene título, nombre de archivo, leyenda, descripción, etc.
Usando
En la página Nubes, al hacer clic en una miniatura se abre la página Foto que muestra una imagen grande de la foto, con un botón que dice «Comprar foto». Aquí está el fragmento:
function get_display_photo_shortcode() {$name = isset($_GET['image_name']) ? sanitize_text_field($_GET['image_name']) : '';
$page = isset($_GET['from']) ? sanitize_text_field($_GET['from']) : '';
$caption = isset($_GET['caption']) ? sanitize_text_field($_GET['caption']) : '';
ob_start();
?>
return ob_get_clean();
}
En la página Comprar foto, me gustaría mostrar tres opciones de tamaños y sus precios de la impresión física de la foto. Luego, muestre el botón «Agregar al carrito», que esperaba usar en el fragmento anterior. «Agregar al carrito» lleva el flujo a WooCommerce. La página Comprar foto debería funcionar para todas las imágenes. El enlace “Purhcase Test” (Prueba de compra funciona porque apuntaba a un producto (estático) registrado en la lista de productos de WooCommerce. Me gustaría que el enlace Comprar foto funcione para todas las imágenes de forma dinámica.
¿Tiene sentido?
Sí, ya veo. Es un proyecto interesante y lo entiendo totalmente.
Entonces desea agregar otro botón a la página «Comprar foto». ¿Qué tipo de página es esa? ¿La creó usted mismo como una página independiente o es una página de producto único de WooCommerce?
Agregué un fragmento (que publiqué anteriormente). Cuando lo guardé, el sitio falló.
Por supuesto, el código se ejecuta exactamente como está escrito, sin que las funciones que requiere hayan sido declaradas de antemano. No sé por qué solía funcionar para ti. Podría ser una configuración en el complemento del fragmento de código que estás utilizando. O tal vez solías insertar el código de manera diferente. En cualquier caso, según lo que he leído aquí, este enfoque definitivamente no funcionará y dará como resultado exactamente este error.
Gracias por tu paciencia.
Llamé a GoDaddy para desinstalar el fragmento de código y woocommerce. El sitio estaba activo. Los instalé nuevamente. el sitio colapsó. Llama a Godaddy para que haga lo mismo. Sitio arriba. Fragmento de código instalado y woocommerce. Sitio caído.
Pude acceder a Configuración (no al panel de WP) y allí estaba la base de datos phpAdmin. Encontré la tabla de datos del fragmento y el fragmento que agregué ayer. Eliminé el fragmento. Esta era la única forma de eliminarlo y no sabía si funcionaba. Después de eliminarlo, instalé el fragmento de código. se estrelló de nuevo.
Llamé a Godaddy para abrir el sitio. Lo hicieron y me advirtieron que no instalara el fragmento de código. Dije que tenía que tenerlo porque lo necesitaba para hacer la página dinámica. Luego, en Internet, encontré a alguien que me sugirió ir a mydomain/admin y ejecutarlo en modo seguro para recargar. Yo hice eso. Luego, el fragmento volvió a estar en WordPress (no lo volví a instalar), y el único fragmento que funcionó antes de ayer funcionó. El malo ya no estaba.
Necesito tener una forma más estable de abordar este asunto.
Se actualizará sobre el siguiente paso.