web-dev-qa-db-fra.com

Meta field personnalisé pour la publication personnalisée ne stockant pas de données

J'ai créé un type de message personnalisé nommé freebie dans la mesure où j'ai créé une section méta personnalisée dans laquelle un champ de saisie a été ajouté. Ce qui ne stocke pas les données saisies dans ce champ n’affiche pas non plus les valeurs saisies dans ce champ. J'ai joint le codage.

function adding_freebie_metabox($post) {

    add_meta_box(
          'my-meta-box'
        , __('Freebie extra deatails', 'lwprjs')
        , 'render_my_freebie_metabox'
        , 'freebie'
        , 'normal'
        , 'default'
    );

}

add_action('add_meta_boxes_freebie', 'adding_freebie_metabox');

// Add field
function render_my_freebie_metabox($meta_id) {

    // make sure the form request comes from WordPress
    wp_nonce_field(basename(__FILE__), 'freebie_meta_box_nonce');

    ?>

        Enter freebie details such as URL of download and also demo URL
        <table class="form-table">
            <tbody>
                <tr>
                    <th><label for="freebie-demo">Demo URL</label></th>
                    <td><input style="width: 100%" id="freebie-demo" name="freebie-demo"
                        type="text"
                        value="<?php get_post_meta( $post->ID, $meta_field['freebie-demo'], true ); ?>"></td>
                </tr>
            </tbody>
        </table>

    <?php
}

function food_save_meta_box_data($post_id) {

    // verify meta box nonce
    if (!isset($_POST['freebie_meta_box_nonce']) || !wp_verify_nonce($_POST['freebie_meta_box_nonce'], basename(__FILE__))) {
        return;
    }

    // return if autosave
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }

    // Check the user's permissions.
    if (!current_user_can('edit_post', $post_id)) {
        return;
    }

    // store custom fields values
    // cholesterol string
    if (isset($_REQUEST['freebie-demo'])) {
        update_post_meta($post_id, '_freebie_demo', sanitize_text_field($_POST['freebie-demo']));
    }
}

add_action('save_post_freebie', 'food_save_meta_box_data');
1
James Paul

En fonction de votre code, j'espère que vous avez déjà enregistré votre CPT (type de message personnalisé) fournissant une étiquette valide et des arguments avec la fonction:

register_post_type( 'freebie', $args );

Voici le code complet qui, votre méta-boîte personnalisée ne sera visible que par notre CPT "freebie" avec un champ de saisie pour enregistrer l'URL de démonstration pour ces publications CPT. Ajoutez les lignes de code ci-dessous à votre fichier functions.php

// Adding meta box for freebie custom post type
function demo_url_meta_box() {

    add_meta_box(
        'demo_url_meta_box',
        __( 'Demo URL', '' ),
        'demo_url_meta_box_callback',
        'freebie',
        'side',
        'low'

    );
}

add_action( 'add_meta_boxes_freebie', 'demo_url_meta_box' );
// Callback function of metabox
function demo_url_meta_box_callback( $post ) {

    // Add a nonce field so we can check for it later.
    wp_nonce_field( 'demo_url_nonce', 'demo_url_nonce' );

    // postmeta key: _demo_url
    $demo_url = get_post_meta( $post->ID, '_demo_url', true );


    echo '<textarea style="width:100%" id="freebie-demo" name="freebie-demo">' . esc_attr( $demo_url ) . '</textarea>';
}
/**
 * When the post is saved, saves our custom data.
 *
 * @param int $post_id
 */
function save_demo_url_meta_box_data( $post_id ) {

    // Check if our nonce is set.
    if ( ! isset( $_POST['demo_url_nonce'] ) ) {
        return;
    }

    // Verify that the nonce is valid.
    if ( ! wp_verify_nonce( $_POST['demo_url_nonce'], 'demo_url_nonce' ) ) {
        return;
    }

    // If this is an autosave, our form has not been submitted, so we don't want to do anything.
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }

    // Check the user's permissions.
    if ( isset( $_POST['post_type'] ) && 'page' == $_POST['post_type'] ) {

        if ( ! current_user_can( 'edit_page', $post_id ) ) {
            return;
        }

    }
    else {

        if ( ! current_user_can( 'edit_post', $post_id ) ) {
            return;
        }
    }

    /* OK, it's safe for us to save the data now. */

    // Make sure that it is set.
    if ( ! isset( $_POST['freebie-demo'] ) ) {
        return;
    }

    // Sanitize user input.
    $de_url = sanitize_text_field( $_POST['freebie-demo'] );

    // Update the meta field in the database.
    update_post_meta( $post_id, '_demo_url', $de_url );
}
// add meta box data when save_post is hooked
add_action( 'save_post', 'save_demo_url_meta_box_data' );

J'espère que ceci vous aidera !!!

1
Suresh Sapkota

Peut-être essayez-vous d'ajouter un modèle différent pour montrer cela.

add_filter( 'template_include', 'include_template_function', 1 );

Au dessus du php

function include_template_function( $template_path ) {
    if ( get_post_type() == 'freebies-info' ) {
        if ( is_single() ) {
            // checks if the file exists in the theme first,
            // otherwise serve the file from the plugin
            if ( $theme_file = locate_template( array ( 'freebies-info.php' ) ) ) {
                $template_path = $theme_file;
            } else {
                $template_path = plugin_dir_path( __FILE__ ) . '/freebies_info.php';
            }
        }
    }
    return $template_path;
}

Cette partie if ( get_post_type() == 'freebies-info' ) { devrait être votre register_post_type au lieu de freebies-info Ce code permettant d'ajouter le fichier php, que j'ai utilisé par exemple freebies-info.php. Ensuite, créez un fichier php appelé cela, dans le même dossier. Cela pourrait ressembler à ceci:

<?php
 /*Template Name: New Template
 */

get_header(); ?>
<div id="primary">
    <div id="content" role="main">
    <?php
    $mypost = array( 'post_type' => 'freebies-info', );
    $loop = new WP_Query( $mypost );
    ?>
    <?php while ( have_posts() ) : the_post();?>
        <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
            <header class="entry-header">
                <strong>Title: </strong><?php the_title(); ?><br />
            </header>
                <div class="">
                <?php the_content(); ?>
                </div>
        </article>
    <?php endwhile; ?>
    </div>
</div>
<?php wp_reset_query(); ?>
<?php get_footer(); ?>

Rappelez-vous que j'ai fait cette freebies-info pour yo.

$mypost = array( 'post_type' => 'freebies-info', );

Ici, vous devez mettre ce que vous avez appelé votre register_post_type que vous pouvez trouver où vous avez créé votre type de message personnalisé.

J'espère que cela vous aide ou que vous avez d'autres idées pour y remédier, Goodluck!

1
Willem Munts