web-dev-qa-db-ja.com

カスタム投稿のWordpressカスタムメタフィールドにデータが保存されていない

私は入力フィールドを追加したカスタムメタセクションを作成したという点で、freebieという名前のカスタム投稿タイプを作成しました。そのフィールドに入力されたデータも格納されていませんが、そのフィールドに入力された値も表示されません。コーディングを付けました。

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

あなたのコードに基づいて、あなたが既に有効なラベルと引数を提供するあなたのCPT(カスタム投稿タイプ)をfunctionに登録していることを願います:

register_post_type( 'freebie', $args );

これは完全なコードです。カスタムメタボックスは、このCPT投稿のデモURLを保存するための入力フィールドを持つ「景品」CPTにのみ表示されます。次のコードを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' );

これがお役に立てば幸いです!

1
Suresh Sapkota

それを示すために別のテンプレートを追加してみてください。

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

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;
}

この部分のif ( get_post_type() == 'freebies-info' ) {register_post_typeの代わりにあなたのfreebies-infoであるべきです。phpファイルを追加するためのこのコードは、私は例えばfreebies-info.phpを使用しました。それからそれと同じphpファイルを同じフォルダに作成します。これは次のようになります。

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

私はあなたのためにこの景品情報を作ったことを忘れないでください。

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

ここにあなたがあなたがあなたのあなたのcostum投稿タイプを作った場所を見つけることができるあなたのregister_post_typeと呼んだものは何でも置くべきです。

これがあなたの手助けになることを、またはあなたがそれを解決する方法をさらにいくつかのアイデアを得られることを願っています、Goodluck!

1
Willem Munts