0

ログインしたユーザーがクリックして「お気に入り」のリストに投稿を保存できる、シンプルな「お気に入りの投稿」ボタンを作成しました。このボタンは、現在の投稿IDをuser_metaフィールドに追加します。

ただし、「お気に入り」ページに情報を表示することに関しては、少し行き詰まっています。

お気に入りの投稿IDのリストを問題なく表示できますが、投稿のタイトルやパーマリンクなどの情報を追加しようとすると、Wordpressは「お気に入り」ページの情報を配列に渡します。「お気に入り」のリストの上に、ハイパーリンクされた「お気に入り」も表示されます。

これを防ぐ方法についての考え。これがコードです...

<?php //start favorites list
    // Get user info.
    global $current_user, $wp_roles;
    get_currentuserinfo();

    $myFaves = get_user_meta($current_user->id, 'faveposts', true);
    $myFavesArray = explode(',',$myFaves);
    sort($myFavesArray);

    foreach ($myFavesArray as $myFave) :
?>

    <a href="<?php echo get_permalink( $myFave ); ?>">
        <?php echo get_the_title($myFave); ?>
    </a>

<?php endforeach; //end favorites list ?>

そして、これが出力です...

<a href="http://sample-url.com/favorites/">
    Your Favorites
</a>

<a href="http://sample-url.com/post-1/">
    Post Title 1
</a>

<a href="http://sample-url.com/post-2/">
    Post Title 2
</a>

投稿タイトル1と2は、実際にお気に入りの投稿の例です。お気に入りは、お気に入りを表示するページです(表示されるべきではありません)。

考え?

編集

修正が見つかりました。このコードを追加すると、現在の投稿が配列から削除されます...

unset($myFavesArray[0]);

したがって、最終的なコードは...

$myFaves = get_user_meta($current_user->id, 'faveposts', true);
$myFavesArray = explode(',',$myFaves);
unset($myFavesArray[0]);
sort($myFavesArray);

foreach ($myFavesArray as $myFave) :
4

1 に答える 1

2

コードによると、$myFavesArrayの最初のインデックス値は空のようです。そのため、最初に空のパラメータを渡したためにget_permalink()を使用すると、現在の投稿リンクが返されます。したがって、配列の$myFavesArray[0]最初のインデックスの設定を解除する必要があります。

1つの提案:ユーザーメタに値を保存するときは、配列の空の値を削除するコードを実行し、配列に一意の値を格納します。その後、取得するときにuser_metaに対して操作を行う必要はありません。

これがお役に立てば幸いです。ではごきげんよう ;)

于 2012-09-28T06:28:33.873 に答える