私のテーマがより注目を集めることができるように、私は私のテーマのユーザーがいくつかの投稿をより重要としてマークできるようにしたいと思います。私はこれに取り組むための最良の方法がわからないのですか?誰かが私のテーマをインストールしたときにオプションとして存在するテーマにデフォルトのカテゴリーの「おすすめ」を追加することは可能ですか?
編集:管理画面にカスタムメタボックスを追加するアプローチを取る:このようなものが動作するはずですか?
function featured_post() { ?>
<label><input type="checkbox" id="featured_post" value="featured_post">Make this a featured post</label>;
<?php }
add_action('add_meta_boxes', 'cd_meta_box_add');
function cd_meta_box_add() {
add_meta_box(1, 'Featured Post', 'featured_post');
}
function save_custom_meta_box($post_id, $post, $update)
{
if (!isset($_POST["meta-box-nonce"]) || !wp_verify_nonce($_POST["meta-box-nonce"], basename(__FILE__)))
return $post_id;
if(!current_user_can("edit_post", $post_id))
return $post_id;
if(defined("DOING_AUTOSAVE") && DOING_AUTOSAVE)
return $post_id;
$slug = "post";
if($slug != $post->post_type)
return $post_id;
$featured_post_value = "";
if(isset($_POST["featured_post"]))
{
$featured_post_value = $_POST["featured_post"];
}
update_post_meta($post_id, "featured_post", $featured_post_value);
}
add_action("save_post", "save_custom_meta_box", 10, 3);
function annframe_featured_class( $classes ) {
global $post;
if ( get_post_meta( $post->ID, 'featured_post' ) || '' != get_post_meta( $post->ID, 'featured_post' ) ) {
$classes[] = 'featured-post';
}
return $classes;
}
add_filter( 'post_class', 'annframe_featured_class' );
WordPressはデフォルトでこのような "スティッキーポスト"という機能を提供しています。あなたは「クイック編集」リンクから任意の投稿をスティッキーとしてマークすることができます。そしてWordPressはすべてのスティッキーな投稿と共にsticky
という名前の投稿クラスを追加します。そのため、CSSでこのクラスを使用してカスタムスタイルを指定できます。
もう1つの解決策は、wp-adminでカスタム投稿メタボックスとメタボックスを作成することです。そしてあなたのユーザーにどんな投稿にも "注目"の印を付ける方法を提供しましょう。そしてそのメタフィールドの値に基づいてpostクラスを簡単に変更することができます。
wordPress Codexの メタボックス および カスタムフィールド に関する詳細情報を参照してください。そして "custom field
"という名前の投稿にfeatured_post
を追加した場合は、下記の関数を使用して投稿クラスを変更できます。すべての投稿に注目のマークが付けられた「featured-post
」という名前のクラスが追加されます。
add_action( 'load-post.php', 'annframe_meta_boxes_setup' );
add_action( 'load-post-new.php', 'annframe_meta_boxes_setup' );
add_action( 'save_post', 'annframe_save_post_meta', 10, 2 );
function annframe_meta_boxes_setup() {
add_action( 'add_meta_boxes', 'annframe_add_meta_box' );
}
function annframe_add_meta_box() {
add_meta_box(
'featured_post', // Unique ID
__( 'Featured Post' ), // Title
'annframe_display_meta_box', // Callback function
'post', // Admin page (or post type)
'side', // Context
'high'
);
}
function annframe_display_meta_box( $post ) {
wp_nonce_field( basename( __FILE__ ), 'ann_meta_boxes_nonce' );
?>
<label for="meta-box-checkbox"><?php _e( 'Mark as featured'); ?></label>
<input type="checkbox" id="meta-box-checkbox" name="meta-box-checkbox" value="yes" <?php if ( get_post_meta( $post->ID, 'featured_post', true ) == 'yes' ) echo ' checked="checked"'; ?>>
<?php
}
// Save meta value.
function annframe_save_post_meta( $post_id, $post ) {
/* Verify the nonce before proceeding. */
if ( !isset( $_POST['ann_meta_boxes_nonce'] ) || !wp_verify_nonce( $_POST['ann_meta_boxes_nonce'], basename( __FILE__ ) ) )
return $post_id;
/* Get the post type object. */
$post_type = get_post_type_object( $post->post_type );
/* Check if the current user has permission to edit the post. */
if ( !current_user_can( $post_type->cap->edit_post, $post_id ) )
return $post_id;
$meta_box_checkbox_value = '';
if( isset( $_POST["meta-box-checkbox"] ) ) {
$meta_box_checkbox_value = $_POST["meta-box-checkbox"];
}
update_post_meta( $post_id, "featured_post", $meta_box_checkbox_value );
}
// add class.
function annframe_featured_class( $classes ) {
global $post;
if ( get_post_meta( $post->ID, 'featured_post' ) && get_post_meta( $post->ID, 'featured_post', true ) == 'yes' ) {
$classes[] = 'featured-post';
}
return $classes;
}
add_filter( 'post_class', 'annframe_featured_class' );
カテゴリ、タグ、プラグイン、またはACFフィールドを使用して、さまざまな方法でこれを実行できます。
推奨される方法を使用するには、 admin_init のようなフックと組み合わせて wp_insert_category 関数を使用できます。
function add_featured_category() {
$mcat = array(
'cat_name' => 'Featured',
'category_description' => 'A Featured Category',
'category_nicename' => 'category-featured',
'category_parent' => ''
);
$my_cat_id = wp_insert_category($mcat);
}
add_action('admin_init', 'add_featured_category');