get_posts custom field

时间:2018-10-21 作者:ValRob

这是一个愚蠢的问题,但我找不到合适的方式问谷歌。所以,如果这是一个重复的问题,很抱歉。

我提供了一个带有复选框的自定义字段,用户可以检查是否希望此特定帖子进入主页。因此,在我的主页上,我呼吁所有已激活选中的帖子。

我正在为自定义帖子类型CV创建自定义字段:

function add_custom_post_meta_box() {
    add_meta_box(
        \'custom_post_meta_box\', // $id
        \'Campos Personalizados\', // $title
        \'show_custom_post_meta_box\', // $callback
        \'cv\', // $screen
        \'normal\', // $context
        \'high\' // $priority
    );
}
add_action( \'add_meta_boxes\', \'add_custom_post_meta_box\' );
但在这个自定义post meta框中,我有多个字段,如标签和复选框:

function show_custom_post_meta_box() {
    global $post;
        $meta = get_post_meta( $post->ID, \'your_fields\', true ); ?>
  <p>
    <label for="your_fields[text]">Especialidad</label>
    <br>
    <input type="text" name="your_fields[text]" id="your_fields[text]" class="regular-text" value="
    <?php if (is_array($meta) && isset($meta[\'text\'])){ echo $meta[\'text\'];} ?>">
  </p>
  <p>
    <label for="your_fields[checkbox]">Mostrar en Home
        <input type="checkbox" name="your_fields[checkbox]" value="checkbox"
      <?php
      if (is_array($meta) && isset($meta[\'checkbox\'])){
        if ( $meta[\'checkbox\'] === \'checkbox\' ) echo \'checked\';
      }
      ?>>
    </label>
  </p>
好的,其余的代码保存了自定义字段,并且工作得很好。我的问题是,当我尝试调用它时:

$posts = get_posts(array(
    \'posts_per_page\'    => -1,
    \'post_type\'         => \'cv\'
    // \'meta_key\'       => \'your_fields[checkbox]\', //This is wrong!!
    // \'meta_value\' => \'checkbox\'
));
当我尝试拨打post信息时:

<?php
        foreach( $posts as $post ):
            setup_postdata( $post );
        ?>

              <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
              <p>
                <?php
                  $meta = get_post_meta( $post->ID, \'your_fields\', true );
                  if (isset($meta[\'checkbox\'])){
                    echo $meta[\'checkbox\'];
                  }
                ?>
              </p>
       <?php endforeach; ?>
所以,我的问题是:如何进行查询,只给我定制帖子类型,并激活选中。

1 个回复
最合适的回答,由SO网友:Antti Koskinen 整理而成

如果您想使用post meta设置在首页上显示哪些帖子,那么我建议使用单独的meta\\u键保存设置。所以与其把它推到your_fields 使用自己的密钥保存。

这意味着修改你的metabox内容,

<input type="checkbox" name="show_on_front_page" value="true"
请相应地修改您的metabox保存框。

那么您应该能够使用get_posts 就像这样,

$posts = get_posts(array(
    \'posts_per_page\'    => -1,
    \'post_type\'         => \'cv\',
    \'meta_key\'       => \'show_on_front_page\',
    \'meta_value\' => \'true\'
));
但就在昨天,我在另一条帖子上看到了汤姆·诺威尔先生的评论,他说这是一种效率很低的设置头版帖子的方式。在更大的站点上,在最坏的情况下,这可能会导致站点服务器停机。

您最好使用(私有)自定义分类法,将要在头版上显示的帖子分配给该分类法。从数据库中获取具有特定分类法的帖子是一种更快、更有效的方式。

从诺威尔先生的博客上,https://tomjn.com/2018/03/16/utility-taxonomies/

设置自定义分类,

function tomjn_utility_taxonomy() {
$args = array(
    \'label\'     => __( \'Internal Markers\', \'tomjn\' ),
    \'public\'    => false,
    \'rewrite\'   => false,
    \'show_ui\'   => true, // you\'d need this if you want to show the taxonomy metabox on the post edit screen
);
register_taxonomy( \'utility\', \'post\', $args );
}
add_action( \'init\', \'tomjn_utility_taxonomy\', 0 );
自动发布到首页,

function tomjn_auto_add_to_home( $post_id ) {
wp_set_object_terms( $post_id, \'show_on_homepage\', \'utility\', true );
}
add_action( \'publish_post\', \'tomjn_auto_add_to_home\' );
调整主页查询

function tomjn_only_show_home( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( \'utility\', \'show_on_homepage\' );
    }
}
add_action( \'pre_get_posts\', \'tomjn_only_show_home\' );
请参阅博客文章以获取更详细的解释。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post