Я создаю клиентский портал, где мои клиенты могут поддерживать свои проекты и оставлять отзывы в Wordpress. У меня есть два пользовательских типа сообщений, называемых «Клиенты» и «Проекты», и каждый из них получает информацию друг от друга в бэкэнде. Когда я создаю клиента, он автоматически генерирует свой postID для выпадающего меню в типе записей проектов, где я могу назначить клиента для проекта.
Что я пытаюсь сделать, так это отобразить все проекты, связанные с выбранным клиентом, на одной странице в интерфейсе. Одной страницей будет клиентский портал, который генерируется типом сообщения клиента.
Я не могу отобразить соответствующий пост. Вот мой код, для single.php
которого будут отображаться проекты на портале клиентов.
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$loop = new WP_Query( array(
'post_type' => array( 'projects'),
'posts_per_page' => -1,
'paged' => $paged,
'meta_query' => array(
array(
'key' => 'a_client', // name of custom field
'value' => '"' . get_the_ID() . '"',
'compare' => 'LIKE'
)
)
));
?>
Ниже приведен код, который я использую, чтобы назначить клиента для проектов в административной панели проектов. Этот скрипт отображает любого клиента, которого я создал на странице клиента, и отображает их имена в выпадающем меню.
add_action( 'add_meta_boxes', 'add_clients_custom_metabox' );
function add_clients_custom_metabox() {
add_meta_box( 'custom-metabox', __( 'Clients' ), 'clients_custom_metabox', 'projects', 'side', 'high' );
}
function clients_custom_metabox($post) {
global $post,$current_user;
//remember the current $post object
$real_post = $post;
//get curent user info (we need the ID)
get_currentuserinfo();
//create nonce
echo '<input type="hidden" name="clients_meta_box_nonce" value="', wp_create_nonce(basename(__FILE__)), '" />';
//get saved meta
$selected = get_post_meta( $post->ID, 'a_clients', true );
//create a query for all of the user clients posts
$clients_query = new WP_Query();
$clients_query->query(array(
'post_type' => 'client_portal',
'posts_per_page' => -1,
'author' => $current_user->ID));
if ($clients_query->have_posts()){
echo '<select name="a_clients" id="a_clients">';
//loop over all post and add them to the select dropdown
echo '<option>Assign a client</option>';
while ($clients_query->have_posts()){
$clients_query->the_post();
echo '<option value="'.$post->ID.'" ';
if ( $post->ID == $selected){
echo 'selected="selected"';
}
echo '>'.$post->post_title .'</option>';
}
echo '<select>';
}
//reset the query and the $post to its real value
wp_reset_query();
$post = $real_post;
}
//hook to save the post meta
add_action( 'save_post', 'save_clients_custom_metabox' );
// Process the custom metabox fields
function save_clients_custom_metabox( $post_id ) {
global $post;
// verify nonce
if (!wp_verify_nonce($_POST['clients_meta_box_nonce'], basename(__FILE__))) {
return $post_id;
}
// check autosave
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return $post_id;
}
// check permissions
if ('events' == $_POST['post_type']) {
if (!current_user_can('edit_page', $post_id)) {
return $post_id;
}
} elseif (!current_user_can('edit_post', $post_id)) {
return $post_id;
}
if( $_POST ) {
$old = get_post_meta($post_id, 'a_clients', true);
$new = $_POST['a_clients'];
if ($new && $new != $old){
update_post_meta($post_id, 'a_clients', $new);
}
}
}
Полный код для single.php http://pastebin.com/na7djwsq
Регистрация Тип сообщения Я использую Тип сообщения проекта называется => проекты Тип сообщения клиента называется => client_portal
источник
paged
установлено$client_ID
? вы такжеposts_per_page
хотите вернуть все сообщения.client
должно быть,a_client
и @ bigant841 сохраняет мета в виде массива, поэтому это выглядит так:[a_clients] => Array ([0] => 91)
projects
? Нетproject
?Ответы:
Вы устанавливаете мета поста как
a_clients
, но запрос ищетa_client
.update_post_meta($post_id, 'a_clients', $new);
'key' => 'a_client'
Те должны быть одинаковыми. Поскольку обновление запроса означает, что вам больше не придется обновлять сообщения, я предлагаю обновить
key
мета-запрос доa_clients
.источник