我使用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进行过滤,但这不起作用。
所以,我的问题是:如何创建一个自动为所有帖子设置默认值的字段?还是我被迫创建某种脚本,在所有帖子中循环并自动设置数据?还是我使用了错误的方法将字段添加到帖子中?
最合适的回答,由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\' => \'=\',
),
),
);