我注册了一个新的帖子类型“侧边栏”,所以我可以随时创建不同的侧边栏。
function rh_create_sidebar_post_type() {
$labels = array(
\'name\' => __( \'Sidebars\' ),
\'singular_name\' => __( \'Sidebar\' ),
\'add_new\' => __( \'New Sidebar\' ),
\'add_new_item\' => __( \'Add New Sidebar\' ),
\'edit_item\' => __( \'Edit Sidebar\' ),
\'new_item\' => __( \'New Sidebar\' ),
\'view_item\' => __( \'View Sidebar\' ),
\'search_items\' => __( \'Search Sidebars\' ),
\'not_found\' => __( \'No Sidebars Found\' ),
\'not_found_in_trash\' => __( \'No Sidebars found in Trash\' ),
);
$args = array(
\'labels\' => $labels,
\'has_archive\' => false,
\'public\' => true,
\'hierarchical\' => false,
\'supports\' => array(
\'title\',
\'editor\',
\'excerpt\',
\'custom-fields\',
\'thumbnail\',
\'page-attributes\'
),
);
register_post_type( \'sidebar_post\', $args );
}
add_action( \'init\', \'rh_create_sidebar_post_type\' );
然后在页面/后期管理屏幕上,我加载一个元框,其中包含我创建的所有侧栏的组合框
function load_sidebar_custom_meta_box( $post )
{
$value = get_post_meta( $post->ID, \'_rh_custom_sidebar\', true );
// The Query
$args = array(\'post_type\' => \'sidebar_post\');
$the_query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
echo \'<select name="rh_custom_page_sidebar" id="rh_custom_page_sidebar">\';
echo \'<option value="-1">No Sidebar</option>\';
while ( $the_query->have_posts() ) {
$the_query->the_post();
$selected = \'\';
if ( get_the_ID() == $value ) {
$selected = \'selected\';
}
echo \'<option value="\'. get_the_ID() . \'" \' .$selected .\'>\' . get_the_title() . \'</option>\';
}
echo \'</select>\';
}
wp_reset_postdata(); //So custom sidebar post type doesn\'t overwrite main query
}
这两件很好用。然而,每当我选择一个侧栏并单击保存时,它就会将我的页面slug/URL更改为侧栏帖子类型中的URL。我不能把它改回来。无论我在顶部手动编辑它,然后单击“确定”然后单击“更新”,它都会返回到提要栏URL/slug。
例如.com/about-us
我正在尝试编辑的页面现在是.com/default-sidebar
我不能把它改回来。
这里是我的保存方法,不提post_name
.
add_action( "save_post", "save_sidebar_post_page", 100 );
function save_sidebar_post_page( $post_ID )
{
if ( defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE ) {
return $post_ID ;
}
global $post;
if( isset( $_POST[\'rh_custom_page_sidebar\'] )) {
update_post_meta( $post_ID, \'_rh_custom_sidebar\', $_POST[\'rh_custom_page_sidebar\'] );
}
}
UPDATE
注意到,当我在默认Wordpress页面部分中单击“新建页面”时,它似乎认为这是我的自定义post\\u类型
sidebar_post
. 在单击Yoast选项卡进行页面分析时注意到,它有以下错误:
“未为此设置焦点关键字sidebar_post
. 如果未设置焦点关键字,则无法计算分数。“”
所以,出于某种原因,当它创建一个新页面时,它会认为这是一个侧边栏帖子,所以这一定是在我发布或更新时发生的,这会导致我对permalink的问题。然而,我没有看到在我的代码中,这两件事会在哪里混淆?
UPDATE 2
这似乎是在我第一次在页面上设置自定义侧栏之后发生的。它工作得很好,我的permalink在前端正确加载。但是,如果我再次在管理员中编辑同一页,它看起来就像加载了侧栏post_name
在admin的隐藏输入字段中。
所以当我更新页面时post_name
正在提交。在第一次保存后,在源代码中找到以下嵌入内容。值应为about-us
.
<div class="inside">
<label class="screen-reader-text" for="post_name">Slug</label><input name="post_name" type="text" size="13" id="post_name" value="test-sidebar-post">
</div>
看起来发生的是我的
WP_Query
正在覆盖全局
$post
变量我现在明白你在说什么了,米洛。尝试使用
get_posts