WP 멀티 사이트 인스턴스 설정-클라이언트에는 기존 온톨로지 / 카테고리 세트가 있으며 블로그 세트에서 모든 컨텐츠를 분류하려고합니다. 또한 새로운 범주가 '네트워크 블로그'수준에서 추가되고 다른 블로그와 동기화되기를 원합니다.
가장 좋은 방법은 무엇입니까?
WP 멀티 사이트 인스턴스 설정-클라이언트에는 기존 온톨로지 / 카테고리 세트가 있으며 블로그 세트에서 모든 컨텐츠를 분류하려고합니다. 또한 새로운 범주가 '네트워크 블로그'수준에서 추가되고 다른 블로그와 동기화되기를 원합니다.
가장 좋은 방법은 무엇입니까?
답변:
function __add_global_categories( $term_id )
{
if ( get_current_blog_id() !== BLOG_ID_CURRENT_SITE || ( !$term = get_term( $term_id, 'category' ) ) )
return $term_id; // bail
if ( !$term->parent || ( !$parent = get_term( $term->parent, 'category' ) ) )
$parent = null;
global $wpdb;
$blogs = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}'" );
foreach ( $blogs as $blog ) {
$wpdb->set_blog_id( $blog );
if ( $parent && ( $_parent = get_term_by( 'slug', $parent->slug, 'category' ) ) )
$_parent_ID = $_parent->term_id;
else
$_parent_ID = 0;
wp_insert_term( $term->name, 'category', array(
'slug' => $term->slug,
'parent' => $_parent_ID,
'description' => $term->description
));
}
$wpdb->set_blog_id( BLOG_ID_CURRENT_SITE );
}
add_action( 'created_category', '__add_global_categories' );
기본 사이트에 카테고리가 추가 될 때마다 실행 됩니다. 언급 할만한 몇 가지주의 사항 / 점;
아, 일요일 지연
https://github.com/maugly/Network-Terminator
이것은 지난 몇 시간 동안 해왔으며 지금은 더 이상 테스트 할 시간이 없습니다. 어쨌든-그것은 나를 위해 작동합니다! .)
시도 해봐. '테스트 실행'기능도 구현되어 있으므로 실제로 무언가를하기 전에 결과를 확인할 수 있습니다.
업데이트-> 스크린 샷 :
행동 전 :
테스트 실행 후 :
위에 링크 된 플러그인은 사용자 인터페이스를 추가하지만이 기능에서 거의 모든 중요한 일이 발생합니다.
<?php function mau_add_network_terms($terms_to_add, $siteids, $testrun = false) {
// check if this is multisite install
if ( !is_multisite() )
return 'This is not a multisite WordPress installation.';
// very basic input check
if ( empty($terms_to_add) || empty($siteids) || !is_array($terms_to_add) || !is_array($siteids) )
return 'Nah, I eat only arrays!';
if ($testrun) $log = '<p><em>No need to get excited. This is just a test run.</em></p>';
else $log = '';
// loop thru blogs
foreach ($siteids as $blog_id) :
switch_to_blog( absint($blog_id) );
$log .= '<h4>'.get_blog_details( $blog_id )->blogname.':</h4>';
$log .= '<ul id="ntlog">';
// loop thru taxonomies
foreach ( $terms_to_add as $taxonomy => $terms ) {
// check if taxonomy exists
if ( taxonomy_exists($taxonomy) ) {
// get taxonomy name
$tax_name = get_taxonomy($taxonomy);
$tax_name = $tax_name->labels->name;
//loop thru terms
foreach ( $terms as $term ) {
// check if term exists
if ( term_exists($term, $taxonomy) ) {
$log .= "<li class='notice' ><em>$term already exists in the $tax_name taxonomy - not added!</em></li>";
} else {
// if it doesn't exist insert the $term to $taxonomy
$term = strip_tags($term);
$taxonomy = strip_tags($taxonomy);
if (!$testrun)
wp_insert_term( $term, $taxonomy );
$log .= "<li><b>$term</b> successfully added to the <b>$tax_name</b> taxonomy</li>";
}
}
} else {
// tell our log that taxonomy doesn't exists
$log .= "<li class='notice'><em>The $tax_name taxonomy doesn't exist! Skipping...</em></li>";
}
}
$log .= '</ul>';
// we're done here
restore_current_blog();
endforeach;
if ($testrun) $log .= '<p><em>No need to get excited. This was just the test run.</em></p>';
return $log;
} ?>
나중에 돌아와서 필요한 경우 나중에 더 많은 정보로 편집 할 것입니다.
완벽하지는 않습니다 (플러그인 헤드에서 알려진 문제 읽기).
모든 의견에 감사드립니다!
TheDeadMedic의 대답은 좋아 보이지만 문제에 대해 다른 접근법을 사용했습니다. 여러 사이트에서 동일한 용어를 복제하는 대신 다른 사이트에서 홈 사이트의 테이블을 용어로 사용하도록 만들었습니다.
add_action('init', 'central_taxonomies');
function central_taxonomies () {
global $wpdb;
$wpdb->terms = "wp_terms";
$wpdb->term_taxonomy = "wp_term_taxonomy";
}
이 테이블 이름 대신 wp_2_terms
에 wp_terms
당신은 당신의 데이터베이스 물론 검사의 당신이 당신의 접두사를 변경 한 경우 다를 수 있습니다 테이블의 정확한 이름의 수 있도록해야한다 등.
플러그인 또는 테마에서 플러그인을 실행할 수 있습니다 (플러그인을 권장하지만). 플러그인을 게시하여 어느 시점 에서이 작업을 수행 할 수 있습니다. 이 방법에는 두 가지 단점이 있습니다.
이 접근 방식은 유연합니다. 중앙 블로그뿐만 아니라 모든 블로그에서 카테고리를 가져 오도록 조정할 수 있습니다.
업데이트 : 플러그인으로 만들었습니다. 필요한 경우 사이트 전체에서 활성화 할 수 있습니다 .MU Central Taxonomies
term_relationships
테이블이 포함되어서는 안됩니다. 플러그인에서 오래 전에 발견하고 수정했지만 일치하도록이 답변을 업데이트하지 않았습니다.
네 가능합니다. 나는 전에 WPMU 세에 대한이 같은 플러그인 (http://natureofmind.org/30/default-categories-for-new-blogs/하지만 더 이상 지원) 더 최신 다음과 같은 두 가지 플러그인 것을 구축 : HTTP : //wordpress.org/extend/plugins/wpmu-new-blog-defaults/ 및 http://premium.wpmudev.org/project/new-blog-template