it-swarm.com.de

Undefinierte Variable - Benutzerdefinierter Beitragstyp Meta

Ich habe viele verwandte Fragen gelesen und alles versucht, um sicherzustellen, dass es sich tatsächlich um ein Duplikat handelt, bevor ich bitte melde.

Ich benutze WordPress seit ungefähr 6 Jahren. Wenn ich also sage, ich stecke fest, dann meine ich es ernst.

Ich versuche, benutzerdefinierte Meta-Boxen zu einem CPT hinzuzufügen, boat. Unten ist mein Code und der Fehler, den ich erhalte.

Fehlermeldung:

Notice: Undefined variable: boat_make in /path/to/file/wp-content/plugins/syb/admin/class-syb-admin.php on line 150

Diese Fehlermeldung ist für beide Felder gleich.

Hier ist mein Code:

/**
 * Register all of the hooks related to the admin area functionality
 * of the plugin.
 *
 * @since    1.0.0
 * @access   private
 */
private function define_admin_hooks() {

    ...

    /**
     * Add metabox and register custom fields
     *
     * @link https://code.tutsplus.com/articles/rock-solid-wordpress-30-themes-using-custom-post-types--net-12093
     */
    $this->loader->add_action( 'add_meta_boxes', $plugin_admin, 'rerender_meta_options' );
    $this->loader->add_action( 'save_post', $plugin_admin, 'save_meta_options' );

}

...

/**
 * Save Custom Fields
 *
 * @since    1.0.0
 */
public function save_meta_options() {
    if ( ! current_user_can( '' ) ) return;
    global $post;

    update_post_meta($post->ID, "customer_id", $_POST["customer_id"]);
    update_post_meta($post->ID, "boat_make", $_POST["boat_make"]);
}

/**
 * Create a meta box for our custom fields
 *
 * @since    1.0.0
 */ 
public function rerender_meta_options() {
    add_meta_box("boat-meta", "Boat Details", array($this, "display_meta_options"), "boat", "normal", "low");
}

/**
 * Display meta box and custom fields
 *
 * @since    1.0.0
 */  
public function display_meta_options() {
    global $post; 

    $custom = get_post_custom($post->ID);
    var_dump($custom);

    if (isset($custom["customer_id"][0])) {
        $customer_id = $custom["customer_id"][0];
    }  

    ?>
    <label><?php _e( 'Boat Colour:', $this->plugin_name ); ?></label><input name="customer_id" value="<?php echo $customer_id; ?>" /><br>
    <?php 

    if (isset($custom["boat_make"][0])) {
        $boat_make = $custom["boat_make"][0];
    }  

    ?>
    <label><?php _e( 'Boat Make:', $this->plugin_name ); ?></label><textarea name="boat_make"><?php echo $boat_make; ?></textarea>
    <?php
}

Loader-Methode:

class Syb_Loader {

/**
 * The array of actions registered with WordPress.
 *
 * @since    1.0.0
 * @access   protected
 * @var      array    $actions    The actions registered with WordPress to fire when the plugin loads.
 */
protected $actions;

/**
 * The array of filters registered with WordPress.
 *
 * @since    1.0.0
 * @access   protected
 * @var      array    $filters    The filters registered with WordPress to fire when the plugin loads.
 */
protected $filters;

/**
 * Initialize the collections used to maintain the actions and filters.
 *
 * @since    1.0.0
 */
public function __construct() {

    $this->actions = array();
    $this->filters = array();

}

/**
 * Add a new action to the collection to be registered with WordPress.
 *
 * @since    1.0.0
 * @param    string               $hook             The name of the WordPress action that is being registered.
 * @param    object               $component        A reference to the instance of the object on which the action is defined.
 * @param    string               $callback         The name of the function definition on the $component.
 * @param    int                  $priority         Optional. The priority at which the function should be fired. Default is 10.
 * @param    int                  $accepted_args    Optional. The number of arguments that should be passed to the $callback. Default is 1.
 */
public function add_action( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) {
    $this->actions = $this->add( $this->actions, $hook, $component, $callback, $priority, $accepted_args );
}

/**
 * Add a new filter to the collection to be registered with WordPress.
 *
 * @since    1.0.0
 * @param    string               $hook             The name of the WordPress filter that is being registered.
 * @param    object               $component        A reference to the instance of the object on which the filter is defined.
 * @param    string               $callback         The name of the function definition on the $component.
 * @param    int                  $priority         Optional. The priority at which the function should be fired. Default is 10.
 * @param    int                  $accepted_args    Optional. The number of arguments that should be passed to the $callback. Default is 1
 */
public function add_filter( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) {
    $this->filters = $this->add( $this->filters, $hook, $component, $callback, $priority, $accepted_args );
}

/**
 * A utility function that is used to register the actions and hooks into a single
 * collection.
 *
 * @since    1.0.0
 * @access   private
 * @param    array                $hooks            The collection of hooks that is being registered (that is, actions or filters).
 * @param    string               $hook             The name of the WordPress filter that is being registered.
 * @param    object               $component        A reference to the instance of the object on which the filter is defined.
 * @param    string               $callback         The name of the function definition on the $component.
 * @param    int                  $priority         The priority at which the function should be fired.
 * @param    int                  $accepted_args    The number of arguments that should be passed to the $callback.
 * @return   array                                  The collection of actions and filters registered with WordPress.
 */
private function add( $hooks, $hook, $component, $callback, $priority, $accepted_args ) {

    $hooks[] = array(
        'hook'          => $hook,
        'component'     => $component,
        'callback'      => $callback,
        'priority'      => $priority,
        'accepted_args' => $accepted_args
    );

    return $hooks;

}

/**
 * Register the filters and actions with WordPress.
 *
 * @since    1.0.0
 */
public function run() {

    foreach ( $this->filters as $hook ) {
        add_filter( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] );
    }

    foreach ( $this->actions as $hook ) {
        add_action( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] );
    }

}

}
1
yobddigi

Bevor Sie Ihre Metadaten speichern, haben Sie if ( ! current_user_can( '' ) ) return

Ich habe current_user_can noch nie für eine leere Zeichenfolge von Funktionen ausgeführt, daher bin ich mir nicht sicher, wie Ihre Ergebnisse aussehen werden, aber es ist sehr wahrscheinlich, dass dies eine falsche zurückgibt, und Sie kehren an diesem Punkt zurück.

Stellen Sie außerdem sicher, dass Sie Ihre $ _POST-Daten bereinigen, bevor Sie sie in die Datenbank übernehmen.

1
De Coder

Es ist nicht einmal $ custom ["boat_make"] [0], aber nicht einmal $ custom ["boat_make"] gesetzt.

Aus diesem Grund können Sie nicht fragen: if (isset($custom["boat_make"][0]))

Überprüfen Sie Ihre Datenbank und prüfen Sie, ob das Post-Meta für "boat_make" vorhanden ist.

Wie sieht es aus, wenn Sie Ihre var_dump($custom); tun?

0
De Coder