私は私のユーザーがどの投稿がホームページに表示されるかをカスタマイズすることを可能にするワードプレスプラグインを探しています。ユーザーは、自分が投稿を見たいカテゴリとタグを選択できる設定ページを用意する必要があります。
そのようなものが開発されたかどうか知っていますか?無料またはプレミアム.
私は私のユーザーがどの投稿がホームページに表示されるかをカスタマイズすることを可能にするワードプレスプラグインを探しています。
このための特定のプラグインがあるかどうかわからないが、それは確かにいくつかの機能で可能です。
ユーザーは、自分が投稿を見たいカテゴリとタグを選択できる設定ページを用意する必要があります。
プロフィールページとは別の設定ページを用意するよりも簡単です。実際には、ユーザーのプロフィールページに新しいフィールドをいくつか追加することをお勧めします。home preferencesというセクションを呼び出します。 /またはあなたが好きなものは何でも。
例が続きます...
ここで私は答えるときマイクがしたのと同じアプローチを取りました:
ユーザープロファイルページにカスタムフォームフィールドを追加する方法 、ユーザープロファイルの保存と管理者ユーザーによる編集を考慮して2つのアクションを実行する方法。
add_action( 'show_user_profile', 'home_prefs_profile_fields' );
add_action( 'edit_user_profile', 'home_prefs_profile_fields' );
function home_prefs_profile_fields( $user ) {
$um = get_user_option( 'taxonomy_selection', $user->ID );
$tags = ( isset( $um['post_tag'] ) ) ? $um['post_tag'] : array();
$cats = ( isset( $um['categories'] ) ) ? $um['categories'] : array();
?>
<div id="home-prefs">
<h3>Home Preferences</h3>
<table class="form-table">
<tr>
<th>
<label for="tax_input[post_tag]">Tags</label><br />
<span class="description">Choose which tags you want to display on the home page.</span>
</th>
<td>
<ul id="tag-checklist">
<?php wp_terms_checklist( 0, array( 'taxonomy' => 'post_tag', 'selected_cats' => $tags ) ); ?>
</ul>
<br class="clear" />
<hr />
</td>
</tr>
<tr>
<th>
<label for="post_category">Categories</label><br />
<span class="description">Choose which categories you want to display on the home page.</span>
</th>
<td>
<ul id="category-checklist">
<?php wp_category_checklist( 0, 0, $cats, false ) ?>
</ul>
</td>
</tr>
</table>
</div>
<?php
}
用語とカテゴリーのチェックリストに関する情報は出典にあります(まだ文書化されていません)。
http://core.trac.wordpress.org/browser/tags/3.0.2/wp-admin/includes/template.php#L217
繰り返しますが、ユーザーがプロファイルの変更を保存しているのか、別のユーザーが別のユーザーのプロファイルを変更しているのかに応じて、2つのアクションがあります。
add_action( 'personal_options_update', 'save_home_prefs' );
add_action( 'edit_user_profile_update', 'save_home_prefs' );
function save_home_prefs( $user_id ) {
if ( !current_user_can( 'edit_user', $user_id ) )
return false;
$data = array();
if( isset( $_POST['tax_input'] ) ) {
foreach( $_POST['tax_input'] as $taxonomy => $term_ids )
if( !taxonomy_exists( $taxonomy ) )
continue;
else
$data[$taxonomy] = array_map( 'intval', $term_ids );
}
if( isset( $_POST['post_category'] ) )
$data['categories'] = $_POST['post_category'];
update_user_meta( $user_id, 'taxonomy_selection', $data );
}
注:上記にさらにサニタイズを追加しても問題ありません。
子供の言葉をインデントし、メインリストの項目を浮かべるので、忙しい分類法はそれほど多くの高さを消費しません。
add_action( 'admin_print_styles-user-edit.php', 'tax_checklist_css' );
add_action( 'admin_print_styles-profile.php', 'tax_checklist_css' );
function tax_checklist_css() {
?>
<style type="text/css">
.children { text-indent: 20px }
#tag-checklist li { float:left;width:30% }
#category-checklist li { float:left;width:30% }
#category-checklist li li { float:none;width:auto }
</style>
<?php
}
注:リスト項目の30%の幅は基本的に3列の用語の外観を与えます、あなたはそれに合うようにCSSを調整することを歓迎します。
これは同じくらい簡単にエンキューに変えることもできます。これはある程度のキャッシングを提供します、インラインCSSはテストがより速いですがすべてです…;)
ユーザーが設定したタグとカテゴリの設定に基づいて、ホームクエリにフィルタを追加します。
add_action( 'pre_get_posts', 'do_user_post_selection' );
function do_user_post_selection( $query ) {
if( !is_home() || !is_user_logged_in() )
return;
if( isset( $query->query_vars['post_type'] ) && ( 'nav_menu_item' == $query->query_vars['post_type'] ) )
return;
if( 1 < did_action('wp') )
return;
global $current_user;
$tax_selection = get_user_option( 'taxonomy_selection', $current_user->ID );
if( empty( $tax_selection ) )
return;
if( isset( $tax_selection['categories'] ) && ( is_array( $tax_selection['categories'] ) ) && ( !empty( $tax_selection['categories'] ) ) )
$query->set( 'category__in', $tax_selection['categories'] );
if( isset( $tax_selection['post_tag'] ) && ( is_array( $tax_selection['post_tag'] ) ) && ( !empty( $tax_selection['post_tag'] ) ) )
$query->set( 'tag__in', $tax_selection['post_tag'] );
return;
}
注:pre_get_posts
フィルターを使う必要はありません。parse_query
を使うこともWP_Query
オブジェクトに値を渡すこともできます。それが私が使っているものです。).
UPDATE:ホーム設定要素をプロファイルページの一番上に移動します。
function move_prefs() {
?>
<script type="text/javascript">
jQuery(document).ready(function($){
$('#home-prefs').prependTo('#your-profile');
$('input[type=checkbox]').attr('disabled',false);
});
</script>
<?php
}
add_action( 'admin_head-user-edit.php', 'move_prefs' );
add_action( 'admin_head-profile.php', 'move_prefs' );
注:home_prefs_profile_fields
関数へのHTMLのわずかな更新も必要です。で必要に応じて関数を更新しました。 /ステップ1 .
RE:購読者から無効になっていることを示すチェックボックス(コメントを参照)。これが発生するのは、チェックリスト機能という用語の機能チェックによるものです。通常は投稿作成タイプの画面で使用されるので、ユーザーが投稿(またはタイプ)に用語を割り当てる機能を持っていることを期待します。これは明らかにこの特定のケースには当てはまりません。適切な変更を加えて修正されました。
それが役立つことを願っています... :)
このコードはテストされていませんが、それをあなたのfunction.phpファイルに入れて、何が起こるのかを見てください。
理論的にはこうなるはずです。
あなたのテンプレートでは、これを使用してメタタグから値を取得するだけです。
$categories = get_option('fp_categories');
$tags = get_option('fp_tags');;
それならquery_post
でこれを使ってください。
これはプラグイン/コードです:
add_action('admin_menu', 'cms_options_menu');
function cms_options_menu() {
//create new top-level menu
add_menu_page('CMS options', __('CMS options'), 'administrator', __FILE__, 'cms_options_page',plugins_url('/images/icon.png', __FILE__));
//call register settings function
add_action( 'admin_init', 'register_cms_options' );
}
function register_cms_options() {
//register our settings
register_setting( 'cms-options', 'fp_categories' );
register_setting( 'cms-options', 'fp_tags' );
}
function cms_options_page() {
?>
<div class="wrap">
<h2>CMS settings</h2>
<form method="post" action="options.php">
<?php settings_fields( 'cms-options' ); ?>
<table class="form-table">
<tr valign="top">
<td scope="row"><?php _e('Categories');?></td>
<td><input type="text" name="fp_categories" class="regular-text" value="<?php echo get_option('fp_categories'); ?>" /></td>
</tr>
<tr valign="top">
<td scope="row"><?php _e('Tags');?></td>
<td><input type="text" name="fp_tags" class="regular-text" value="<?php echo get_option('fp_tags); ?>" /></td>
</tr>
</table>
<div id="fileBrowser" title="File browser"> </div>
<p class="submit">
<input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
</p>
</form>
</div>
<?php }
Justin Tadlockの Query Posts プラグインを見ましたか?