将一个柱子从一种柱子类型附着到另一种柱子类型的另一根柱子

时间:2014-01-15 作者:Maartje

我有两种自定义的帖子类型:agenda和doel。在每个议程帖子上,我想选择一个doel帖子来附加它,正常帖子也是如此。所以我想在帖子、议程和实际行动之间建立联系。

我从scribu找到了一个名为posts2posts的插件,它确实将posts类型彼此连接,但我无法找到如何以及是否可以将某个post类型的某些post连接到另一个post类型的某些post。

理想的解决方案是在一个帖子类型中有一个下拉列表,显示另一个帖子的所有帖子,您可以选择一个。例如,在编辑议程中的帖子时,我可以从doel中选择要附加到的帖子。

稍后我想循环一下。

有人知道如何轻松完成这项工作,或者推荐一个好的插件吗?

对不起,我的解释不好,希望有点清楚。

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

插件建议在这里被认为是离题的。一种解决方案是在帖子中添加一个元框,如下所示:

Add to Functions.php

/** Add Post Metabox **/
function add_custom_meta_box() {
    add_meta_box(
        \'pick_post\', // $id
        \'Pick Post\', // $title 
        \'show_custom_meta_box_pick_post\', // $callback
        \'agenda\', // $page
        \'side\', // $context
        \'high\'); // $priority
}
add_action(\'add_meta_boxes\', \'add_custom_meta_box\');

/** Post Metabox Callback (show some stuff in box) **/
function show_custom_meta_box_pick_post() {
    $doelArr = get_posts( array( \'post_type\' => \'doel\', \'orderby\' => \'title\', \'order\' => \'ASC\', \'posts_per_page\' => -1 ) );
    $meta_doel = get_post_meta($post->ID, \'_doellist\', true);
?>
    <input type="hidden" name="info_meta_box_nonce" value="<?php echo wp_create_nonce(basename(__FILE__)); ?>" />
    <strong>Associated Doel</strong>
        <br />
    <select id="selectdoel" name="_doellist">
        <option value="">Select Doel</option>
    <?php foreach($doelArr as $doel) : setup_postdata( $doel ) ?>
        <?php if($doel->ID == $meta_doel) : ?>
            <option value="<?php echo $doel->ID; ?>" selected="selected"><?php echo $doel->post_title; ?></option>
        <?php else : ?>
            <option value="<?php echo $doel->ID; ?>"><?php echo $doel->post_title; ?></option>
        <?php endif; ?>
    <?php endforeach; ?>
    </select>
}

/** Save Our Meta-data **/
function save_custom_meta($post_id) {
    global $post;

    // check autosave
    if ((defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) || (!current_user_can(\'edit_post\', $post_id)))
        return $post_id;

    if($post->post_type == \'agenda\')
    {
        // Doel Selection List Check
        if(isset($_POST[\'_doellist\']) && $_POST[\'_doellist\'] != \'\')
            update_post_meta($post_id, \'_doellist\', strip_tags($_POST[\'_doellist\']));
        else
            delete_post_meta($post_id, \'_doellist\');
    }
}
这样做的目的是创建一个包含Doel帖子下拉列表的小型元框,然后将Doel帖子ID保存为元值。您可以在任何时候通过将议程ID传递给get_post_meta() 作用

$meta_doel = get_post_meta($post->ID, \'_doellist\', true);

然后你可以像这样得到整个Doel帖子:

$doel_post = get_post($meta_doel);

结束

相关推荐