2017-03-03 140 views
0

我在由複選框處理的帖子中創建了自定義字段「標題」。現在我希望在保存帖子並選中複選框時,其他帖子中的所有「標題」複選框都將被清空。如果這個工作正常,那麼應該只有一個其他的帖子,選中該複選框。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

好的,找到一個解決方案。

我剛剛使用「delete_post_meta_by_key()」函數在將新值寫入數據庫之前用關鍵字_headline_field擦除alle post meta。

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標題的帖子ü可以做這樣的事情:

$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

刪除其他標題元素。因此,如果我在帖子中設置標題複選框,則應該在所有其他帖子中刪除它。因爲只有一篇文章可以在標題上。 –

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']);