我创建了一个名为Events
姓名为events
function add_events_post_type() {
register_post_type("events", array(
"label" => __("Events"),
"singular_label" => __("events"),
"public" => true,
"capability_type" => "post",
"hierarchical" => false,
"rewrite" => array("slug" => "event"),
"query_var" => false,
"show_ui" => true,
"supports" => array("title", "editor", "author")
));
}
add_action(\'init\', \'add_events_post_type\');
我使用以下方法创建自定义元框
define(\'MY_WORDPRESS_FOLDER\',$_SERVER[\'DOCUMENT_ROOT\']);
define(\'MY_THEME_FOLDER\',str_replace("\\\\",\'/\',dirname(__FILE__)));
define(\'MY_THEME_PATH\',\'/\' . substr(MY_THEME_FOLDER,stripos(MY_THEME_FOLDER,\'wp-content\')));
add_action(\'admin_init\',\'my_meta_init\');
function my_meta_init()
{
// review the function reference for parameter details
// http://codex.wordpress.org/Function_Reference/wp_enqueue_script
// http://codex.wordpress.org/Function_Reference/wp_enqueue_style
//wp_enqueue_script(\'my_meta_js\', MY_THEME_PATH . \'/custom/meta.js\', array(\'jquery\'));
wp_enqueue_style(\'my_meta_css\', MY_THEME_PATH . \'/custom/meta.css\');
// review the function reference for parameter details
// http://codex.wordpress.org/Function_Reference/add_meta_box
// add a meta box for each of the wordpress page types: posts and pages
foreach (array(\'events\') as $type)
{
add_meta_box(\'my_all_meta\', \'Event Info\', \'my_meta_setup\', $type, \'normal\', \'high\');
}
// add a callback function to save any data a user enters in
add_action(\'save_post\',\'my_meta_save\');
}
function my_meta_setup()
{
global $post;
// using an underscore, prevents the meta variable
// from showing up in the custom fields section
$meta = get_post_meta($post->ID,\'_my_meta\',TRUE);
// instead of writing HTML here, lets do an include
include(MY_THEME_FOLDER . \'/custom/events.php\');
// create a custom nonce for submit verification later
echo \'<input type="hidden" name="my_meta_noncename" value="\' . wp_create_nonce(__FILE__) . \'" />\';
}
function my_meta_save($post_id)
{
// authentication checks
// make sure data came from our meta box
if (!wp_verify_nonce($_POST[\'my_meta_noncename\'],__FILE__)) return $post_id;
// check user permissions
if ($_POST[\'post_type\'] == \'page\')
{
if (!current_user_can(\'edit_page\', $post_id)) return $post_id;
}
else
{
if (!current_user_can(\'edit_post\', $post_id)) return $post_id;
}
// authentication passed, save data
// var types
// single: _my_meta[var]
// array: _my_meta[var][]
// grouped array: _my_meta[var_group][0][var_1], _my_meta[var_group][0][var_2]
$current_data = get_post_meta($post_id, \'_my_meta\', TRUE);
$new_data = $_POST[\'_my_meta\'];
my_meta_clean($new_data);
if ($current_data)
{
if (is_null($new_data)) delete_post_meta($post_id,\'_my_meta\');
else update_post_meta($post_id,\'_my_meta\',$new_data);
}
elseif (!is_null($new_data))
{
add_post_meta($post_id,\'_my_meta\',$new_data,TRUE);
}
return $post_id;
}
function my_meta_clean(&$arr)
{
if (is_array($arr))
{
foreach ($arr as $i => $v)
{
if (is_array($arr[$i]))
{
my_meta_clean($arr[$i]);
if (!count($arr[$i]))
{
unset($arr[$i]);
}
}
else
{
if (trim($arr[$i]) == \'\')
{
unset($arr[$i]);
}
}
}
if (!count($arr))
{
$arr = NULL;
}
}
}
我的自定义框如下所示
<div class="my_meta_control">
<p>Fill out this information so that events will post show.</p>
<label>Event Start Date</label>
<p><input type="text" name="_my_meta[eventstartdate]" class="date-pick" value="<?php if(!empty($meta[\'eventstartdate\'])) echo $meta[\'eventstartdate\']; ?>"/></p>
<label>Event End Date</label>
<p><input type="text" name="_my_meta[eventenddate]" class="date-pick" value="<?php if(!empty($meta[\'eventenddate\'])) echo $meta[\'eventenddate\']; ?>"/></p>
<label>Publish Date</label>
<p><input type="text" name="_my_meta[publish]" class="date-pick" value="<?php if(!empty($meta[\'publish\'])) echo $meta[\'publish\']; ?>"/></p>
<label>Hide Date</label>
<p><input type="text" name="_my_meta[hide]" class="date-pick" value="<?php if(!empty($meta[\'hide\'])) echo $meta[\'hide\']; ?>"/></p>
<label>Sticky</label>
<p><input type="checkbox" name="_my_meta[sticky]" value="sticky" <?php if($meta[\'sticky\'] == \'sticky\') { echo \'checked="checked"\'; } ?>/></p>
<div id="clearer"></div>
</div>
我正在使用此查询查询网站主页上自定义帖子类型中的帖子。
<?php
$args = array( \'post_type\' => \'events\', \'posts_per_page\' => 3 );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
$data = get_post_custom(get_the_ID());
$data2 = $data[\'_my_meta\'];
$data3 = unserialize($data2[0]);
if($data3[\'sticky\'] == \'sticky\')
{
echo \'<strong>\'.get_the_title().\'</strong><br />\';
} else {
echo \'\'.get_the_title().\'<br />\';
}
endwhile;
?>
我想使用自定义元框中的事件开始日期对查询进行排序。我试过这个,但运气不好。有人能帮我吗?