this articleに基づいて、私のWebサイトにカスタムのフロントエンド発行フォームがあります。
このコードをページの中に入れても問題なく動作しますが、フロントエンドページ(ホームページ)の場合は機能しません。フォームを送信すると、archive.phpページ(アーカイブ)にリダイレクトされます。自分のフォームで選択したpost_categoryからのページ。
'post_category' => array($_POST['cat'])
<!-- post Category -->
<fieldset class="category">
<label for="cat">Catégorie :</label>
<?php wp_dropdown_categories( 'tab_index=10&taxonomy=category&hide_empty=0&show_option_all=Choisissez une catégorie' ); ?>
</fieldset>
誰もがなぜそれが他のすべてのページでは動作するが、フロントページでは動作しないのか知っていますか?
これが私のphpコードです。
<?php
if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == "new_post") {
// Do some minor form validation to make sure there is content
if (isset ($_POST['title'])) {
$title = $_POST['title'];
} else {
echo 'veuillez entrer un titre';
}
if (isset ($_POST['description'])) {
$description = $_POST['description'];
} else {
echo 'veuillez entrer du texte';
}
$genre = $_POST['genre'];
$tranche_age = $_POST['tranche_age'];
// ADD THE FORM INPUT TO $new_post ARRAY
$new_post = array(
'post_title' => $title,
'post_content' => $description,
'post_category' => array($_POST['cat']), // Usable for custom taxonomies too
//'tax_input' => array( 'regions' => '14' ),
'post_status' => 'publish', // Choose: publish, preview, future, draft, etc.
'post_type' => 'post', //'post',page' or use a custom post type if you want to
//'genre' => $genre,
//'tranche_age' => $tranche_age,
);
//SAVE THE POST
$pid = wp_insert_post($new_post);
wp_set_post_terms($pid,array($_POST['regions']),'regions',true);
wp_set_post_terms($pid,array($_POST['sexes']),'sexes',true);
wp_set_post_terms($pid,array($_POST['ages']),'ages',true);
//REDIRECT TO THE NEW POST ON SAVE
$link = site_url();
wp_redirect( $link );
//ADD OUR CUSTOM FIELDS
//add_post_meta($pid, 'genre', $genre, true);
//add_post_meta($pid, 'tranche_age', $tranche_age, true);
} // END THE IF STATEMENT THAT STARTED THE WHOLE FORM
//POST THE POST YO
do_action('wp_insert_post', 'wp_insert_post');
?>
<div id="container">
<div id="content" role="main">
<!-- FRONT END PUBLISHING -->
<div class="wpcf7">
<form id="new_post" name="new_post" method="post" action="" class="wpcf7-form" enctype="multipart/form-data">
<!-- post name -->
<fieldset name="name">
<label for="title">Titre:</label>
<input type="text" id="title" value="" tabindex="5" name="title" />
</fieldset>
<!-- post Category -->
<fieldset class="category">
<label for="cat">Catégorie :</label>
<?php wp_dropdown_categories( 'tab_index=10&taxonomy=category&hide_empty=0&show_option_all=Choisissez une catégorie' ); ?>
</fieldset>
<!-- post regions -->
<fieldset class="regions">
<label for="regions">Région :</label>
<?php wp_dropdown_categories( 'name=regions&tab_index=10&taxonomy=regions&hide_empty=0&show_option_all=Choisissez une catégorie' ); ?>
</fieldset>
<!-- post Content -->
<fieldset class="content">
<label for="description">Question :</label>
<textarea id="description" tabindex="14" name="description" cols="80" rows="10"></textarea>
</fieldset>
<!-- Genre -->
<input type="hidden" id="sexes" name="sexes" value="26" />
<!-- Tranche d'âge -->
<?php $date_of_birth = um_user('birth_date'); $age = CalculateAge($date_of_birth); ?>
<?php if ($age >= 18 && $age <= 25) :?>
<input type="hidden" value="28" id="ages" name="ages" />
<?php endif; ?>
<?php if ($age >= 26 && $age <= 35) :?>
<input type="hidden" value="29" id="ages" name="ages" />
<?php endif; ?>
<?php if ($age >= 36 && $age <= 45) :?>
<input type="hidden" value="30" id="ages" name="ages" />
<?php endif; ?>
<?php if ($age >= 46) :?>
<input type="hidden" value="31" id="ages" name="ages" />
<?php endif; ?>
<fieldset class="submit">
<input type="submit" value="Envoyer" tabindex="40" id="submit" name="submit" />
</fieldset>
<input type="hidden" name="action" value="new_post" />
<?php wp_nonce_field( 'new-post' ); ?>
</form>
</div>
</div>
</div>
@TheDeadMedicのおかげで、私は解決策を見つけました。私は予約語を使用しました、そしてそれがWordpressが私の入力を質問パラメータとして解釈した理由です。
そのため、たとえば私のカテゴリでは、自分の形式でクラスを変更する必要がありました。
'post_category' => array($_POST['cat']), // Usable for custom taxonomies too
によって
'post_category' => array($_POST['my_cat']), // Usable for custom taxonomies too
そして私の形ではクラス名 "cat" by "my_cat"。
予約語を使用するたびにこれを変更する必要がありました。
そして今、それは完全にうまくいきます!