我有一个自定义post\\u类型:tvr\\U公寓
function custom_post_apartment() {
$labels = array(
\'name\' => \'Apartments\',
\'singular_name\' => \'Apartment\',
\'add_new\' => \'Add New\',
\'add_new_item\' => \'Add New Apartment\',
\'edit_item\' => \'Edit Apartment\',
\'new_item\' => \'New Apartment\',
\'all_items\' => \'All Apartments\',
\'view_item\' => \'View Apartment\',
\'search_items\' => \'Search Apartments\',
\'not_found\' => \'No apartments found\',
\'not_found_in_trash\' => \'No apartments found in trash\',
\'parent_item_colon\' => \'\',
\'menu_name\' => \'Apartments\'
);
$args = array(
\'labels\' => $labels,
\'public\' => true,
\'query_var\' => true,
\'rewrite\' => true,
\'capability_type\' => \'post\',
\'has_archive\' => true,
\'hierarchical\' => false,
\'menu_position\' => null,
\'taxonomies\' => array(\'rf_apartment_feature\'),
\'supports\' => array( \'title\', \'editor\', \'author\', \'thumbnail\', \'excerpt\' )
);
register_post_type( \'tvr_apartment\', $args );
}
我想为它启用粘性贴子功能,
我在这里搜索:http://codex.wordpress.org/Function_Reference/post_type_supports
但我觉得这似乎不是一条路,有什么想法吗?
SO网友:farinspace
我已经设法做到了以下几点。让我来描述一下这项技术,以便您可以决定是否使用它。
代码使用两个钩子,一个在放置“side”元框之前激发,另一个在发布元框的“date/time”部分之后激发。
第一个钩子(before)记录原始帖子类型,然后将其切换到“post”,wordpress认为这是一篇帖子,并设置特定于“post”帖子类型的默认字段。
第二个挂钩(后)会将立柱类型重置为原始类型。
如果任何人遇到任何问题,或出现任何无法预见的使用案例,而这种技术可能会失败,请务必回复。
// see /wp-admin/edit-form-advanced.php .. since wp 2.5.0
add_action( \'submitpost_box\', function() {
// fyi .. unable to use "post_submitbox_minor_actions" action (/wp-admin/includes/meta-boxes.php) because $post_type is set early
global $post;
if ( isset( $post->post_type ) && in_array( $post->post_type, array( \'post_type_1\', \'post_type_2\' ) ) ) {
echo \'before\'; // debug
$post->post_type_original = $post->post_type;
$post->post_type = \'post\';
}
} );
// see /wp-admin/includes/meta-boxes.php .. since wp 2.9.0
add_action( \'post_submitbox_misc_actions\', function() {
global $post;
if ( isset( $post->post_type_original ) && in_array( $post->post_type_original, array( \'post_type_1\', \'post_type_2\' ) ) ) {
echo \'after\'; // debug
$post->post_type = $post->post_type_original;
unset( $post->post_type_original );
}
} );
Note: 上面介绍了如何将选项添加到UI中,您仍然需要在模板/输出中检查并使用粘性帖子。。类似以下内容(只是没有插件):
https://wordpress.stackexchange.com/a/185915/466
SO网友:Fanky
Edit 2022:您可以使用@Ray’s中提到的插件answer 现在已测试并似乎以本机方式保存粘滞属性,因此您可以使用。ignore_sticky_posts
Original Answer:
由于目前已有的用于此目的的插件都不支持WP5,因此一个简单(但不是很好)的解决方案是使用新的metabox。在您的CPT插件中:
add_meta_box(\'pseudosticky\', \'Is sticky\', \'addbox\', \'YOUR CUSTOM POST TYPE SLUG HERE\', \'normal\', \'high\');
function addbox($post, $metabox) {
$entered = get_post_meta($post->ID, \'pseudosticky\', true);
?>
<label><input name="pseudosticky" type="checkbox"<?if($entered=="on")echo\' checked="checked"\';?>> Is sticky</label>
<?
}
然后在查询中
\'meta_query\' => array(
array(
\'key\' => \'pseudosticky\',
\'value\' => "on",
\'compare\' => \'=\'
)
//more meta conditions can be added here as arrays
),
SO网友:Deepak Kamat
我惊讶地发现这个功能仍然不可用。
我希望至少在WP_Query
我们可能会得到sticky_posts
然后你把身份证传给它,但它不在那里。
所以我做了这样的事情:
<?php
$args = array( \'post_type\' => \'some_post_type\', \'posts_per_page\' => 20 , \'orderby\' => \'title\', \'order\' => \'ASC\');
$loop = new WP_Query( $args );
$sticky_posts = array( 11462 ); // post ids for the posts you want to make sticky goes here
// Also need to show the sticky
while ( $loop->have_posts() ) : $loop->the_post();
if ( in_array($post->ID, $sticky_posts) ):
echo "I am STICKY!";
endif;
endwhile;
while ( $loop->have_posts() ) : $loop->the_post();
if ( !in_array($post->ID, $sticky_posts) ):
echo "I am not sticky :( ";
endif;
endwhile;
当然,这不是最好的解决方案,它有多个注意事项,但它适用于我的简单要求,即我只有一篇文章我想坚持到顶部。
问题/注意事项:
您必须修改有查询的代码块,并添加多个循环你不能定制只有当前查询中的帖子才会显示,因此如果您的帖子超过了每页设置的帖子限制,那么该帖子就不会有粘性,至少在该页面上是这样