web-dev-qa-db-ja.com

CPTメタボックスを保存できません

私はすべてのチュートリアルを試し、すべてのStack Overflowスレッドを調べて、自分が何をしているのかを理解することを誓います。 ...メタボックスは簡単に作成できましたが、保存することはできません。

下記は私のfunctions.phpファイルの各セクションのコードです。

CPTを作成します。

add_action( 'init', 'create_post_type' );
function create_post_type() {
  register_post_type( 'Sermon',
    array(
       'labels' => array(
        'name' => __( 'Sermons' ),
        'slug' => __('sermon'),
        'singular_name' => __('Sermon'),
        'edit_item' => __('Edit Sermon'),
        'add_new_item' => __('Add New Sermon'),
        'add_new' => __('New Sermon'),
        'not_found' => __('Looks like you have not uploaded any sermons! Get      started by clicking "Add New Sermon" in the menu bar.')
      ),
      'public' => true,
      'has_archive' => true,
      'menu_icon' => 'dashicons-book-alt',
      'menu_position' => 5,
      'supports' => array ('title', 'editor', 'revisions', 'date', 'thumbnail')
    )
  );
}

メタボックスの作成

function sermon_video_settings_markup($object) {

    wp_nonce_field(basename(__FILE__), "sermon_video_meta_nonce");
    ?>
    <style>
        .sermon_video_settings_table {
            width: 100%;
        }

        tr.sermon_video_settings_rows {
            width: 50%;
        }

        .sermon_video_text_input, .sermon_audio_link {
         width: 100%;

        }

    </style>
    <table class="sermon_video_settings_table">
        <tr class="sermon_video_settings_rows">
            <td>
                <label>Sermon Vimeo Link:</label>
            </td>
            <td>
                <label>Sermon Youtube Link:</label>
            </td>
        </tr>
        <tr class="sermon_video_settings_rows">
            <td>
                <input class="sermon_video_text_input" type="text"     name="sermon_vimeo_link" value="<?php echo get_post_meta($object->ID,     "sermon_vimeo_link", true); ?>">
            </td>
            <td>
                <input class="sermon_video_text_input" type="text"     name="sermon_youtube_link" value="<?php echo get_post_meta($object->ID,     "sermon_youtube_link", true); ?>">
            </td>
        </tr>
        <tr>
            <td>
                <label>Sermon Audio File:</label>
            </td>
            <td>

            </td>
        </tr>
        <tr>
            <td>
                <input class="sermon_audio_link" type="text"     name="sermon_audio_link" value="<?php echo get_post_meta($object->ID,     "sermon_audio_link", true); ?>">
            </td>
        </tr>
    </table>
<?php
}

function sermon_video_settings_meta(){

    add_meta_box("sermon_video_settings", "Sermon Video Settings",     "sermon_video_settings_markup", "sermon", "normal", "high", null);
}

add_action("add_meta_boxes", "sermon_video_settings_meta");

最後に、ここに私の "保存/編集/取得"コードが機能していないようです...

function save_custom_meta_box($post_id, $post, $update)
{
    if (!isset($_POST["sermon_video_meta_nonce"]) ||     !wp_verify_nonce($_POST["sermon_video_meta_nonce"], basename(__FILE__)))
        return $post_id;

    if(!current_user_can("edit_post", $post_id))
        return $post_id;

    if(defined("DOING_AUTOSAVE") && DOING_AUTOSAVE)
        return $post_id;

    $slug = "sermon";
    if($slug != $post->post_type)
        return $post_id;

    $sermon_vimeo_link = "";
    $meta_box_dropdown_value = "";

    if(isset($_POST["sermon_vimeo_link"]))
    {
        $meta_box_text_value = $_POST["sermon_vimeo_linkt"];
    }   
    update_post_meta($post_id, "sermon_vimeo_link", $meta_box_text_value);

    if(isset($_POST["sermon_youtube_link"]))
    {
        $meta_box_dropdown_value = $_POST["sermon_youtube_link"];
    }   
    update_post_meta($post_id, "sermon_youtube_link",     $meta_box_dropdown_value);

}

add_action("save_post", "save_custom_meta_box", 10, 3);

どんな助けでも素晴らしいでしょう。私はあまりにも多くの時間これに取り組んできました、そして私は本当にただ欲求不満になり始めています。私はこのワードプレスのカスタマイズの深さにはかなり慣れていないので、答えがかなり単純であれば私は驚かないでしょう。参考までに、次のチュートリアルは、私がメタボックスを作成して関数を保存するためのガイドとして使用したものです。

