php - 显示自定义字段选择 - Wordpress

标签 php wordpress post custom-fields

我在我的平台上添加了一个内容评级系统,作者可以在其中选择他们的帖子适合哪些受众。目前,可以使用以下选项:

  • 未评级
  • G
  • PG
  • R

我用来在帖子编辑页面上显示评级选项的代码是:

// Article Content Rating
add_action( 'add_meta_boxes', 'rating_select_box' );
function rating_select_box() {
    add_meta_box(
        'rating_select_box', // id, used as the html id att
        __( 'Content Rating (optional)' ), // meta box title
        'rating_select_cb', // callback function, spits out the content
        'post', // post type or page. This adds to posts only
        'side', // context, where on the screen
        'low' // priority, where should this go in the context
    );

}

function rating_select_cb( $post ) {
    global $wpdb;
    $value = get_post_meta($post->ID, 'rating', true);
    echo '<div class="misc-pub-section misc-pub-section-last"><span id="timestamp"><label>Article Content Rating: </label>';

    $ratings = array(
        1 => ' G ',
        2 => ' PG ',
        3 => ' R ',
    );

    echo '<select name="rating">';
    echo '<option value=""' . ((($value == '') || !isset($ratings[$value])) ? ' selected="selected"' : '') . '> Unrated </option>';

    // output each rating as an option
    foreach ($ratings as $id => $text) {
        echo '<option value="' . $id . '"' . (($value == $id) ? ' selected="selected"' : '') . '">' . $text. '</option>';
    }
    echo '</select>';

    echo '</span></div>';
}

add_action( 'save_post', 'save_metadata');

function save_metadata($postid)
{   
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return false;
    if ( !current_user_can( 'edit_page', $postid ) ) return false;
    if( empty($postid) ) return false;


    if ( is_null($_REQUEST["rating"]) ) {
        delete_post_meta($postid, 'rating');
    } else {
        update_post_meta($postid, 'rating', $_REQUEST['rating']);
    }

}
// END Article Content Rating

现在的问题是,我应该向 single.php 添加什么代码来显示他们的选择?例如,如果作者选择了 PG,那么我想回显“内容分级:PG”;或者如果是默认设置(未分级),我想回显“内容分级:未评级';。这怎么可能?理想情况下,由于我的平台流量很大,因此解决方案在服务器上的负载很轻。

最佳答案

您已使用 delete_post_meta()update_post_meta() 函数来删除和修改自定义值。只需使用 get_post_meta()函数来获取当前帖子的值,并根据需要回显它。

如果您位于 The Loop ,它会是这样的:

$rating = get_post_meta(get_the_ID(), 'rating', TRUE);

编辑:

您已经知道您的 ID 到评级映射(我可能会将此映射设置为全局数组,或某些定义,或类似的东西)。只需使用它来查找要输出的字符串:

$ratings = array(
    1 => 'G',
    2 => 'PG',
    3 => 'R'
);

if(array_key_exists($rating, $ratings)) {
    echo "Content Rating: $ratings[$rating]";
} else {
    echo "Content Rating: Unrated";
}

关于php - 显示自定义字段选择 - Wordpress,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14146724/

相关文章:

php - 如何对插入和更新进行单个查询?

php - fatal error : Call to undefined function validation_errors()

php - 如何同时运行两个不同版本的 laravel 和不同的 php 版本

php - 更新整个数据库避免外键和主键约束错误

php - 在 Woocommerce 结帐页面中移动付款方式

mysql - 有什么方法可以通过数据库设置wordpress的屏幕选项吗?

java - 将 POST 请求改造为 Spring Boot 服务

java - 使用 gson 反序列化 JSON 对象数组时遇到问题

php - 使用 XMLHttpRequest 模拟类型 ="file"INPUT

ios - 通过 HTTPS POST 发送图像?