如何制作包含链接类别的Metabox?

时间:2012-09-14 作者:Nadine

我正在寻找一些关于如何创建一个允许用户从链接类别列表中选择的元框的建议或教程链接。到目前为止我一直在看this post about taxonomies in a drop downthis post about an audio file drop down. 我也看过get_terms.

最终目标是在单个帖子页面上显示用户选择的链接类别中的链接。

更新#2。现在让它正常工作(更新代码)。最后一件事:我只需要找到一种方法来保持选中的选项处于选中状态。它保存了正确的值,但在视觉上只是默认为第一个选项。使用this post 作为指导。

function tf_book_purchase (){
    global $post;
            $custom  = get_post_custom($post->ID);
            $link    = $custom["link"][0];
            $selected = isset( $custom[\'link\'] ) ? esc_attr( $custom[\'link\'][0] ) :\'\';


            echo \'<div class="link_header">\';


            $myterms = get_terms("link_category");

            echo \'<select name="link" id="link">\';
            echo \'<option class="buy_books">Select A Link Category</option>\';
            foreach($myterms as $term){
                        $term_slug=$term->slug;
                        $term_name =$term->name;
                        $term_id =$term->term_id;


           ?>   <option value="<?php echo $term_id;?>" <?php selected( $selected, ".$term_id." ); ?>><?php echo $term_name;?></option>

            <?php   }


             echo \'</select><br /></div>\';
             echo \'<p>Please select a set of purchase links for this book.</p>\';

     }



    add_action (\'save_post\', \'save_tf_book_purchase\');

    function save_tf_book_purchase() {

    global $post;

    // make sure we\'re on a supported post type
        if ( $_POST[\'post_type\'] != \'books\' ) return;  

        // verify this came from our screen and with proper authorization.
        if ( !wp_verify_nonce( $_POST[\'book_nonce_name\'], \'book-nonce\' )) return;

        // verify if this is an auto save routine. If it is our form has not been submitted, so we dont want to do anything
        if ( defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE ) return;


        // Check permissions
        if ( \'page\' == $_POST[\'post_type\'] ) {
            if ( !current_user_can( \'edit_page\', $post_id ) ) return;
        } else {
            if ( !current_user_can( \'edit_post\', $post_id ) ) return;
        }

    //if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE){ return $post->ID; }

    update_post_meta( $post->ID, \'link\', esc_attr( $_POST[\'link\'] ));

    }

2 个回复
SO网友:Nadine

找到最后一位。这只是一个语法错误:

<?php selected( $selected, ".$term_id". ); ?>
应该是。。。

<?php selected( $selected, $term_id ); ?>
整个功能:

function tf_book_deets_create(){
add_meta_box(\'tf_book_purchase\', \'Book Purchase Links\', \'tf_book_purchase\', \'books\',\'side\',\'default\');
}
function tf_book_purchase (){
    global $post;
            $custom  = get_post_custom($post->ID);
            $link    = $custom["link"][0];
            $selected = isset( $custom[\'link\'] ) ? esc_attr( $custom[\'link\'][0] ) :\'\';


            echo \'<div class="link_header">\';

            $myterms = get_terms("link_category");

             echo \'<p>Please select a set of purchase links for this book.</p>\';

            echo \'<select name="link" id="link">\';
            echo \'<option class="buy_books">Select A Link Category</option>\';
            foreach($myterms as $term){
                        $term_slug=$term->slug;
                        $term_name =$term->name;
                        $term_id =$term->term_id;


           ?>   <option value="<?php echo $term_id;?>" <?php selected( $selected, $term_id ); ?>><?php echo $term_name;?></option>


           <?php   } echo \'</select><br /></div>\';


}



    add_action (\'save_post\', \'save_tf_book_purchase\');

    function save_tf_book_purchase() {

    global $post;

    // make sure we\'re on a supported post type
        if ( $_POST[\'post_type\'] != \'books\' ) return;  

        // verify this came from our screen and with proper authorization.
        if ( !wp_verify_nonce( $_POST[\'book_nonce_name\'], \'book-nonce\' )) return;

        // verify if this is an auto save routine. If it is our form has not been submitted, so we dont want to do anything
        if ( defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE ) return;


        // Check permissions
        if ( \'page\' == $_POST[\'post_type\'] ) {
            if ( !current_user_can( \'edit_page\', $post_id ) ) return;
        } else {
            if ( !current_user_can( \'edit_post\', $post_id ) ) return;
        }

    //if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE){ return $post->ID; }

    update_post_meta( $post->ID, \'link\', esc_attr( $_POST[\'link\'] ));

    }

SO网友:Brent

好吧,我花了一分钟的时间才意识到你想要做什么,为了确保我理解,我想在这里重申一下:

您有链接的类别(使用WordPress中的默认链接管理器,对吗?)。您希望能够将所选类别与任何给定的帖子相关联,并在给定帖子的单页视图中显示该类别的链接。

在我看来,您接下来要做的是创建一个元值,使用一个元框(您正确地建议了这个元框),来存储与该帖子相关的链接类别值。

我建议使用this meta_box "plugin" 在主题的功能中。php文件。我笼统地说“插件”,因为这不是WordPress意义上的真正插件,而是一段与主题相关联的代码。

另请参见以下链接:http://www.deluxeblogtips.com/meta-box/http://www.deluxeblogtips.com/meta-box/define-fields/

注意:在最后一个链接(定义字段)中,您会注意到表单字段类型之一是选择框。您必须将上面的代码与选择框的设置混合在一起,以使其以您希望的方式显示在元框中。类似这样的东西(巨大的免责声明-我没有测试任何一个。只是建议一些可能有用的东西。):

$myterms = get_terms("link_category");
$linkCatsArray = array();

foreach($myterms as $term){
    $linkCatsArray[$term->slug] = $term->name;
}

$meta_boxes[] = array(
    \'id\' => \'my_link_categories\',       // meta box id, unique per meta box
    \'title\' => \'Link Categories\',       // meta box title
    \'pages\' => array(\'post\'),           // post types, accept custom post types as well, default is array(\'post\'); optional
    \'context\' => \'normal\',              // where the meta box appear: normal (default), advanced, side; optional
    \'priority\' => \'high\',               // order of meta box: high (default), low; optional

    \'fields\' => array(  
        array(
            \'name\' => \'Available Categories\',
            \'id\' => $prefix . \'link_cats\',
            \'type\' => \'select\',                     // select box
            \'options\' => $linkCatsArray             // your links category array
        )
    )
);
然后,一旦能够将所选类别作为元数据值存储在数据库中,就可以使用get_post_meta($ID, \'_my_meta_key\'); 值从循环中检索该值。然后,您将要使用wp_list_bookmarks( $args ); 函数(单击该函数转到codex页面)以获取相应的链接类别。

我很想知道这对你有什么作用。

结束

相关推荐

Metabox中的Plupload-AJAX操作在类中不起作用

我正试图将WP Pluploader放入我帖子页面的元框中-根据Plupload Intergration in a meta-box? 和http://www.krishnakantsharma.com/2012/01/image-uploads-on-wordpress-admin-screens-using-jquery-and-new-plupload/我在第二个链接中的示例中实现了这一切。然而,我想把它全部放在一个类文件中。如果我把它全部打包成一个类,它就会停止工作。这都是因为:function