私はWPの大幅にカスタマイズされたインストールで作業しています。特定の投稿タイプ、分類法、およびその投稿タイプだけを使用できるようになるロールを設定しました。
理想的には、私はその役職のメンバーがその役職タイプを使用して1つの役職だけを作成するように制限したいと思います。それは価値があるよりももっと面倒かもしれないようです。それを除けば、アーカイブビューで最も古い投稿のみを表示したいのです。
実行可能なアーカイブループを作成する次のようなものがありますが、「投稿数> 1の場合、最も古い投稿のみが表示される」ということを考えていません。
$args = array
('post_type' => 'ticketlisting',
'posts_per_page' => 50,
'tax_query' => array
(array
(
'taxonomy' => 'tier',
'field' => 'slug',
'terms' => 'goldstar'
)
)
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
the_title();
echo '<div class="entry-content">';
$post_id = get_the_ID();
/* show post content here */
echo '</div>';
endwhile;
ユーザーを1つの投稿に制限するには、新しい投稿を作成しないでください。プロファイルに wp_editor()
インスタンスを1つ追加するだけです。
'show_user_profile'
と'edit_user_profile'
にフックします。'personal_options_update'
および'edit_user_profile_update'
にフックして、コンテンツをユーザーメタまたは非表示のカスタム投稿タイプに保存します。これで、検索する必要がなくなり、新しい投稿を作成できなくなります。
意味を説明するために、古いプラグインを更新しました。
<?php # -*- coding: utf-8 -*-
/**
* Plugin Name: T5 User text rich editor
* Text Domain: t5_utre
* Domain Path: /lang
* Description: Adds a rich editor to the user profile.
* Version: 2012.02.28
* Required: 3.3
* Author: Thomas Scholz <[email protected]>
* Author URI: http://toscho.de
* License: MIT
* License URI: http://www.opensource.org/licenses/mit-license.php
*
* Copyright (c) 2012 Thomas Scholz
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
// Not a WordPress context? Stop.
! defined( 'ABSPATH' ) and exit;
// Back end
add_action( 'admin_init', array ( 'T5_User_Text_Rich_Edit', 'init' ) );
// Front end
// Call it your theme’s author.php:
// do_action( 'print_t5_user_rich_text', $GLOBALS['authordata']->ID );
add_action(
'print_t5_user_rich_text',
array ( 'T5_User_Text_Rich_Edit', 'get_user_rich_text' ),
4
);
class T5_User_Text_Rich_Edit
{
protected
/**
* Internal name for the user meta field.
* @type string
*/
$handle = 'meta_post'
/**
* Current user ID
*
* @type int
*/
, $user_id = NULL
;
/**
* Copy of $handle. Used by the static method.
*
* @type string
*/
protected static $public_handle = 'meta_post';
/**
* Creates a new instance. Called on 'admin_init'.
*
* @see __construct()
* @return void
*/
public static function init()
{
new self;
}
/**
* Contructor. Registers filters and actions.
*
* @param array $params Just 'handle', may be extended.
* @return void
*/
public function __construct( $params = array () )
{
isset ( $params['handle'] )
and $this->handle = $params['handle']
and self::$public_handle = $params['handle'];
add_action( 'show_user_profile', array ( $this, 'show' ) );
add_action( 'edit_user_profile', array ( $this, 'show' ) );
add_action( 'personal_options_update', array ( $this, 'save' ) );
add_action( 'edit_user_profile_update', array ( $this, 'save' ) );
}
/**
* Public access to the field in your theme or plugin.
*
* @param int $user_id
* @param string $before
* @param string $after
* @return string
*/
public static function get_user_rich_text(
$user_id,
$before = '',
$after = '',
$print = TRUE
)
{
$content = get_the_author_meta( self::$public_handle, $user_id );
! empty ( $content )
and $content = $before . wpautop( $content ) . $after;
$print and print $content;
return $content;
}
/**
* Prints the form.
*
* @param object $user
* @return void
*/
public function show( $user )
{
if ( ! current_user_can( 'edit_user', $user->ID ) )
{
return;
}
$label_text = __( 'Your personal post', 't5_utre' );
$label = "<label for='$this->handle'>$label_text</label>";
?>
<table class="form-table">
<tr>
<th>
<?php
print $label;
?>
</th>
<td>
<div style="width:504px">
<?php
$content = get_the_author_meta( $this->handle, $user->ID );
$this->print_editor( $content );
?>
</div>
</td>
</tr>
</table>
<?php
}
/**
* Print a new instance of wp_editor()
*
* @param string $content existing content
* @return void
*/
protected function print_editor( $content )
{
$editor_settings = array (
'textarea_rows' => 15
, 'media_buttons' => TRUE
, 'teeny' => FALSE
, 'tinymce' => TRUE
);
wp_editor( $content, $this->handle, $editor_settings );
}
/**
* Saves the data.
*
* @param int $user_id
* @return void
*/
public function save( $user_id )
{
if ( ! current_user_can( 'edit_user', $user_id ) )
{
return;
}
$this->user_id = $user_id;
$text_input = empty ( $_POST[ $this->handle ] ) ? '' : $_POST[ $this->handle ];
update_user_meta( $user_id, $this->handle, $text_input );
}
}
あなたは自分で言語ファイルを追加しなければなりません(あるいは誰かが十分に興味を持っているなら私はそれをGitHubに置きます)。
これでユーザープロファイルの一番下にNiceエディタが表示されます。
テーマのauthor.php
では、定義済みのアクションを使ってデータにアクセスすることができます。
<?php do_action( 'print_t5_user_rich_text', $GLOBALS['authordata']->ID ); ?>
このプラグインはユーザーが持っているかもしれない他のどの機能にも触れません。それは彼女自身のプロフィールを編集する能力に縛られています。