如何在分类前台获取自定义字段值

时间:2016-10-05 作者:Vinaya Maheshwari

我在自定义模块中添加了一个名为custom_image 使用add_action( \'taxonomy_name_add_form_fields). 并且它成功地添加和保存了分类法。

但如何在我的自定义模板中获得它?

EDIT : 使用此文章https://gist.github.com/mathetos/1eea92f71934442671a7 代码如下:

<?php

/* Add Image Upload to Series Taxonomy */

// Add Upload fields to "Add New Taxonomy" form
function add_series_image_field() {
    // this will add the custom meta field to the add new term page
    ?>
    <div class="form-field">
        <label for="series_image"><?php _e( \'Series Image:\', \'journey\' ); ?></label>
        <input type="text" name="series_image[image]" id="series_image[image]" class="series-image" value="<?php echo $seriesimage; ?>">
        <input class="upload_image_button button" name="_add_series_image" id="_add_series_image" type="button" value="Select/Upload Image" />
        <script>
            jQuery(document).ready(function() {
                jQuery(\'#_add_series_image\').click(function() {
                    wp.media.editor.send.attachment = function(props, attachment) {
                        jQuery(\'.series-image\').val(attachment.url);
                    }
                    wp.media.editor.open(this);
                    return false;
                });
            });
        </script>
    </div>
<?php
}
add_action( \'weekend-series_add_form_fields\', \'add_series_image_field\', 10, 2 );

// Add Upload fields to "Edit Taxonomy" form
function journey_series_edit_meta_field($term) {

    // put the term ID into a variable
    $t_id = $term->term_id;

    // retrieve the existing value(s) for this meta field. This returns an array
    $term_meta = get_option( "weekend-series_$t_id" ); ?>

    <tr class="form-field">
    <th scope="row" valign="top"><label for="_series_image"><?php _e( \'Series Image\', \'journey\' ); ?></label></th>
        <td>
            <?php
                $seriesimage = esc_attr( $term_meta[\'image\'] ) ? esc_attr( $term_meta[\'image\'] ) : \'\'; 
                ?>
            <input type="text" name="series_image[image]" id="series_image[image]" class="series-image" value="<?php echo $seriesimage; ?>">
            <input class="upload_image_button button" name="_series_image" id="_series_image" type="button" value="Select/Upload Image" />
        </td>
    </tr>
    <tr class="form-field">
    <th scope="row" valign="top"></th>
        <td style="height: 150px;">
            <style>
                div.img-wrap {
                    background: url(\'http://placehold.it/960x300\') no-repeat center; 
                    background-size:contain; 
                    max-width: 450px; 
                    max-height: 150px; 
                    width: 100%; 
                    height: 100%; 
                    overflow:hidden; 
                }
                div.img-wrap img {
                    max-width: 450px;
                }
            </style>
            <div class="img-wrap">
                <img src="<?php echo $seriesimage; ?>" id="series-img">
            </div>
            <script>
            jQuery(document).ready(function() {
                jQuery(\'#_series_image\').click(function() {
                    wp.media.editor.send.attachment = function(props, attachment) {
                        jQuery(\'#series-img\').attr("src",attachment.url)
                        jQuery(\'.series-image\').val(attachment.url)
                    }
                    wp.media.editor.open(this);
                    return false;
                });
            });
            </script>
        </td>
    </tr>
<?php
}
add_action( \'weekend-series_edit_form_fields\', \'journey_series_edit_meta_field\', 10, 2 );

// Save Taxonomy Image fields callback function.
function save_series_custom_meta( $term_id ) {
    if ( isset( $_POST[\'series_image\'] ) ) {
        $t_id = $term_id;
        $term_meta = get_option( "weekend-series_$t_id" );
        $cat_keys = array_keys( $_POST[\'series_image\'] );
        foreach ( $cat_keys as $key ) {
            if ( isset ( $_POST[\'series_image\'][$key] ) ) {
                $term_meta[$key] = $_POST[\'series_image\'][$key];
            }
        }
        // Save the option array.
        update_option( "weekend-series_$t_id", $term_meta );
    }
}  
add_action( \'edited_weekend-series\', \'save_series_custom_meta\', 10, 2 );  
add_action( \'create_weekend-series\', \'save_series_custom_meta\', 10, 2 );

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

我建议使用update_term_meta()get_term_meta() 正如WordPress 4.4中介绍的那样。这将有助于保持wp_options 表较小。

但无论哪种方式,您都需要知道;前端;。

使用术语meta,您需要它:

$term_meta = get_term_meta( $term_id, \'series_images\', true );

使用您的解决方案,您需要它:

$term_meta = get_option( "weekend-series_" . $t_id );

所以问题是:

如何获取术语的IDget_queried_object(), 返回查询的对象。如果你在分类学中。php模板或标记。php或类别。php这将是当前的术语对象:

WP_Term Object
(
    [term_id] => 20
    [name] => Schlagwort
    [slug] => schlagwort
    [term_group] => 0
    [term_taxonomy_id] => 20
    [taxonomy] => post_tag
    [description] => 
    [parent] => 0
    [count] => 0
    [filter] => raw
)
因此,要获取这些模板中的术语ID,可以执行以下操作:

$current_object = get_queried_object();
$term_id = $current_object->term_id;
如何获取某个帖子附带的术语ID

如果你想显示这些图像,就让我们在单张中显示吧。php模板,您需要将术语ID附加到当前帖子。具有get_the_terms() 你完全可以得到这些。如果在循环中使用它,您可以简单地执行以下操作:

$terms = get_the_terms( get_the_ID(), \'post_tag\' );
foreach ( $terms as $term ) {
    $term_id = $term->term_id;
    /* Do something with the $term_id */
}
第一个参数是当前的post ID,而第二个参数是分类法的slug(在我的示例中是itspost_tag 用于标记)。您得到的回报是一组术语对象。

如何获取分类法中所有术语的术语ID最后,假设您有一个分类法,并且希望将所有术语的术语ID附加到此分类法中get_terms() 是你的朋友。

$terms = get_terms( \'post_tag\' );
foreach ( $terms as $term ) {
    $term_id = $term->term_id;
    /* Do something with the $term_id */
}

相关推荐

Custom Taxonomy Page

我正在尝试创建一个显示特定类别的所有子类别的页面。所以在上下文中,我有一个标题为“目的地”的父类别。我希望能够点击目的地,并被引导到一个页面,显示子类别或国家的列表。下面是我试图实现的一个示例,减去顶部的地图-https://www.vagabrothers.com/destinations. 在理想情况下,类别页面的布局将与此页面相同。你可以从上面的例子中看出我的意思。它会使网站上的导航像这样:目的地>国家>个人帖子。我正在使用CPT UI,设置了一个名为“目的地”的自定义帖子类型和类别,然