Aviso: Intentando obtener propiedad de un no-objeto en options.php

27 feb 2013, 12:04:56
Vistas: 22.9K
Votos: 0

Estoy generando el siguiente aviso en mi options.php cuando pruebo mi tema con wp_debug activado.

Puedo ver dónde está el problema pero no sé cómo solucionarlo.

Parece que el no-objeto está siendo llamado desde el array de taxonomías en options.php ya que el array no puede encontrar el term_id porque no se ha creado un post y/o categoría en el tipo de post personalizado. Cuando creo un post y le asigno una categoría, el aviso desaparece.

// Traer todas las taxonomías personalizadas a un array
$options_password_taxonomies = array();
$taxonomies_password_terms_obj = get_terms('password_gallery_category');
foreach ( $taxonomies_password_terms_obj as $taxonomy) {
    $options_password_taxonomies[$taxonomy->term_id] = $taxonomy->name;
}

// Seleccionar una Categoría para tu Área de Cliente
$options[] = array(
    'name' => __('Galerías Protegidas por Contraseña', 'shutter'),
    'desc' => __('Elige una categoría para las galerías de clientes protegidas por contraseña.', 'shutter'),
    'id' => 'client_area',
    'type' => 'select',
    'options' => $options_password_taxonomies);
0
Todas las respuestas a la pregunta 2
5

Puedes usar isset() o property_exists() para verificar si la propiedad existe.

foreach ( $taxonomies_password_terms_obj as $taxonomy) {
    if( isset( $taxonomy->term_id ) ){
        $options_password_taxonomies[$taxonomy->term_id] = $taxonomy->name;
    }
}
27 feb 2013 12:26:41
Comentarios

Gracias por esto. Soluciona el problema pero genera un nuevo aviso.

¿Debería publicar esto como una nueva pregunta?

Aviso: Índice indefinido: homepage_feature en /inc/options-framework.php en la línea 313

Dean McCann Dean McCann
27 feb 2013 12:38:22

Sí, deberías publicarlo como una nueva pregunta. Antes, ve a esa línea y usa otro isset() antes de usar esa variable de array. Debería solucionarse.

RRikesh RRikesh
27 feb 2013 12:40:44

Gracias. Puedo ver que ya hay un isset() en options-framework.php - pero esto no parece hacer diferencia.

if ( ! isset( $option['id'] ) ) {

continue; }

Dean McCann Dean McCann
27 feb 2013 12:47:48

ok, agregué un nuevo isset() para term_id y esto parece eliminar los errores. gracias por presentarme la magia de isset() :)

Dean McCann Dean McCann
27 feb 2013 12:50:14

ok, esto en realidad no resolvió mi segundo problema, así que publicaré otra pregunta.

Dean McCann Dean McCann
27 feb 2013 14:40:38
0

usa isset($variable_to_check) o is_array($variable_to_check) antes de proceder con foreach porque foreach solo funciona con un array de datos, es decir, tu variable necesita tener miembros

21 feb 2020 16:40:03