it-swarm.com.de

Benutzerdefiniertes Wordpress-Metafeld für benutzerdefinierte Posts, in denen keine Daten gespeichert werden

Ich habe einen benutzerdefinierten Beitragstyp mit dem Namen "Freebie" erstellt, indem ich einen benutzerdefinierten Meta-Abschnitt erstellt habe, in dem ein Eingabefeld hinzugefügt wurde. Die Daten, die in diesem Feld eingegeben wurden, werden nicht gespeichert, und die in diesem Feld eingegebenen Werte werden nicht angezeigt. Ich habe die Codierung angehängt.

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

Hoffen Sie, dass Sie Ihren CPT (benutzerdefinierten Beitragstyp) basierend auf Ihrem Code bereits registriert haben und gültige Beschriftungen und Argumente mit folgenden Funktionen bereitstellen:

register_post_type( 'freebie', $args );

Hier ist der vollständige Code, den Ihre benutzerdefinierte Meta-Box nur für unser "Freebie" -CPT mit einem Eingabefeld sichtbar macht, um die Demo-URL für diese CPT-Posts zu speichern. Fügen Sie die folgenden Codezeilen Ihrer functions.php hinzu

// 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' );

Hoffe das wird dir helfen !!!

1
Suresh Sapkota

Versuchen Sie vielleicht, eine andere Vorlage hinzuzufügen, um dies zu zeigen.

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

Oben auf dem 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;
}

Dieser Teil if ( get_post_type() == 'freebies-info' ) { sollte Ihr register_post_type anstelle von freebies-info sein. Dieser Code zum Hinzufügen der PHP-Datei, die ich zum Beispiel freebies-info.php verwendet habe. Dann erstellen Sie eine PHP-Datei mit dem Namen, in demselben Ordner. Das könnte so aussehen:

<?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(); ?>

Denken Sie daran, dass ich diese Werbegeschenke-Info für Sie gemacht habe.

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

Hier sollten Sie Ihren register_post_type eintragen, den Sie dort finden, wo Sie Ihren Kostümposttyp erstellt haben.

Ich hoffe, das hilft dir oder du bekommst weitere Ideen, wie du das Problem beheben kannst, Goodluck!

1
Willem Munts