http://www.sitepoint.com/adding-custom-meta-boxes-to-wordpress/

1
AJ Fick

それはあなたの臨時世代とチェックしています...

あなたはまたあなたのオーディオリンクを保存していませんでした、そして私はメタアップの設定をきれいにしました(URLをサニタイズして条件を修正しました)

これは私にとってはローカルで動作します

<?php


add_action( 'init', 'create_post_type' );
function create_post_type() {
    register_post_type( 'Sermon',
        array(
            'labels'        => array(
                'name'          => __( 'Sermons' ),
                'slug'          => __( 'sermon' ),
                'singular_name' => __( 'Sermon' ),
                'edit_item'     => __( 'Edit Sermon' ),
                'add_new_item'  => __( 'Add New Sermon' ),
                'add_new'       => __( 'New Sermon' ),
                'not_found'     => __( 'Looks like you have not uploaded any sermons! Get      started by clicking "Add New Sermon" in the menu bar.' )
            ),
            'public'        => true,
            'has_archive'   => true,
            'menu_icon'     => 'dashicons-book-alt',
            'menu_position' => 5,
            'supports'      => array( 'title', 'editor', 'revisions', 'date', 'thumbnail' )
        )
    );
}

function sermon_video_settings_markup( $object ) {

    wp_nonce_field( 'sermon_nonce_action', 'sermon_nonce_field' );
    ?>
    <style>
        .sermon_video_settings_table {
            width: 100%;
        }

        tr.sermon_video_settings_rows {
            width: 50%;
        }

        .sermon_video_text_input, .sermon_audio_link {
            width: 100%;

        }

    </style>
    <table class="sermon_video_settings_table">
        <tr class="sermon_video_settings_rows">
            <td>
                <label>Sermon Vimeo Link:</label>
            </td>
            <td>
                <label>Sermon Youtube Link:</label>
            </td>
        </tr>
        <tr class="sermon_video_settings_rows">
            <td>
                <input class="sermon_video_text_input" type="text" name="sermon_vimeo_link" value="<?php echo get_post_meta( $object->ID, "sermon_vimeo_link", true ); ?>">
            </td>
            <td>
                <input class="sermon_video_text_input" type="text" name="sermon_youtube_link" value="<?php echo get_post_meta( $object->ID, "sermon_youtube_link", true ); ?>">
            </td>
        </tr>
        <tr>
            <td>
                <label>Sermon Audio File:</label>
            </td>
            <td>

            </td>
        </tr>
        <tr>
            <td>
                <input class="sermon_audio_link" type="text" name="sermon_audio_link" value="<?php echo get_post_meta( $object->ID, "sermon_audio_link", true ); ?>">
            </td>
        </tr>
    </table>
<?php
}

function sermon_video_settings_meta() {

    add_meta_box( "sermon_video_settings", "Sermon Video Settings", "sermon_video_settings_markup", "sermon", "normal", "high", null );
}

add_action( "add_meta_boxes", "sermon_video_settings_meta" );


function save_custom_meta_box( $post_id, $post, $update ) {
    if ( ! isset( $_POST['sermon_nonce_field'] )
         || ! wp_verify_nonce( $_POST['sermon_nonce_field'], 'sermon_nonce_action' )
    ) {
        return $post_id;
    }

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

    if ( defined( "DOING_AUTOSAVE" ) && DOING_AUTOSAVE ) {
        return $post_id;
    }

    $slug = "sermon";
    if ( $slug != $post->post_type ) {
        return $post_id;
    }


    if ( isset( $_POST["sermon_vimeo_link"] ) ) {
        $value = esc_url_raw( $_POST["sermon_vimeo_link"] );
        update_post_meta( $post_id, "sermon_vimeo_link", $value );
    }


    if ( isset( $_POST["sermon_youtube_link"] ) ) {
        $value = esc_url_raw( $_POST["sermon_youtube_link"] );
        update_post_meta( $post_id, "sermon_youtube_link", $value );
    }


    if ( isset( $_POST["sermon_audio_link"] ) ) {
        $value = esc_url_raw( $_POST["sermon_audio_link"] );
        update_post_meta( $post_id, "sermon_audio_link", $value );
    }



}

add_action( "save_post", "save_custom_meta_box", 10, 3 );
0
setterGetter