帖子自定义域的自动值

时间:2018-01-17 作者:Stefan R

我使用add\\u meta\\u box操作为帖子创建了自定义字段。我想基于我的自定义字段创建自己的WP查询,以确保我只加载具有正确数据的帖子集。如果我添加一个新字段,帖子不会自动为我的自定义字段设置值。因此,如果不手动保存所有帖子,我无法加载正确的收藏。我有1200多篇帖子,所以很难全部更改并在数据库中设置值。

我创建的字段应自动设置为“true”。如果该字段为true,我将在特定页面上显示帖子。我目前希望我的所有帖子都显示在该页面上,所以所有1200篇帖子都应该加载。以后会对帖子进行分类,有些帖子不应该显示在主页上。

我使用add\\u meta\\u box操作创建了字段。显示字段、编辑字段和保存字段都可以正常工作。

/**
 * Add Meta Box to post
 */
if(!function_exists(\'theme_settings_add_post_meta_box\')) {
    function theme_settings_add_post_meta_box()
    {
        $screens = array(\'post\');

        foreach ($screens as $screen) {
            add_meta_box(
                \'theme_settings_section_slider\',
                __(\'Homepage Slider\', \'slidedata\'),
                \'theme_settings_section_slider_callback\',
                $screen,
                \'normal\',
                \'high\'
            );
        }
    }
}
我已经在函数“theme\\u settings\\u section\\u slider\\u callback”中创建了表单元素。我已复制了要按其筛选的自定义字段:

$showPost = \'theme_settings_post_show\';
<?php /** Show post on frontend */ ?>
<label for="<?php echo $showPost ?>"><?php _e(\'Show post on homepage\') ?></label>
<br />
<select style="margin-bottom: 20px" name="<?php echo $showPost ?>" id="<?php echo $showPost ?>">
    <option value="false" <?php echo get_post_meta($object->ID, $showPost, true)  == \'false\' ? \'\' : \'selected\' ?>>No</option>
    <option value="true" <?php echo get_post_meta($object->ID, $showPost, true) != \'false\' ? \'selected\' : \'\' ?>>Yes</option>
</select>
保存功能(也可以正常工作)

if(!function_exists(\'theme_settings_save_post_meta_box\')) {
    function theme_settings_save_post_meta_box($post_id, $post) {
        // Add a check if this account has permission to save, maybe?
        .....
        $data[\'show_post\']      = \'theme_settings_post_show\';

        foreach($data as $item) {
            if(isset($_POST[$item])) {
                $value = $_POST[$item];
                update_post_meta($post_id, $item, $value);
            }
        }
    }
}
现场逻辑工作正常。这是我用来根据“theme\\u settings\\u post\\u show”字段显示帖子的查询:

//Get all posts which have to be shown on the homepage
if(!function_exists(\'getPosts\')) {
    function getPosts() {
        //$paged = ( get_query_var( \'paged\' ) ) ? get_query_var( \'paged\' ) : 1;

        //Query arguments
        $queryArguments = array(
            \'posts_per_page\' => -1,
            \'post_type\'     => \'post\',
            \'meta_key\'      => \'theme_settings_post_show\',
            \'meta_value\'    => \'true\'
        );

        $postsQuery = new WP_Query($queryArguments);

        if($postsQuery->have_posts()) {
            return $postsQuery;
        }

        return false;
    }
}
正如您所料,尚未为任何帖子设置“theme\\u settings\\u post\\u show”字段,因此我不会使用函数“getPost”检索任何帖子。我也尝试过按meta\\u值null进行过滤,但这不起作用。

所以,我的问题是:如何创建一个自动为所有帖子设置默认值的字段?还是我被迫创建某种脚本,在所有帖子中循环并自动设置数据?还是我使用了错误的方法将字段添加到帖子中?

2 个回复
最合适的回答,由SO网友:Max Yudin 整理而成

尝试meta_query 获取具有theme_settings_post_show == true (对于新职位)和theme_settings_post_show 完全未设置(对于旧职位):

<?php
$queryArguments = array(
    \'posts_per_page\' => -1,
    \'post_type\'     => \'post\',
    \'meta_query\' => array(
       \'relation\' => \'OR\', // value is not set or true
        array(
         \'key\' => \'theme_settings_post_show\',
         \'value\' => \'\', // can be any value, since it does not exists
         \'compare\' => \'NOT EXISTS\',
        ),
        array(
         \'key\' => \'theme_settings_post_show\',
         \'value\' => true,
         \'compare\' => \'=\',
        ),
    ),
);

SO网友:D. Dan

高级自定义字段插件还有一个真/假字段类型,您可以将其添加到特定的帖子、帖子类型页面等,还可以定义默认值。

但这只适用于新增的职位。

结束

相关推荐

Query posts using less than

我有一个工作查询,使用pre_get_posts 使用status post格式,仅在使用UNIX时间戳的日期范围内显示这些帖子。唯一的问题是,即使帖子超出范围,它仍然会被查询。我只是想知道是否有更好的方法使用自定义字段查询帖子,该字段使用的代码:$args = array(\'status_message\' => \'alerts\'); $status_alert = new WP_Query( $args ); $notice_startend = false; $n