2017-03-03 21 views
0

チェックボックスで処理される投稿にカスタムフィールド "見出し"を作成しました。今私は、投稿が保存され、チェックボックスがチェックされると、すべての "見出し"チェックボックスが他の投稿で空になります。これが正しく動作する場合は、そのチェックボックスをオンにして他の1つの投稿のみを選択してください。Wordpress固有のチェックボックス

function createHeadlineField() 
{ 
$post_id = get_the_ID(); 

if (get_post_type($post_id) != 'post') { 
    return; 
} 

$value = get_post_meta($post_id, '_headline_field', true); 
wp_nonce_field('headline_nonce_'.$post_id, 'headline_nonce'); 
?> 
<div class="misc-pub-section misc-pub-section-last"> 
    <label><input type="checkbox" value="1" <?php checked($value, true, true); ?> name="_headline_field" /><?php _e('This post is the top Story', 'pmg'); ?></label> 
</div> 
<?php 
} 

function saveHeadlineField($post_id) 
{ 
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { 
    return; 
} 

if (
    !isset($_POST['headline_nonce']) || 
    !wp_verify_nonce($_POST['headline_nonce'], 'headline_nonce_'.$post_id) 
) { 
    return; 
} 

if (!current_user_can('edit_post', $post_id)) { 
    return; 
} 
if (isset($_POST['_headline_field'])) { 
    update_post_meta($post_id, '_headline_field', $_POST['_headline_field']); 
} else { 
    delete_post_meta($post_id, '_headline_field'); 
} 

}

はそれを行うにはどのような手掛かり誰がいますか?私は実際の投稿を更新する前に、_headline_field値を持つ投稿の投稿にクエリを行い、これらを削除しなければならないと思います。

THX

+0

こんにちは、役立つだろう見ていくつかのコード;) –

答えて

0

OK、解決策を見つけました。

"delete_post_meta_by_key()"関数を使用して、新しい値をDBに書き込む前に_headline_fieldキーを使ってアレストポストメタを消去しました。

if (isset($_POST['_headline_field'])) { 

    delete_post_meta_by_key('_headline_field'); 
    update_post_meta($post_id, '_headline_field', $_POST['_headline_field']); 
} 
1

uはmetakeyな見出しで記事を照会したい場合はそうuがそのような何かを行うことができます。

$posts = array(); 
$query = new WP_Query(array('meta_key' => Headline, 'meta_value'=>YOURVALUE, 'posts_per_page' => LIMIT (-1 for endless))) 
if ($query->have_posts()) { 
    while ($query->have_posts()) { 
     $query->the_post(); 
     $posts[] = $query->post; 
    } 
    wp_reset_postdata(); 
} 
return $posts; 
+0

私はそれを行うと、見出しフィールドをリセットしようとしましたが、動作していないよう: –

+0

は、あなたからのポストを得る行うには、正確に何をしたいですかcustomfieldの見出し?あなたの問題のビットをもっと説明してください。 – Violence

+0

他の見出しのメタを削除します。だから私が投稿に見出しのチェックボックスを設定した場合、それは他のすべての投稿で削除する必要があります。ヘッドラインに投稿できるのは1つだけなので –

0

私はそのようにそれを実行しようとしました:

if (isset($_POST['_headline_field'])) { 

    //query posts with custom field selected 

    $args = array ('meta_key' => '_headline_field', 'meta_value' => '1', LIMIT -1); 


    $headline_query = new WP_Query($args); 
    if (have_posts()): 
     while (have_posts()) : 
      $headline_query->the_post(); 
      $headline_query->delete_post_meta(get_the_ID(), '_headline_field'); 
     endwhile; 
    endif; 

    update_post_meta($post_id, '_headline_field', $_POST['_headline_field']);