我有一个WordPress多站点,有一个主站点和四个子站点。在我的主站点上的PHP模板中,我想从其中一个子站点获取帖子,并将永久链接打印到页面上。这是如何做到的?
下面是我的代码——当执行此代码时,永久链接确实会打印到屏幕上,但它们不正确——帖子名称正确,但路径不正确。
$tp_blog_id = 4;
switch_to_blog( $tp_blog_id );
$posts = get_posts(
array(
\'post_type\' => \'property\',
\'posts_per_page\' => 100,
\'numberposts\' => -1
)
);
restore_current_blog();
error_log(print_r($posts,true));
foreach ($posts as $post) {
echo "The URL is: <br>";
echo get_blog_permalink( $tp_blog_id, $post->ID ) . "<br>";
}
这是一个
screenshot 输出页面的。permalinks不正确——每一个都会导致404页。本例中打印的错误永久链接的形式如下
http://dev.thailandproperty-hh.com/pattaya/blog/property/1-bedroom-condo-central-pattaya-10/
实际上,permalinks是
http://dev.thailandproperty-hh.com/pattaya/property/1-bedroom-condo-central-pattaya-10/.
作为测试,我在错误日志中打印了
$posts
大堆它确实包含所有所需的post对象。此外,数组中的每个post对象都有一个属性
guid
, 其值为正确的permalink(
screenshot). 我想作为一种解决方法,我可以简单地将此属性回显到页面,而不是
get_blog_permalink()
. 但我想理解为什么后者没有返回预期的永久链接。
UPDATE
我使用以下代码注册我的CPT:
$slug = get_theme_mod( \'property_permalink\' );
$slug = ( empty( $slug ) ) ? \'property\' : $slug;
$args = array(
\'labels\' => $labels,
\'public\' => true,
\'publicly_queryable\' => true,
\'show_ui\' => true,
\'show_in_menu\' => true,
\'query_var\' => true,
\'rewrite\' => array( \'slug\' => $slug ),
\'capability_type\' => \'post\',
\'has_archive\' => true,
\'hierarchical\' => false,
\'menu_position\' => null,
\'supports\' => $supports,
\'taxonomies\' => array( \'property_type\' )
);
register_post_type( \'property\', $args );
SO网友:Krzysiek Dróżdż
让我们看看get_blog_permalink
:
get_blog_permalink( $blog_id, $post_id ) {
switch_to_blog( $blog_id );
$link = get_permalink( $post_id );
restore_current_blog();
return $link;
}
正如你所见,没有魔法。。。但是有一些问题,因为
switch_to_blog
效率不高。。。
这意味着如果你这样做会更好:
$tp_blog_id = 4;
switch_to_blog( $tp_blog_id );
$posts = get_posts(
array(
\'post_type\' => \'property\',
\'posts_per_page\' => 100,
\'numberposts\' => -1
)
);
error_log( print_r($posts,true) );
foreach ( $posts as $post ) {
echo "The URL is: <br>";
echo get_permalink( $post->ID ) . "<br>";
}
restore_current_blog();
如果永久链接仍然存在问题,那么您必须检查注册此CPT的方式(尤其是
with_front
部分
rewrite
参数输入
register_post_type
).
正如我所料,问题就在这一点上。注册CPT时,您使用:
\'rewrite\' => array( \'slug\' => $slug ),
如果你看看
register_post_type
docs, 然后您将看到此参数有多个字段: