【问题标题】:Wordpress unique checkboxWordPress 独特的复选框
【发布时间】:2017-03-06 16:52:53
【问题描述】:

我在帖子中创建了一个由复选框处理的自定义字段“标题”。现在我希望当帖子被保存并选中复选框时,其他帖子中的所有“标题”复选框都被清空。如果这工作正常,那么应该只有另一个帖子选中了该复选框。

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 值的帖子并在更新实际帖子之前删除这些帖子。

谢谢

【问题讨论】:

  • 嗨,看看一些代码会有所帮助;)

标签: wordpress custom-fields


【解决方案1】:

因此,如果您想使用元键标题查询帖子,您可以执行以下操作:

$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;

【讨论】:

  • 我尝试这样做并重置标题字段,但它似乎不起作用:
  • 您到底想从 customfield Headline 获取帖子做什么?请多解释一下你的问题。
  • 删除其他标题元数据。因此,如果我在帖子中设置标题复选框,则应在所有其他帖子中将其删除。因为只有一篇文章可以出现在标题上。
【解决方案2】:

我试着这样做:

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

【讨论】:

    【解决方案3】:

    好的,找到了解决办法。

    在将新值写入数据库之前,我只是使用“delete_post_meta_by_key()”函数擦除所有带有键 _headline_field 的帖子元数据。

    if (isset($_POST['_headline_field'])) {
    
        delete_post_meta_by_key( '_headline_field' );
        update_post_meta($post_id, '_headline_field', $_POST['_headline_field']);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-17
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-05
      • 2020-08-12
      相关资源
      最近更新 更多