是否仅在其他元数据中的日期值结束时才显示元数据?

时间:2012-04-11 作者:mathiregister

可能是个奇怪的问题。我正在使用自定义MetaBox and CustomFields Class Github上的jaredatch。

我有这个“事件日期”元框:

$meta_boxes[] = array(
        \'id\'         => \'event_date\',
        \'title\'      => \'Event Date\',
        \'pages\'      => array( \'wr_event\', ),
        \'context\'    => \'normal\',
        \'priority\'   => \'high\',
        \'fields\'     => array(
            array(
                \'name\' => \'Test Date Picker (UNIX timestamp)\',
                \'desc\' => \'field description (optional)\',
                \'id\'   => $prefix . \'event_date\',
                \'type\' => \'text_date_timestamp\',
            )
        ),
    );
我还有一个叫做“事件回顾”的metabox

$meta_boxes[] = array(
    \'id\'         => \'wr_event_review\',
    \'title\'      => \'Event Review\',
    \'pages\'      => array( \'wr_event\', ), // Post type
    \'context\'    => \'normal\',
    \'priority\'   => \'high\',
    \'show_names\' => true, // Show field names on the left
    \'fields\'     => array(
        array(
            \'name\'    => \'Event Review\',
            \'id\'      => $prefix . \'event_wysiwyg\',
            \'type\'    => \'wysiwyg\',
            \'options\' => array( \'textarea_rows\' => 5, ),
        )
    ),
);
我想知道是否有可能仅在日期结束时才显示event review metabox?

类似于…

if ( date(\'U\') > date(\'U\', $_POST["_wr_event_date"] ) ) {
     $meta_boxes[] = array(
        \'id\'         => \'wr_event_review\',
        \'title\'      => \'Event Review\',
然而,我不知道这是否可能,甚至不知道如何得到电流event_date 这在输入中。

对此有何想法?

3 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

不确定链接类-他们似乎会立即收集元盒,因此没有关于正在查看的帖子的信息。

但总的来说——是的,这是可能的。要添加元盒,请执行以下操作:

add_action( \'add_meta_boxes\', \'myplugin_add_my_custom_box\',10,2);
请参见source code here. 这add_meta_boxes 钩子传递两个变量:post类型和post对象。您可以使用post获取post meta,然后调用add_meta_box 在适当的情况下。

function myplugin_add_my_custom_box($post_type,$post){
     //Get event date as a timestamp
     $event_date = (int) get_post_meta($post->ID,\'_wr_event_date\',true);

     //Check date exists and is in the past. If not, return: don\'t add metabox.
     if( empty($event_date) || current_time(\'timestamp\') < $event_date)
         return;

     add_meta_box( 
        \'myplugin_sectionid\',
        __( \'My Post Section Title\', \'myplugin_textdomain\' ),
        \'myplugin_metabox_callback\',
        \'event\' 
    );      
}
你会注意到还有add_meta_boxes_{$post_type} 挂钩-如果您只想将其添加到“event\\u cpt”帖子类型中,这会更有效:

     add_action( \'add_meta_boxes_event_cpt\', \'myplugin_add_my_custom_box\',10,1);
在这种情况下,回调只包括$post 作为论据!

Note: Avoid using php date/time functions: 默认情况下,这将始终将时区设置为UTC。如果您希望使用以下内容在博客时区中显示当前日期/时间current_time()

SO网友:Geert

我在这里选择JavaScript解决方案。这样,您就可以根据在事件日期元框中输入的日期立即显示或隐藏事件审阅元框。

我为一个非常类似的问题提供了一个解决方案,在这个问题中,需要根据所选的页面模板切换metabox。

请参见:Toggle admin metabox based upon chosen page template

SO网友:Long Trịnh

如果要在事件日期更改时显示或隐藏整个元框,可以尝试使用Conditional Logic 插件,这样您就可以像这样重写代码:

    $meta_boxes[] = array(
    \'id\'         => \'wr_event_review\',
    \'title\'      => \'Event Review\',
    \'pages\'      => array( \'wr_event\', ), // Post type
    \'context\'    => \'normal\',
    \'priority\'   => \'high\',
    \'show_names\' => true, // Show field names on the left
    \'visible\'    => array(\'event_date\', \'>\', \'2015-08-25\'),
    \'fields\'     => array(
        array(
            \'name\'    => \'Event Review\',
            \'id\'      => $prefix . \'event_wysiwyg\',
            \'type\'    => \'wysiwyg\',
            \'options\' => array( \'textarea_rows\' => 5, ),
        )
    ),
);
您可以将“2015-08-25”更改为您想要的任何值;)

结束

相关推荐

将Metabox附加到单个帖子

我已经使用代谢箱一段时间了,很享受它们的灵活性。然而,我现在的情况是,我只需要在a specific single post or page, 和not 对于整个(自定义)-post类型。有可能这样做吗?非常欢迎您的帮助。蒂亚马坦尼亚