web-dev-qa-db-ja.com

特定の投稿に「おすすめ」クラスを追加する

私のテーマがより注目を集めることができるように、私は私のテーマのユーザーがいくつかの投稿をより重要としてマークできるようにしたいと思います。私はこれに取り組むための最良の方法がわからないのですか?誰かが私のテーマをインストールしたときにオプションとして存在するテーマにデフォルトのカテゴリーの「おすすめ」を追加することは可能ですか?

編集:管理画面にカスタムメタボックスを追加するアプローチを取る:このようなものが動作するはずですか?

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' );
1
olliew

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' ); 
3
Anwer AR

カテゴリ、タグ、プラグイン、または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');
2