Hi thanks for the question. We don't quite have a syntax for a product of operators across many sites (at least not in the C++ version of ITensor) if by syntax you mean something like a simple-to-use input system such as the AutoMPO system for sums of local operators.
But a good way to make such a product is to make an MPO in a custom way, by setting the individual tensors to be what you want. For the case of a product of operators, each MPO tensor on some site "j" is just the operator you want on site "j", including identity operators on sites where you don't want any non-trivial operator.
So then a pattern of code you could write would be to make an MPO on N sites;
auto m = MPO(N);
then make a for loop from 1 to N and on each site set the operator that you want using:
m.ref(j) = opj;
where opj is an ITensor with one unprimed and one primed index, both indices being the site index for site j. You can obtain many predefined operators using syntax like:
auto opj = op(sites,"Sz",j);
where sites
is something like a SpinHalf or SpinOne or other "site set" object.
Please let me know if you have any questions about that process, or if you need, say, a custom operator that's not pre defined for a given site set.
Miles