Skip to content

Instantly share code, notes, and snippets.

@kurudrive
Last active November 15, 2016 01:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kurudrive/0fc5acf0dc2a3c140a3e4285c79d404e to your computer and use it in GitHub Desktop.
Save kurudrive/0fc5acf0dc2a3c140a3e4285c79d404e to your computer and use it in GitHub Desktop.
WordPressで指定の投稿を優先表示させる ref: http://qiita.com/kurudrive/items/2bcea48d3a6655f555b0
<?php
if ( ! class_exists( 'RecommendPost' ) ) {
class RecommendPost {
static function init(){
add_action( 'admin_menu', array( __CLASS__, 'add_meta_box') );
add_action('save_post', array( __CLASS__, 'save_meta_data') );
add_action('pre_get_posts', array( __CLASS__, 'change_order') );
}
/*-------------------------------------------*/
/* Recommend設定用のメタボックスを追加
/*-------------------------------------------*/
// add meta_box
public static function add_meta_box() {
$post_type = 'post';
add_meta_box(
'recommend meta box',
'優先表示',
array( __CLASS__, 'pad_content_meta_fields' ),
$post_type,
'side'
);
}
/*-------------------------------------------*/
/* 入力フィールドの生成
/*-------------------------------------------*/
public static function pad_content_meta_fields(){
//CSRF対策の設定(フォームにhiddenフィールドとして追加するためのnonceを「'noncename__recommend」として設定)
wp_nonce_field( wp_create_nonce(__FILE__), 'noncename__recommend' );
global $post;
$checked = ( get_post_meta( $post->ID,'recommend_post',true ) == 1) ? ' checked':'';
$label = '優先表示する';
echo '<ul>';
echo '<li><label>'.'<input type="checkbox" id="recommend_post" name="recommend_post" value="1"'.$checked.'> '.$label.'</label></li>';
echo '</ul>';
}
/*-------------------------------------------*/
/* 入力された値の保存
/*-------------------------------------------*/
public static function save_meta_data($post_id){
global $post;
//設定したnonce を取得(CSRF対策)
$noncename__recommend = isset($_POST['noncename__recommend']) ? $_POST['noncename__recommend'] : null;
//nonce を確認し、値が書き換えられていれば、何もしない(CSRF対策)
if(!wp_verify_nonce($noncename__recommend, wp_create_nonce(__FILE__))) {
return $post_id;
}
//自動保存ルーチンかどうかチェック。そうだった場合は何もしない(記事の自動保存処理として呼び出された場合の対策)
if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return $post_id; }
$field = 'recommend_post';
$field_value = ( isset( $_POST[$field] ) ) ? $_POST[$field] : '0';
// データが空だったら入れる
if( get_post_meta($post_id, $field ) == ""){
add_post_meta($post_id, $field , $field_value, true);
// 今入ってる値と違ってたらアップデートする
} elseif( $field_value != get_post_meta( $post_id, $field , true)){
update_post_meta($post_id, $field , $field_value);
// 入力がなかったら消す
// } elseif( $field_value == "" ){
// delete_post_meta($post_id, $field , get_post_meta( $post_id, $field , true ));
}
}
/*-------------------------------------------*/
/* レコメンドにチェックされている記事を優先表示する
/*-------------------------------------------*/
public static function change_order($query){
if ( is_admin() ) return;
if( is_archive() && ( $query->query_vars['post_type'] == 'post' ) ) {
$query->set('meta_key', 'recommend_post');
$query->set('orderby', array('recommend_post' => 'DESC', 'date' => 'DESC') );
}
return $query;
}
} // class RecommendPost {
$RecommendPost = new RecommendPost();
$RecommendPost::init();
}
<?php
if ( ! class_exists( 'RecommendPost' ) ) {
class RecommendPost {
static function init(){
add_action( 'admin_menu', array( __CLASS__, 'add_meta_box') );
add_action('save_post', array( __CLASS__, 'save_meta_data') );
add_action('pre_get_posts', array( __CLASS__, 'change_order') );
}
/*-------------------------------------------*/
/* Recommend設定用のメタボックスを追加
/*-------------------------------------------*/
// add meta_box
public static function add_meta_box() {
$post_type = 'post';
add_meta_box(
'recommend meta box',
'優先表示',
array( __CLASS__, 'pad_content_meta_fields' ),
$post_type,
'side'
);
}
/*-------------------------------------------*/
/* 入力フィールドの生成
/*-------------------------------------------*/
public static function pad_content_meta_fields(){
//CSRF対策の設定(フォームにhiddenフィールドとして追加するためのnonceを「'noncename__recommend」として設定)
wp_nonce_field( wp_create_nonce(__FILE__), 'noncename__recommend' );
global $post;
$checked = ( get_post_meta( $post->ID,'recommend_post',true ) == 1) ? ' checked':'';
$label = '優先表示する';
echo '<ul>';
echo '<li><label>'.'<input type="checkbox" id="recommend_post" name="recommend_post" value="1"'.$checked.'> '.$label.'</label></li>';
echo '</ul>';
}
/*-------------------------------------------*/
/* 入力された値の保存
/*-------------------------------------------*/
public static function save_meta_data($post_id){
global $post;
//設定したnonce を取得(CSRF対策)
$noncename__recommend = isset($_POST['noncename__recommend']) ? $_POST['noncename__recommend'] : null;
//nonce を確認し、値が書き換えられていれば、何もしない(CSRF対策)
if(!wp_verify_nonce($noncename__recommend, wp_create_nonce(__FILE__))) {
return $post_id;
}
//自動保存ルーチンかどうかチェック。そうだった場合は何もしない(記事の自動保存処理として呼び出された場合の対策)
if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return $post_id; }
$field = 'recommend_post';
$field_value = ( isset( $_POST[$field] ) ) ? $_POST[$field] : '0';
// データが空だったら入れる
if( get_post_meta($post_id, $field ) == ""){
add_post_meta($post_id, $field , $field_value, true);
// 今入ってる値と違ってたらアップデートする
} elseif( $field_value != get_post_meta( $post_id, $field , true)){
update_post_meta($post_id, $field , $field_value);
// 入力がなかったら消す
// } elseif( $field_value == "" ){
// delete_post_meta($post_id, $field , get_post_meta( $post_id, $field , true ));
}
}
/*-------------------------------------------*/
/* レコメンドにチェックされている記事を優先表示する
/*-------------------------------------------*/
public static function change_order($query){
if ( is_admin() ) return;
if( is_archive() && ( $query->query_vars['post_type'] == 'post' ) ) {
$query->set('meta_key', 'recommend_post');
$query->set('orderby', array('recommend_post' => 'DESC', 'date' => 'DESC') );
}
return $query;
}
} // class RecommendPost {
$RecommendPost = new RecommendPost();
$RecommendPost::init();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment