web-dev-qa-db-ja.com

カスタム投稿として投稿フォーム

私はWordPressに慣れていないので、写真をアップロードしたり、OpenStreetMapで自分の位置を設定したり、いくつかのドロップダウンメニューから選択したりできる特別なフォームを含むWebサイトを作成する必要があります。

これがどのように見えるべきかの例を見つけることができます。 enter image description here

私はすでにこれをしました:

  1. フォームでページテンプレートを作成しました

    <form id="new_post" name="new_post" method="post" action="" enctype="multipart/form-data">

  2. ログインしているユーザーにフォームを送信可能にしました(これは安全な解決策ですか?)

        <?php if ( 0 == $current_user->ID ) {
                         wp_loginout(); 
                         echo " to submit a post";
                    } else {
                      echo '<fieldset class="submit">
                                <input type="submit" value="Los" tabindex="40" id="submit" name="submit" />
                            </fieldset>
                            <input type="hidden" name="action" value="new_post" />';
                            wp_nonce_field( "new-post" ); } ?>
    
  3. フォームが送信されると、このPHPコードが実行されます。

    if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) &&  $_POST['action'] == "new_post") {    
        $new_post = array(
                'post_title'    =>  "roadkill entry",
                'post_content'  =>  "testcontent",
                'post_category' =>  array(0),
                'post_status'   =>  'publish',
                'post_type' =>  'roadkills' // this is my custom post   );
    
        $pid = wp_insert_post($new_post);
    
        $link = get_permalink( $pid );
        wp_redirect( $link );
    }
    

しかし、私は見つからないページで終わります。 http://www.citizen-science.at/wordpress/roadkill/eintrag-hinzufugen/

管理GUIからエントリを作成すると、単一の投稿は表示できますが、アーカイブは表示できません http://www.citizen-science.at/wordpress/roadkills/dafdf/

そうそう、私は自分の投稿タイプを登録しています。

<?php 
add_action( 'init', 'create_post_type' );
function create_post_type() {
    register_post_type( 'roadkills',
        array(
            'labels' => array(
                'name' => __( 'Roadkills' ),
                'singular_name' => __( 'Roadkill' )
            ),
        'public' => true,
        'has_archive' => true,
        )
    );
}

私はここで何が恋しいですか? (私は昨日すでに動いていますが、どういうわけか壊れました)

1
4ndro1d

次のコードを試してみることをお勧めします。

<?php 
add_action( 'init', 'create_post_type' );
function create_post_type() {
    register_post_type( 'roadkills',
        array(
            'labels' => array(
                'name' => __( 'Roadkills' ),
                'singular_name' => __( 'Roadkill' )
            ),
        'public' => true,
        'has_archive' => true,
        'rewrite' => array('slug' => 'roadkills')
        )
    );
}

あなたの登録投稿タイプ関数内に欠けている 'rewrite' => array( 'slug' => 'roadkills')がパーマリンクエラーにつながると思います上記の行を追加することで解決できます。

1
flowdee

あなたのテーマフォルダ内にarchive-{YOUR_POST_TYPE}.phpというページ名を作成してください。あなたの場合はarchive-roadkills.php。あなたのアーカイブページがこのページをキャッチしているかどうかをテストしますか?

もしそうなら、あなたは好きなようにページを編集することができます。既存のarchive.phpからコードをコピーするのか、それとも自分のコードからコピーするのか。

参照: テンプレート階層コーデックス

1
Sudeep K Rana